CDH6集群开启Kerberos认证
一、部署Kerberos服务端
Kerberos(也称为“GSSAPI”)是一种身份验证协议,用于在分布式计算环境中提供安全的身份验证和授权服务。它是由MIT开发的,并于1987年首次发布。Kerberos是一种基于X.509的认证协议,它使用TGS(Ticket Granting Service)来协调身份验证和授权过程。TGS是一种中间代理服务器,它负责协调Kerberos认证过程中的各个服务器。Kerberos可以在多个计算机系统之间提供安全的认证和授权服务,这些计算机系统可以运行在同一台主机上,也可以运行在不同的主机上。
Kerberos有以下特点:
可靠性高:Kerberos使用了分布式存储和认证,可以在多个计算机系统之间提供高可用性和容错能力。
安全性高:Kerberos使用了TLS(Transport Layer Security)来加密通信,并使用了SMTP(Simple Mail Transfer Protocol)等协议来进行身份验证和授权。
灵活性高:Kerberos支持多种认证和授权模式,包括单点登录、集中认证和授权等。
可扩展性高:Kerberos可以在多个计算机系统之间扩展,并支持分布式架构。
1、部署软件
CentOS 7: 服务端: yum install krb5-server krb5-libs krb5-workstation -y 客户端: yum install krb5-devel krb5-workstation -y
2、配置krb5.conf文件
vim /etc/krb5.conf includedir /etc/krb5.conf.d/ # 日志输出位置 [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log # 连接的默认配置 [libdefaults] default_realm = KRBCDH.COM # Kerberos应用程序的默认领域,所有的principal都将带有这个领域标志。可以自定义 dns_lookup_kdc = false dns_lookup_realm = false ticket_lifetime = 24h # 表明凭证生效的时限,一般为24小时。 renew_lifetime = 7d # 表明凭证最长可以被延期的时限,一般为一个星期。当凭证过期之后,对安全认证的服务的后续访问则会失败。 forwardable = true # rdns = false # pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt # default_realm = EXAMPLE.COM # default_ccache_name = KEYRING:persistent:%{uid} # 列举使用的realm [realms] KRBCDH.COM = { kdc = cdh-master # 表示kdc的位置,一般为服务器主机名 admin_server = cdh-master # 表示admin的位置,一般为服务器主机名 } # 域名到realm的关系 [domain_realm] .krbcdh.com = KRBCDH.COM krbcdh.com = KRBCDH.COM
3、配置kdc.conf文件
vim /var/kerberos/krb5kdc/kdc.conf [kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] KRBCDH.COM = { master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal } """ 配置说明: [realms]:realms的配置 KRBCDH.COM:设定的realms领域 master_key_type:默认使用 aes256-cts。JAVA 使用 aes256-cts 验证方式需要去官网下载jce_policy-8.zip包,解压后会有两个jar包,找到$JAVA_HOME下跟它同名的两个jar包的位置,将其替换掉。 acl_file:标注了 admin 的用户权限,文件格式是:Kerberos_principal permissions [target_principal] [restrictions] supported_enctypes:支持的校验方式 admin_keytab:KDC 进行校验的 keytab """
4、同步配置文件到其他客户端主机
[root@cdh-master etc]# scp krb5.conf root@cdh-node1:/etc/ krb5.conf [root@cdh-master etc]# scp krb5.conf root@cdh-node2:/etc/ krb5.conf
5、初始化KDC数据库
[root@cdh-master ~]# kdb5_util create -r KRBCDH.COM -s Loading random data Initializing database '/var/kerberos/krb5kdc/principal' for realm 'KRBCDH.COM', master key name 'K/M@KRBCDH.COM' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key: Re-enter KDC database master key to verify: # 这步需要自定义一个kdc数据库的密码。
6、创建KDC数据库的管理员账户
[root@cdh-master ~]# kadmin.local -q "addprinc admin/admin" Authenticating as principal root/admin@KRBCDH.COM with password. WARNING: no policy specified for admin/admin@KRBCDH.COM; defaulting to no policy Enter password for principal "admin/admin@KRBCDH.COM": Re-enter password for principal "admin/admin@KRBCDH.COM": Principal "admin/admin@KRBCDH.COM" created.
# 这步需要自定义管理员的密码。
7、为KDC数据库管理员设置ACL权限
vim /var/kerberos/krb5kdc/kadm5.acl */admin@KRBCDH.COM *
8、启动Kerberos服务
systemctl krb5kdc start systemctl kadmin start systemctl enable krb5kdc systemctl enable kadmin
9、kerberos的日常操作
登录Kerberos: kadmin.local 查看已存在凭据:list_principals, listprincs, get_principals, getprincs 添加凭据:add_principal, addprinc, ank 修改凭据密码:change_password, cpw 删除凭据:delete_principal, delprinc 认证用户:kinit 查看当前认证用户:klist 删除当前认证的缓存:kdestroy 查看帮助信息:?
二、在CDH集群启用Kerberos
1、在KDC server上创建cloudera管理凭证
[root@cdh-master ~]# kadmin.local -q "addprinc cloudera-scm/admin@KRBCDH.COM" Authenticating as principal root/admin@KRBCDH.COM with password. WARNING: no policy specified for cloudera-scm/admin@KRBCDH.COM; defaulting to no policy Enter password for principal "cloudera-scm/admin@KRBCDH.COM": Re-enter password for principal "cloudera-scm/admin@KRBCDH.COM": Principal "cloudera-scm/admin@KRBCDH.COM" created. # 给clouder-scm/admin设置一个密码,记住这个密码,等会要用。
2、通过Cloudera Manager启用Kerveros
三、通过认证来操作hdfs
1、未创建操作凭证时的现象
[root@cdh-master ~]# hdfs dfs -ls hdfs://cdh-master:8020/ 23/06/01 10:19:16 WARN ipc.Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS] ls: Failed on local exception: java.io.IOException: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]; Host Details : local host is: "cdh-master/192.168.80.107"; destination host is: "cdh-master":8020;
2、在Kerberos服务器上创建访问凭证
[root@cdh-master ~]# kadmin.local -q "addprinc -randkey zhang/cdh-master@KRBCDH.COM"
3、创建认证凭证文件
[root@cdh-master ~]# kadmin.local -q "xst -k hdfs.keytab zhang/cdh-master@KRBCDH.COM"
# 会在当前目录下生成一个叫hdfs.keytab的文件,
4、通过凭证验证
[root@cdh-master ~]# kinit -k -t hdfs.keytab zhang/cdh-master@KRBCDH.COM [root@cdh-master ~]# klist # 查看验证信息 Ticket cache: FILE:/tmp/krb5cc_0 Default principal: zhang/cdh-master@KRBCDH.COM Valid starting Expires Service principal 06/02/2023 09:13:45 06/03/2023 09:13:45 krbtgt/KRBCDH.COM@KRBCDH.COM
5、再次操作hdfs
[root@cdh-master ~]# hdfs dfs -ls hdfs://cdh-master:8020/ Found 3 items drwxr-xr-x - zhang supergroup 0 2023-06-02 14:01 hdfs://cdh-master:8020/nginx drwxrwxrwt - hdfs supergroup 0 2023-06-02 10:04 hdfs://cdh-master:8020/tmp drwxr-xr-x - hdfs supergroup 0 2023-06-02 14:20 hdfs://cdh-master:8020/user # 认证成功
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!