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
转载于:https://www.cnblogs.com/duaner92/p/9905197.html
 
