文章目录
- 一、Kerberos协议:
- 二、环境信息:
- 三、安装kerberos
- 四、kerberos日常操作
- 五、常见问题
- 1. 查看ticket是否是renewable
- 2. ticket无法更新
- 3. CDH安装Kerberos后,重启集群报错
- 4. javax.security.auth.login.LoginException: Could not login: the client is being asked for a password
- 5. Ticket not yet valid
- 6. javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Fail to create credential. (63) - No service creds)]
- 7. Mechanism level: Failed to find any Kerberos credentails
- 8. kinit: Included profile directory could not be read while initializing Kerberos 5 library
- 9. error in krb5_recvauth service key not available
- 参考:
一、Kerberos协议:
Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-granting ticket)访问多个服务,即SSO(Single Sign On)。由于在每个Client和Service之间建立了共享密钥,使得该协议具有相当的安全性。
二、环境信息:
信息 | 版本 |
---|---|
操作系统 | centos6.9 |
服务器类型 | 虚拟机 |
CDH | 5.13 |
节点数量 | 5 |
节点信息:
ip | 主机名 | 角色 |
---|---|---|
10.12.24.209 | dx-dev-test1029 | client |
10.12.25.208 | dx-dev-test1026 | client |
10.12.25.209 | dx-dev-test1030 | client |
10.12.26.208 | dx-dev-test1027 | client |
10.12.27.208 | dx-dev-test1028 | server |
三、安装kerberos
使用yum安装kerberos
1. server服务端安装:
yum install krb5-server
2. client客户端安装
注:server节点也是client节点,也是需要安装
yum install krb5-workstation krb5-libs krb5-auth-dialog
3. 服务端节点配置
(1) 修改/etc/krb5.conf
/etc/krb5.conf
: 包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的机器上的配置文件都同步。这里仅列举需要的基本配置。
注意修改:红色的标记
文件内容如下:
[libdefaults]
default_realm = RONG360.COM
dns_lookup_kdc = false
dns_lookup_realm = false
ticket_lifetime = 86400
renew_lifetime = 604800
forwardable = true
default_tgs_enctypes = aes128-cts aes256-cts-hmac-sha1-96 des3-hmac-sha1 arcfour-hmac
default_tkt_enctypes = aes128-cts aes256-cts-hmac-sha1-96 des3-hmac-sha1 arcfour-hmac
permitted_enctypes = aes128-cts aes256-cts-hmac-sha1-96 des3-hmac-sha1 arcfour-hmac
udp_preference_limit = 1
kdc_timeout = 60000
[realms]
RONG360.COM = {
kdc = dx-dev-test1028
admin_server = dx-dev-test1028
}
[domain_realm]
~
说明:
[logging]
:表示server端的日志的打印位置[libdefaults]
:每种连接的默认配置,需要注意以下几个关键的小配置default_realm = HADOOP.COM
默认的realm,必须跟要配置的realm的名称一致。udp_preference_limit = 1
禁止使用udp可以防止一个Hadoop中的错误oticket_lifetime
表明凭证生效的时限,一般为24小时。orenew_lifetime
:表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败。[realms]
:列举使用的realm。kdc
:代表要kdc的位置。格式是 机器:端口admin_server
:代表admin的位置。格式是机器:端口default_domain
:代表默认的域名,为该主机提供的服务提供从主机名到 Kerberos 领域名称的转换。[appdefaults]
:可以设定一些针对特定应用的配置,覆盖默认配置。
udp_preference_limit = 1 kdc原生支持tcp/udp协议,客户端访问kdc服务时,默认先使用udp协议发起请求,如果数据包过大或者请求失败,然后再换用tcp协议请求。网络条件不好,如果使用udp容易出现丢包现象。
(2) 修改/var/kerberos/krb5kdc/kdc.conf
默认放在 /var/kerberos/krb5kdc/kdc.conf
。或者通过覆盖KRB5_KDC_PROFILE环境变量修改配置文件位置。
文件内容如下:
文件内容如下:
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
RONG360.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 = 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
}
说明:
RONG360.COM
:是设定的realms。名字随意。Kerberos可以支持多个realms,会增加复杂度。本文不探讨。大小写敏感,一般为了识别使用全部大写。这个realms跟机器的host没有大关系。max_renewable_life = 7d
涉及到是否能进行ticket的renwe必须配置。master_key_type
:和supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,更多参考2.2.9关于AES-256加密:。推荐不使用。acl_file
:标注了admin的用户权限。文件格式是Kerberos_principal permissions [target_principal] [restrictions]
支持通配符等。admin_keytab
:KDC进行校验的keytab。后文会提及如何创建。supported_enctypes
:支持的校验方式。注意把aes256-cts去掉。
(3) 修改/var/kerberos/krb5kdc/kadm5.acl
编辑 Kerberos 访问控制列表文件 (kadm5.acl) 文件应包含允许管理 KDC 的所有主体名称。
文件内容如下:
*/admin@RONG360.COM *
注:客户端节点只需要 /etc/krb5.conf 文件。
4.创建/初始化Kerberos database
初始化并启动:完成上面三个配置文件后,就可以进行初始化并启动了。
创建命令:
kdb5_util create -s -r RONG360.COM
其中,[-s]表示生成stash file,并在其中存储master server key(krb5kdc);还可以用[-r]来指定一个realm name —— 当krb5.conf中定义了多个realm时才是必要的。
#保存路径为/var/kerberos/krb5kdc 如果需要重建数据库,将该目录下的principal相关的文件删除即可
在此过程中,我们会输入database的管理密码。这里设置的密码一定要记住,如果忘记了,就无法管理Kerberos server。
当Kerberos database创建好后,可以看到目录 /var/kerberos/krb5kdc
下生成了几个文件:
kadm5.acl
kdc.conf
principal
principal.kadm5
principal.kadm5.lock
principal.ok
5. 重启服务
重启服务
service krb5kdc start 或 systemctl start krb5kdc
service kadmin start 或 systemctl start kadmin
6. 设置开机启动
设置开机自动启动:
chkconfig krb5kdc on 或 systemctl enable krb5kdc
chkconfig kadmin on 或 systemctl enable kadmin
现在KDC已经在工作了。这两个daemons将会在后台运行,可以查看它们的日志文件(/var/log/krb5kdc.log
和 /var/log/kadmind.log
)。
可以通过命令kinit来检查这两个daemons是否正常工作。
7. 添加database administrator
我们需要为Kerberos database添加administrative principals (即能够管理database的principals) —— 至少要添加1个principal来使得Kerberos的管理进程kadmind能够在网络上与程序kadmin进行通讯。
在maste KDC上执行:
/usr/sbin/kadmin.local -q "addprinc admin/admin"
通过上面的命令为其设置密码
kadmin.local
可以直接运行在master KDC上,而不需要首先通过Kerberos的认证,实际上它只需要对本地文件的读写权限。
8. 客户端阶段配置
将之前修改的/etc/krb5.conf
拷贝到从节点。
四、kerberos日常操作
1. 管理员操作
登陆
登录到管理员账户: 如果在本机上,可以通过kadmin.local直接登录。其它机器的,先使用kinit进行验证。
增删改查账户
在管理员的状态下使用addprinc,delprinc,modprinc,listprincs命令。使用?可以列出所有的命令。
kadmin.local -q "addprinc -pw 111111 test"
kadmin.local: delprinc test
kadmin.local: listprincs
生成keytab:使用xst命令或者ktadd命令
ktadd -k /home/test/test.keytab -norandkey test
合并key
合并hadoop.keytab和HTTP.keytab为hdfs.keytab。
ktutil
rkt hadoop.keytab
rkt HTTP.keytab
wkt hdfs.keytab
2. 用户操作
查看当前的认证用户
认证用户
kinit -kt /xx/xx/kerberos.keytab hdfs/hadoop1
删除当前的认证的缓存
kdestroy
修改krbtgt的maxrenewlife
kadmin.local -q 'modprinc -maxrenewlife "7d" krbtgt/RONG360.COM'
修改凭据的maxrenewlife
这里需要看自己的hue的用户主体是什么,换成自己的
kadmin.local -q 'modprinc -maxrenewlife 7day +allow_renewable <principal_name>'
修改凭据的ticket_lifetime
kadmin.local -q 'modprinc -maxlife 6minutes <principal_name>'
五、常见问题
1. 查看ticket是否是renewable
通过klist命令来查看
如果Valid starting的值与renew until的值相同,则表示该principal的ticket 不是 renwable。
2. ticket无法更新
如果过了Expires,可以通过命令kinit –R来更新ticket
但如果ticket无法更新
[root@vmw201 ~]$ kinit -R
kinit: Ticket expired while renewing credentials
这是因为krbtgt/HADOOP.COM@ HADOOP.COM的[renewlife]被设置成了0,这一点可以通过[kadmin.local => getprinc krbtgt/ HADOOP.COM @ HADOOP.COM]看出来。
将krbtgt/HADOOP.COM@HADOOP.COM的[renewlife]修改为7days即可。
kadmin.local: modprinc -maxrenewlife 1week krbtgt/HADOOP.COM@HADOOP.COM
3. CDH安装Kerberos后,重启集群报错
ocket Reader #1 for port 8022: readAndProcess from client 192.168.50.83 threw exception [javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: Failure unspecified at GSS-API level (Mechanism level: Encryption type AES256 CTS mode with HMAC SHA1-96 is not supported/enabled)]]
Socket Reader #1 for port 8020: readAndProcess from client 192.168.50.77 threw exception [javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: Failure unspecified at GSS-API level (Mechanism level: Encryption type AES256 CTS mode with HMAC SHA1-96 is not supported/enabled)]]
原因:
因为系统采用的是Centos7.6,对于使用Centos5.6及以上西戎,默认采用 AES-256 来加密;这就需要CDH集群所有的节点都安装 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File
下载链接:
https://www.oracle.com/technetwork/java/javase/downloads/index.html
解决办法:
1.下载的文件是个zip包,解压
2.将解压后的 UnlimitedJCEPolicyJDK8 文件下的两个jar包 复制到 $JAVA_HOME/jre/lib/security/
#我的JAVA_HOME=/opt/module/jdk1.8.0_144
cp UnlimitedJCEPolicyJDK8/*.jar /opt/module/jdk1.8.0_144/jre/lib/security/
3.如果你的JAVA_HOME不是在/usr/java下,那么还需要进行一步操作
mkdir /usr/java
#创建软链接指向自己的JAVA_HOME
ln -s /opt/module/jdk1.8.0_144/ default
4. javax.security.auth.login.LoginException: Could not login: the client is being asked for a password
问题描述:
Kafka 集成 kerberos 报错。报错内容如上。
解决方案:
- 确认/etc/kafka/kafka_server_jaas.conf中的principal包含在keytab中。
- 确认 keytab 文件权限是否正确。
5. Ticket not yet valid
问题描述:
在使用 kprop
同步数据时,报错 Ticket not yet valid
.
问题原因:
同步服务器/被同步服务器时钟不一致。
解决方案:
保障同步服务器/被同步服务器的时间一致。
6. javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Fail to create credential. (63) - No service creds)]
- 由JDK缺陷引起
- 票证消息对于UDP协议而言太大
- 主机未正确映射到Kerberos领域
我这里遇到的问题时:
- 主机未正确映射到Kerberos领域,domain_realm 这一项配置没有正确映射域名,大家这里注意一下
- 从主机名到 Kerberos 领域名称的转换配置了多项,导致无法正确识别Kerberos domain。
7. Mechanism level: Failed to find any Kerberos credentails
- [realms]错误配置多个kdc
8. kinit: Included profile directory could not be read while initializing Kerberos 5 library
1、查看/etc/krb5.conf下的includedir是否存在
2、查看includedir对应的路径是否正确
注释includedir即可。
9. error in krb5_recvauth service key not available
查看 kprop 服务时,发现抱错
systemctl status kprop
解决方案:
检查 /etc/krb5.keytab 文件是否存在,是否包含了kprop 同步所需的主体。
参考:
http://www.cppcns.com/os/linux/166490.html