Kerberos介绍:
Kerberos 是一种网络认证协议,用于在不安全的网络中以安全的方式对用户和服务进行身份验证。它通过使用密钥加密技术来防止数据被窃听或篡改,确保了认证过程的安全性。Kerberos 认证的主要特点包括:
票据(Tickets):
用户首先向认证服务器(AS)请求一个票据授权票(Ticket-Granting Ticket, TGT),然后使用 TGT 向票据授权服务器(Ticket-Granting Server, TGS)请求服务票据。
认证服务器(Authentication Server, AS):
AS 是 Kerberos 认证过程中的第一个服务,负责验证用户的身份,并发放初始的 TGT。
票据授权服务器(Ticket-Granting Server, TGS):
TGS 负责发放访问特定服务的票据。用户使用 TGT 向 TGS 请求服务票据。
服务票据(Service Ticket):
用户使用服务票据向目标服务进行认证,服务票据授权用户访问特定的服务。
密钥分发中心(Key Distribution Center, KDC):
KDC 通常包含 AS 和 TGS,负责分发密钥和票据。
Kerberos Realm:
一个 Kerberos 认证域,是一组受信任的用户和服务。
安全性:
Kerberos 通过加密技术确保认证过程中的数据安全,防止了密码在网络上的明文传输。
单点登录(Single Sign-On, SSO):
用户只需登录一次,就可以访问所有使用 Kerberos 认证的服务,无需重复输入凭据。
信任关系:
在 Kerberos 域内,用户和服务之间存在信任关系,允许用户访问域内的各种资源。
时间同步:
Kerberos 依赖于时间同步,因为票据都有时间戳,如果客户端和 KDC 之间的时间不同步,可能会导致认证失败。
Kerberos 认证广泛应用于企业和大型组织中,特别是在需要高度安全性和数据保护的环境中。例如,Hadoop 集群使用 Kerberos 进行节点和用户之间的安全认证。
默认情况下,Hadoop 集群是没有启用安全认证的,我们可以直接连接。然而,在生产环境中,Hadoop 集群通常会启用安全认证,例如 Kerberos 认证。在TBDS产品中创建hadoop集群时,可以选择是否开启kerberos认证,并且每个用户创建时,系统会生成一个keytab文件。
Kerberos中的用户认证,可通过密码或者密钥文件证明身份,keytab指密钥文件。Keytab文件作为向Kerberos系统提供服务的凭证,在不需要用户提供用户名和密码的情况下进行身份验证。
Java代码
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.fs.FileSystem;public static void main(String[] args) throws Exception {System.setProperty("java.security.krb5.conf", "/path/to/krb5.conf");Configuration configuration = new Configuration();configuration.set("hadoop.security.authentication", "Kerberos");// 使用UserGroupInformation登录UserGroupInformation.setConfiguration(configuration);UserGroupInformation.loginUserFromKeytab("kerberos_user_principal", "/path/to/kerberos_user.keytab");// 获取认证后的UserGroupInformation实例UserGroupInformation ugi = UserGroupInformation.getLoginUser();// 使用doAs方法执行需要认证的操作ugi.doAs(new PrivilegedExceptionAction<Void>() {public Void run() throws Exception {FileSystem fileSystem = FileSystem.get(configuration);// 执行文件系统操作return null;}}