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启动失败

Could not read the root directory at hdfs://duan139:8020. Error was: 
User impala/duan140@HADOOP.COM (auth:KERBEROS) is not authorized for protocol interface org.apache.hadoop.hdfs.protocol.ClientProtocol: denied by configured ACL

  

在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
posted @ 2018-11-04 18:49  duaner92  阅读(1792)  评论(0编辑  收藏  举报