大数据开发系列三:kerberos认证实践
大数据开发系列三:kerberos认证实践 来源: https://www.ucloud.cn/yun/129204.html 作者: IT那活儿 发布日期: 发布于2023 01 11 13:19 大数据开发系列三:kerberos认证实践 点击上方“IT那活儿 ”公众号,关注后了解更多内容,不管IT什么活儿,干就完
来源: https://www.ucloud.cn/yun/129204.html 作者: IT那活儿 发布日期: 发布于2023-01-11 13:19
大数据开发系列三:kerberos认证实践
点击上方“IT那活儿**”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!**
我们平常会基于大数据组件来实现客户业务场景,而所使用大数据组件时(hadoop/flink/kafka等),会被安全厂商扫描出安全访问漏洞,业界推荐用kerberos来解决此类安全访问问题。
Kerberos介绍
Kerberos是一种网络认证协议,在互不信任的网络中,Kerberos提供了一种可靠的中心化认证协议,以便网络中的各个机器之间能够相互访问。
安装规划
| 类型 | 主机 | 主机hostname | 安装组件 |
| 服务端 | 192.168.199.102 | bigdata-03 | krb5-server krb5-workstation krb5-libs krb5-devel |
| 客户端 | 192.168.199.104 | bigdata-05 | krb5-workstation krb5-devel |
服务端与客户端主机网络互通,并且配置对应相互hostname映射关系。
服务端安装和配置Kerberos软件
1. 软件安装
1)在线安装:yum install -y krb5-server krb5-workstation krb5-libs
2)离线rpm 安装:
rpm 下载位置http://mirror.centos.org/centos/7/os/x86\_64/Packages/
rpm -qa|grep krb 查看当前服务器安装的包,安装如下对应的的安装包:
- rpm -ivh libkadm5-1.15.1-50.el7.x86_64.rpm
- rpm -ivh krb5-libs-1.15.1-50.el7.x86_64.rpm
- rpm -ivh krb5-workstation-1.15.1-50.el7.x86_64.rpm
- rpm -ivh krb5-server-1.15.1-50.el7.x86_64.rpm
- rpm -ivh krb5-devel-1.15.1-50.el7.x86_64.rpm
2. 修改kdc配置文件
软件包安装后,修改/var/kerberos/krb5kdc/kdc.conf文件红色部份,指定域名,kdc 端口默认为88 ,可以根据实际情况进行修改。
[kdcdefaults]kdc_ports = 88kdc_tcp_ports = 88[realms]HADOOP.COM = {#master_key_type = aes256-ctsacl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabsupported_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}
3. 修改krb配置文件
修改/etc/krb5.conf文件:
# Configuration snippets may be placed in this directory as wellincludedir /etc/krb5.conf.d/[logging]default = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crtdefault_realm = HADOOP.COM #默认领域,跟kdc.conf里面realms保持一致#default_ccache_name = KEYRING:persistent:%{uid}[realms]HADOOP.COM = {kdc = bigdata-03 #主节点hostnameadmin_server = bigdata-03 #主节点hostname}[domain_realm].hadoop.com = HADOOP.COM #DNS域名,跟kdc.conf里面realms保持一致hadoop.com = HADOOP.COM #DNS域名,跟kdc.conf里面realms保持一致
说明:
default_ccache_name:默认的缓存名称,需要注释掉,否侧hadoop指令会报错。
org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
4. 修改kadm5配置文件
修改/var/kerberos/krb5kdc/kadm5.acl文件,内容如下
*/admin@HADOOP.COM *
5. 初始化Kerberos的数据库
[root@bigdata-03 ~]# kdb5_util create -s -r HADOOP.COMLoading random dataInitializing database /var/kerberos/krb5kdc/principal for realm HADOOP.COM,master key name K/M@HADOOP.COMYou will be prompted for the database Master Password.It is important that you NOT FORGET this password.
这是需要输入密码:xxxxx
数据库master账户:K/M@HADOOP.COM*
#如果提示不能创建,删除后重试:
kdb5_util: Cannot open DB2 database /var/kerberos/krb5kdc/principal: File exists while creating database /var/kerberos/krb5kdc/principal[root@bigdata-03 ~]# rm -f /var/kerberos/krb5kdc/principal*
初始化成功后,会自动生成认证文件:
ls -a /var/kerberos/krb5kdc/
- principal和principal.ok是Kerberos数据库文件。
- principal.kadm5和principal.kadm5.lock是Kerberos系统管理数据库。
- .K5.MYTRAIN.COM是由-s参数创建的隐藏文件。
6. 测试Kerberos数据库
使用kadmin.local程序可以访问刚刚建立的Kerberos数据库,Kadmin是Kerberos数据库的管理接口,Kadmin里面的kerberos管理员可以添加,修改和删除principal(主体),修改密码和执行其他管理任务。
1)进入Kadmin接口
kadmin.local
2)列举当前KDC中主体
listprincs

7. 创建Kerberos管理员用户
在KDC所在主机,执行以下命令,并按照提示输入password。
kadmin.local -q "addprinc admin/admin@HADOOP.COM"
或者在kadmin.local里面:
addprinc admin/admin@HADOOP.COM

标准:account/instance@realm
例子:admin/admin@HADOOP.COM
- account :表示账户名 或者服务类型
- instance表示实例,一般为主机名表示 属于这个主机名下的某个账户
- realm 表示域名 如 HADOOP.COM
客户端安装和配置Kerberos软件
1. 安装
- rpm -ivh libkadm5-1.15.1-50.el7.x86_64.rpm
- rpm -ivh krb5-workstation-1.15.1-50.el7.x86_64.rpm
- rpm -ivh krb5-devel-1.15.1-50.el7.x86_64.rpm
同步krb5.conf ,从管理端/etc/krb5.conf 复制到各个客户端同样的位置。
2. 验证
客户端机器验证:
kinit admin/admin@HADOOP.COM 密码为前面初始化密码。
正确的结果就是没有任何反应。
klist 列出当前系统用户的 Kerberos认证情况:

常用问题
1. 错误一
org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
需注释/etc/krb5.conf文件 #default_ccache_name = KEYRING:persistent:%{uid} 配置项。
2. 错误二
libgssapi_krb5.so.2: cannot open shared object file: No such file or directory
卸载Kerberos时,用rpm 删除krb5-libs包,加了--nodeps参数会把相关联的uyiglibgssapi_krb5.so.2依赖包也删除掉了,从而导致在主机上输入命令时都会报该报错信息。
**解决办法:**在这台主机上用Java编写Socket服务程序,从另外一台已有krb5-libs的机器上编写Socket客户端程序,上传krb5-libs文件至Socket服务端,重新安装krb5-libs包,主机服务恢复正常。

本文作者:长研架构小组(上海新炬王翦团队)
本文来源:“IT那活儿”公众号
