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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM