centos 7 安装Kerberos并和CDH集成
1. 139(server端)
140(client端)
2. 安装kerberos服务server端
yum -y install krb5-libs krb5-server openldap-clients
2.1 配置/var/kerberos/krb5kdc/kdc.conf
[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] HADOOP.COM = { master_key_type = aes256-cts #需要修改配置jre环境 max_life = 24h max_renewable_life = 7d 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 des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal }
注解:
开启端口号88 :/sbin/iptables -I INPUT -p tcp --dport 88 -j ACCEPT(服务端和客户端)
kdc
firewall-cmd --zone=public --add-port=88/tcp --permanent
kadmin
firewall-cmd --zone=public --add-port=749/tcp --permanent
firewall-cmd --zone=public --add-port=464/tcp --permanent
HADOOP.COM:是设定的realms。名字随意。Kerberos可以支持多个realms,会增加复杂度。本文不探讨。大小写敏感,一般为了识别使用全部大写。这个realms跟机器的host没有大关系。
max_renewable_life = 7d 涉及到是否能进行ticket的renwe必须配置。
master_key_type:和supported_enctypes默认使用aes256-cts。由于JRE中默认的密钥长度比较短,需要修改JRE环境,下载JAR包,local_policy.jar和US_export_policy.jar,放入到jre/lib/security
JDK7的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
JDK8的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
acl_file:标注了admin的用户权限。文件格式是Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。
admin_keytab:KDC进行校验的keytab。后文会提及如何创建。
supported_enctypes:支持的校验方式。
2.2修改/etc/krb5.conf
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = HADOOP.COM dns_lookup_realm = false dns_lookup_kdc = false forwardable = true [realms] HADOOP.COM = { kdc = duan139 #server端主机名 admin_server = duan139 #server端主机名
}
[domain_realm]
.example.com = HADOOP.COM
example.com = HADOOP.COM
说明:
[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:代表默认的域名
[appdefaults]:可以设定一些针对特定应用的配置,覆盖默认配置。
2.3 创建/初始化Kerberos database
/usr/sbin/kdb5_util create -s
若出现Loading random data卡住,可以重新开启一个窗口执行cat /dev/sda > /dev/urandom命令,加快消耗CPU,增加随机数采集。
当Kerberos database创建好后,可以看到目录 /var/kerberos/krb5kdc 下生成了几个文件:
-rw-------. 1 root root 8192 Aug 24 11:35 principal -rw-------. 1 root root 8192 Aug 24 11:33 principal.kadm5 -rw-------. 1 root root 0 Aug 24 11:33 principal.kadm5.lock -rw-------. 1 root root 0 Aug 24 11:35 principal.ok
2.4 添加database administrator
/usr/sbin/kadmin.local -q "addprinc admin/admin"
2.5 为database administrator设置ACL权限,将文件/var/kerberos/krb5kdc/kadm5.acl的内容编辑为
*/admin@HADOOP.COM *
说明:该acl文件的默认路径是 /var/kerberos/krb5kdc/kadm5.acl(也可以在文件kdc.conf中修改)。Kerberos的kadmind daemon会使用该文件来管理对Kerberos database的访问权限。对于那些可能会对pincipal产生影响的操作,acl文件也能控制哪些principal能操作哪些其他pricipals。
2.6 启动Kerberos daemons
/bin/systemctl start krb5kdc.service /bin/systemctl start kadmin.service
3. 安装kerberos client端
yum install krb5-workstation krb5-libs
3.1 配置/etc/krb5.conf,直接把kerberos端的krb5.conf文件复制过来即可。
4.常见操作
4.1 创建Kerberos Account Manager(CDH需要)
kadmin.local kadmin.local: addprinc root/admin (密码是duan) kadmin.local: xst -k /tmp/keytab/root.keytab -norandkey root/admin
说明:-norandkey参数是生成不变的密码。
4.2 查看当前用户
klist
4.3 认证用户
kinit -kt /xx/xx/kerberos.keytab hdfs/hadoop1
4.4 删除当前的认证的缓存
kdestroy
5. CDH启用kerberos
cloudera manager页面-->管理-->安全-->启用kerberos--重启。 HDFS和Yarn配置中搜索spengo ,勾选启用 HTTP Web 控制台的 Kerberos 身份验证。此时,HDFS,yarn和hive的web UI端口就会启用spengo授权保护。报错:
Defective token detected (Mechanism level: GSSHeader did not find the right tag)未解决。
6. 为HDFS服务启用Kerberos时,使用sudo -u hdfs命令无法访问默认的HDFS超级用户帐户。所以需要kerberos创建hdfs@HADOOP.COM。并修改参数。
使用其他用户帐户作为超级用户,而不是默认的hdfs帐户。步骤是HDFS-->配置-->安全-->超级用户组(Superuser Group)-->修改参数为hadoop。
备注:hadoop用户组中的成员为hdfs,mapred,yarn。再添加hive和impala
usermod hive -a -G hadoop
usermod impala -a -G hadoop
kadmin.local kadmin.local: addprinc hdfs (密码是duan) kadmin.local: xst -k /tmp/keytab/hdfs.keytab -norandkey hdfs
su - hdfs kinit hdfs hdfs dfs -ls /
如果不出现错误,证明安装成功了
7. 为HDFS创建普通用户(duan)
7.1 所有服务器中创建duan
7.2 创建kerberos用户
kadmin.local: addprinc duan@EXAMPLE.COM
说明:确保群集中的所有主机都具有duan这个用户。每个帐户的用户ID必须大于或等于1000.在/etc/hadoop/conf/taskcontroller.cfg文件中,banned.users属性的默认设置是mapred,hdfs和bin,以防止作业 从这些用户帐户提交。 min.user.id属性的默认设置是1000,以防止使用小于1000的用户ID提交作业,这些用户ID通常是Unix超级用户。
7.3 在HDFS上的/ user下为每个用户帐户创建一个子目录(例如,/ user / duan)。 将该目录的所有者和组更改为该用户。
$ hadoop fs -mkdir /user/duan $ hadoop fs -chown duan /user/duan
7.4 在HDFS和yarn配置项授权的用户添加duan。如下图:
7.5 测试
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-0.20-mapreduce/hadoop-examples.jar pi 1 1
Q&A
1. impala daemon启动失败
在HDFS中配置授权的用户,添加impala,另外添加hdfs,hive,yarn,zookeeper,mapred。
2. 无法链接impala daemon(Could not connect to duan140:21000)
查看/var/log/impalad/impalad.INFO:
Couldn't open transport for duan139:24000 (SASL(-4): no mechanism available: No worthy mechs found)
检查impala 运行状态:
该 Catalog Server 当前未连接至其 StateStore。
该 Impala Daemon 当前未连接至其 StateStore
日志:SASL message (Kerberos (internal)): No worthy mechs found
yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi
参考:https://www.cnblogs.com/xxoome/p/7423822.html