BUG
BUG写在前面:Kerberos 1.15.1-18.el7.x86_64 版本有BUG,不要安装这个版本!!!!
如果已安装上面描述版本不要怕,这里有一篇解决方案升级kerberos
1.系统环境
1.操作系统:CentOS Linux release 7.5.1804 (Core)
2. CDH: 5.16.2-1.cdh5.16.2.p0.8
3. Kerberos:1.15.1-50.el7x86
4.采用root用户进行操作
2.KDC服务安装及配置
2.1.安装KDC服务
在Cloudera Manager服务器上安装KDC服务
在CMWEIUI界面(http://cmip:7180/cmf/hardware/roles#clusterId=1)查看cm安装地址.例如下图中安装在namenode02
在namenode02 上面执行下面命令
yum -y install krb5-server krb5-libs krb5-auth-dialog krb5-workstation
安装完之后,会在KDC 主机上生成配置文件
• /etc/krb5.conf
• /var/kerberos/krb5kdc/kdc.conf
2.2.修改配置文件
2.2.1.修改krb5.conf 文件
2.2.1.1.修改文件地址
/etc/krb5.conf
2.1.1.2. 修改内容
修改内容如下,标注黄色的为修改的内容,其他配置可根据实际情况调整
# Configuration snippets may be placed in this directory as well
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]
dns_lookup_realm = false
dns_lookup_kdc = false
# ticket_lifetime = 24h
ticket_lifetime = 60d
# renew_lifetime = 7d
renew_lifetime = 180d
forwardable = true
rdns = false
default_realm = HADOOP.COM
#default_ccache_name = KEYRING:persistent:%{uid}
[realms]
HADOOP.COM = {
kdc = namenode02
admin_server = namenode02
}
[domain_realm]
# .hadoop.com = HADOOP.COM
# hadoop.com = HADOOP.COM
2.1.1.3. 解释说明
default_realm = HADOOP.COM #指定默认的域名
HADOOP.COM = {
kdc = namenode02 #kdc 服务器地址
admin_server = namenode02 #admin 服务(域控制器)地址
}
2.1.2. 修改kadm5.acl 文件
2.1.2.1. 修改文件地址
/var/kerberos/krb5kdc/kadm5.acl
2.1.2.2. 修改内容
*/admin@HADOOP.COM *
2.1.2.3. 解释说明
给数据库管理员添加ACL 权限,修改kadm5.acl 文件,*代表全部权限
#当前用户admin ,* 表示全部权限。可以新增用户和分配权限
#配置表示以/admin@HADOOP.COM 结尾的用户拥有*(all 也就是所有)权限
2.1.3. 修改kdc.conf 文件
2.1.3.1. 修改文件地址
/var/kerberos/krb5kdc/kdc.conf
2.1.3.2. 修改内容
修改内容如下,标注黄色的为修改的内容,其他配置可根据实际情况调整
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
HADOOP.COM = {
#master_key_type = aes256-cts
max_life = 30d
max_renewable_life = 180d 0h 0m 0s
#max_renewable_life = 7d 0h 0m 0s
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
}
3.创建Kerberos数据库
kdb5_util create –r HADOOP.COM -s
此处需要输入Kerberos数据库的密码。
---
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'HADOOP.COM',
master key name 'K/M@HADOOP.COM'
You will be prompted for the database Master Password. [输入密码: HADOOP.COM]
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:
---
创建好数据库后。可以在目录/var/kerberos/krb5kdc
看到以下文件:
若重建数据库则需先删除/var/kerberos/krb5kdc 下面principal 相关文件
说明:
• [-s] 表示生成stash file,并在其中存储master server key(krb5kdc)
• [-r] 来指定一个realm name,当krb5.conf 中定义了多个realm 时使用
• 当Kerberos database 创建好了之后,在/var/kerberos/中可以看到生成的principal
相关文件
• 如果遇到数据库已经存在的提示,可以把/var/kerberos/krb5kdc/ 目录下的
principal 的相关文件都删除掉。默认的数据库名字都是principal。可以使用-d 指
定数据库名字。
4.创建Kerberos的管理账号
注意kadmin.local 可以直接运行在KDC 上,而无需通过Kerberos 认证
命令
kadmin.local
addprinc admin/admin@HADOOP.COM
执行
----
[root@namenode02 ~]# kadmin.local
Authenticating as principal root/admin@HADOOP.COM with password.
kadmin.local: addprinc admin/admin@HADOOP.COM
WARNING: no policy specified for admin/admin@HADOOP.COM; defaulting to no policy
Enter password for principal "admin/admin@HADOOP.COM": 【输入密码为admin】
Re-enter password for principal "admin/admin@HADOOP.COM":
Principal "admin/admin@HADOOP.COM" created.
kadmin.local: exit
----
5.启动kerberos
将Kerberos 服务添加到自启动服务,并启动krb5kdc 和kadmin 服务。
命令
systemctl enable krb5kdc
systemctl enable kadmin
systemctl start krb5kdc
systemctl start kadmin
6.验证Kerberos的管理员账号
命令
kinit admin/admin@HADOOP.COM
klist
执行
---
[root@namenode02 ~]# kinit admin/admin@HADOOP.COM
Password for admin/admin@HADOOP.COM: [输入密码:admin]
[root@namenode02 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/admin@HADOOP.COM
Valid starting Expires Service principal
12/03/2021 10:51:53 01/02/2022 10:51:53 krbtgt/HADOOP.COM@HADOOP.COM
renew until 06/01/2022 10:51:53
---
7.安装Kerberos客户端(所有节点)
为集群安装所有Kerberos客户端,包括Cloudera Manager
以namenode01为例:
yum -y install krb5-libs krb5-workstation
8.在Cloudera Manager Server服务器上安装额外的包
yum -y install openldap-clients
9.拷贝配置文件
将KDC Server上的krb5.conf文件拷贝到所有Kerberos客户端
以namenode01为例:
scp /etc/krb5.conf root@namenode01:/etc
10.配置JCE
对于使用Centos5.6 及以上的系统,默认采用AES-256 来加密。这就需要CDH
集群所有的节点都安装Java Cryptography Extension (JCE) Unlimited
Strength Jurisdiction Policy File
下载路径:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-21331
66.html
下载后,在各节点
执行,将US_export_policy.jar放到jre下面.
unzip jce_policy-8.zip
cp US_export_policy.jar
/usr/java/jdk1.8.0_231/jre/lib/security/US_export_policy.jar
11.添加cm管理员账号
在KDC中给Cloudera Manager添加管理员账号
查看cmd的用户名,如下图所示的,用户名为: cloudera-scm
给Cloudera Manager添加管理员账号
命令
kadmin.local
addprinc cloudera-scm/admin@HADOOP.COM
list_principals
执行
----
Authenticating as principal admin/admin@HADOOP.COM with password.
kadmin.local: addprinc cloudera-scm/admin@HADOOP.COM
WARNING: no policy specified for cloudera-scm/admin@HADOOP.COM; defaulting to no policy
Enter password for principal "cloudera-scm/admin@HADOOP.COM": [输入密码为cloudera-scm]
Re-enter password for principal "cloudera-scm/admin@HADOOP.COM":
Principal "cloudera-scm/admin@HADOOP.COM" created.
kadmin.local: list_principals
K/M@HADOOP.COM
admin/admin@HADOOP.COM
cloudera-scm/admin@HADOOP.COM
kadmin/admin@HADOOP.COM
kadmin/changepw@HADOOP.COM
kadmin/namenode02@HADOOP.COM
kiprop/namenode02@HADOOP.COM
krbtgt/HADOOP.COM@HADOOP.COM
kadmin.local: exit
----
12.配置Kerberos并访问Hadoop相关服务
12.1进入CDH管理安全界面
登录cm的WEBUI界面,选择[管理]–>[安全].进入开启kerberos界面
12.2检查下列步骤已完成
点击[启动kerberos]按钮,进去开启流程,全部打钩,然后点击[继续].
12.3 填写安全域
填写安全域,以及KDC server以及KDC admin server的主机名, 然后点击[继续].
12.4 配置信息
如果勾选了这个选项就可以通过CM 的管理界面来部署krb5.conf,但是实际操
作过程中发现有些配置仍然需要手动修改该文件并同步。所以不建议让
Cloudera Manager 来管理krb5.conf, 点击“继续”
12.5 输入cm管理员账号信息
输入Cloudera Manager 的Kerbers 管理员账号,一定得和之前创建的账号一致
cloudera-scm/admin@HADOOP.COM
12.6 点击继续
12.7选择服务的principal
默认即可,点击继续
12.8 勾选重启
勾选重启集群,然后点击继续
12.9 重启
等待重启,出现下图所示,点击继续
12.10 完成
点击完成
13.附录
13.1.生成keytab文件
kadmin.local
listprincs
ktadd -k /home/kerberos/hdfs.keytab -norandkey hdfs/namenode02@HADOOP.COM
13.2 常见问题
问题1
kadmin: GSS-API (or Kerberos) error while initializing kadmin interface
解决方案
检查NTP 服务是否正常启动,执行ntpq -p 检查偏移量是否正常。如果偏移量
太大,通过date -s "2021-11-03 09:49:00"命令,校正各个主机时间。
问题2
HUE认证问题
解决方案
执行下面命令
klist -f -c /var/run/hue/hue_krb5_ccache
kadmin.local
modprinc -maxrenewlife 90day krbtgt/HADOOP.COM@HADOOP.COM
list_principals
modprinc -maxrenewlife 90day +allow_renewable hue/namenode01@HADOOP.COM
modprinc -maxrenewlife 90day +allow_renewable hue/namenode02@HADOOP.COM
问题3
Caused by: ExitCodeException exitCode=24:
File /var/lib/yarn-ce/etc/hadoop must not be world or group writable, but is 777
解决方案
chmod -R 751 /var/lib
问题4
Can’t create directory /data1/yarn/nm/usercache/hive/appcache/application_1639382956195_0009 - Permission denied
解决方案
到报错主机下面执行下面脚本
chown yarn:yarn /data1/yarn/nm/usercache/hive
13.3.常用命令
#进入kdc
kadmin.local
#创建kdc数据库
kdb5_util create –r HADOOP.COM –s
--创建princ
addprinc cloudera-scm/admin@HADOOP.COM
--删除princ
delprinc cloudera-scm/admin@HADOOP.COM
--修改密码
change_password admin/admin@HADOOP.COM
--查看生命周期
getprinc zookeeper/datanode05
--查看princ
listprincs
--删除数据库
rm -rf /var/kerberos/krb5kdc/principal*
--生成keytab文件
ktadd -k /home/kerberos/hdfs.keytab -norandkey hdfs/namenode02@HADOOP.COM
14.kerberos系列
CDH5安装Kerberos认证
升级kerberos
windows下火狐浏览器中配置kerberos客户端
CDH禁用kerberos
卸载kerberos