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