CDH-5.2.0-1.cdh5.2.0安裝成功,已經運行了幾個月了。如今把確實的認證安裝配置上。下面是詳細的安裝配置過程,已通過程中遇到的問題解決辦法。html
1. 背景java
在Hadoop1.0.0或 者CDH3 版本以前, hadoop並不存在安全認證一說。默認集羣內全部的節點都是可靠的,值得信賴的。用戶與HDFS或者M/R進行交互時並不須要進行驗證。致使存在惡意用 戶假裝成真正的用戶或者服務器入侵到hadoop集羣上,惡意的提交做業,修改JobTracker狀態,篡改HDFS上的數據,假裝成NameNode 或者TaskTracker接受任務等。 儘管在版本0.16之後, HDFS增長了文件和目錄的權限,可是並無強認證的保障,這些權限只能對偶然的數據丟失起保護做用。惡意的用戶能夠輕易的假裝成其餘用戶來篡改權限,致 使權限設置形同虛設。不可以對Hadoop集羣起到安全保障。shell
在Hadoop1.0.0或 者CDH3版本後,加入了Kerberos認證機制。使得集羣中的節點就是它們所宣稱的,是信賴的。Kerberos能夠將認證的密鑰在集羣部署時事先放 到可靠的節點上。集羣運行時,集羣內的節點使用密鑰獲得認證。只有被認證過節點才能正常使用。企圖冒充的節點因爲沒有事先獲得的密鑰信息,沒法與集羣內部 的節點通訊。防止了惡意的使用或篡改Hadoop集羣的問題,確保了Hadoop集羣的可靠安全。數據庫
2. 安裝過程(須要以下8個步驟)vim
Configuring a Kerberos 5 Server數組
When setting up Kerberos, install the KDC first. If it is necessary to set up slave servers, install the master first.緩存
To configure the first Kerberos KDC, follow these steps:安全
1.確保正常時間同步和 DNS配置Kerberos以前全部的客戶機和服務器。特別注意Kerberos服務器和客戶之間的時間同步。若是服務器和客戶端之間的時間差大於5分鐘 (這是可配置Kerberos 5),Kerberos客戶端不能到服務器進行身份驗證。這個時間同步是必要的,以防止攻擊者使用一個古老的Kerberos票據冒充合法用戶。服務器
建議創建一個網絡時間協議 (NTP)兼容的客戶端/服務器網絡即便Kerberos是沒有被使用。Red Hat Enterprise Linux包括國家結核控制規劃方案。指/usr/share/doc/ntp——<版本號> /索引。html(<版本號>是國家結核控制規劃的版本號包安裝在您的系統)的細節如何設置網絡時間協議服務器,和http: //www.ntp.org有關國家結核控制規劃的更多信息。網絡
2. 安裝krb5-libs,krb5-server和krb5-workstation包在專用的機器上運行KDC。這臺機器須要很安全——若是可能的話,它不該該運行KDC之外的任何服務。
3. 編輯/etc/krb5.conf和/var/kerberos/krb5kdc/kdc.conf配置文件反映了域名和domain-to-realm 映射。一個簡單的域能夠被取代的實例構造的例子。COM和example.com使用正確的域名,必定保持大寫和小寫名稱正確的格式,經過改變從 kerberos.example.com KDC Kerberos服務器的名稱。按照慣例,全部領域名稱大寫和DNS主機名和域名是小寫的。關於這些配置文件格式的完整細節,請參考各自的手冊頁。
4. Create the database using the kdb5_util utility from a shell prompt:
/usr/kerberos/sbin/kdb5_util create -s
建立命令建立數據庫存儲Kerberos領域的鑰匙。-s強制建立一個隱藏文件的主服務器密鑰存儲。若是沒有存在隱藏文件的閱讀的關鍵,Kerberos服務器(krb5kdc)提示用戶的主服務器密碼(可用於再生的關鍵)每次開始。
5. 編輯 /var/kerberos/krb5kdc/kadm5.acl文件,這個文件是用於kadmind使用這個文件來肯定哪一個最重要的管理者得到Kerberos數據庫的訪問級別。大多數組織能夠靠一行:
*/admin@EXAMPLE.COM *
大多數用戶表示在數據庫由一個主體(NULL或空的,實例,如joe@EXAMPLE.COM)。在這個配置中,用戶與第二個主要管理的實例(例如,喬/ admin@EXAMPLE.COM)可以使用全功率領域的Kerberos數據庫。
kadmind服務器上已經開始後,任何用戶均可以訪問它的服務的任何客戶機或服務器上運行的kadmin領域。然而,只有用戶kadm5中列出。acl文件能夠以任何方式修改數據庫,除了更改本身的密碼。
請注意
kadmin實用與 kadmind服務器經過網絡、通訊和使用Kerberos來處理身份驗證。所以,首先校長必須已經存在的鏈接到服務器以前經過網絡來管理它。建立第一個 和kadmin本金。本地命令,它是專門設計用於在同一個主機上KDC和不使用Kerberos身份驗證。
如下的kadmin類型。本地命令建立第一個主KDC終端:
/usr/kerberos/sbin/kadmin.local -q "addprinc username/admin"
6.Start Kerberos using the following commands:
/sbin/service krb5kdc start
/sbin/service kadmin start
/sbin/service krb524 start
7. 爲用戶添加主體使用addprinc命令。在kadmin.kadmin和kaadmin.local KDC的命令行接口。所以,許多命令——例如addprinc——發射後可用kadmin程序。指kadmin手冊頁得到更多信息。
8. 確認KDC發行彩票。首先,運行kinit得到一張票並將其存儲在一個憑證高速緩存文件。接下來,使用列表中查看憑證在緩存中,並使用kdestroy破壞緩存和它所包含的憑證。
請注意
默認狀況下,kinit試圖使用相同的系統登陸驗證用戶名(不是Kerberos服務器)。若是用戶名不對應於主要在Kerberos數據庫 中,kinit問題一條錯誤消息。若是出現這種狀況,kinit提供正確的名稱主要做爲參數的命令行(kinit <主要>)。
1. 安裝Kerberos。
3.2. Installing Kerberos
Kerberos packages may be installed by default, but make sure that the appropriate packages are installed for the Kerberos server or client being configured.
To install packages for a Kerberos server:
# yum install krb5-server krb5-libs krb5-auth-dialog
To install packages for a Kerberos client:
# yum install krb5-workstation krb5-libs krb5-auth-dialog
If the Red Hat Enterprise Linux system will use Kerberos as part of single sign-on with smart cards, then also install the required PKI/OpenSSL package:
# yum install krb5-pkinit-openssl
//下載jce替換 ocal_policy.jar and US_export_policy.jar files on each host by extracting the contents of the downloaded package into the $JAVA_HOME/jre/lib/security/ directory.
http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html //下載完畢後,解壓獲得的以下.jar拷貝到java_home/jre/lib/security/文件目錄下:
[root@master ~]# ll
總用量 16
-rw-rw-r-- 1 root root 3035 12月 21 2013 local_policy.jar
-rw-r--r-- 1 root root 7323 12月 21 2013 README.txt
-rw-rw-r-- 1 root root 3023 12月 21 2013 US_export_policy.jar
[root@master ~]#
[root@master ~]# cp /root/UnlimitedJCEPolicyJDK8/*.jar /usr/java/default/jre/lib/security/
[root@slave1 ~]# yum install krb5-server krb5-libs krb5-auth-dialog //安裝server端 因爲master服務器上放的服務比較多,如今把其中一個slave做爲一個kerberos服務器。
//服務器端安裝完畢後,在客戶端安裝以下對應的客戶端。
[root@slave2 ~]# yum install krb5-workstation krb5-libs krb5-auth-dialog
[root@master ~]# yum install krb5-workstation krb5-libs krb5-auth-dialog
//修改/etc/krb5.conf
vim /etc/krb5.conf
[root@master ~]# cat /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 = master
dns_lookup_kdc = false
dns_lookup_realm = false
clockskew = 120
ticket_lifetime = 86400
renew_lifetime = 604800
forwardable = true
renewable = true
#default_tgs_enctypes = rc4-hmac
#default_tkt_enctypes = rc4-hmac
#permitted_enctypes = rc4-hmac
#udp_preference_limit = 1
[realms]
master = {
kdc = 192.168.8.94:88
admin_server = 192.168.8.94:749
}
[domain_realm]
[kdc]
profile=/var/kerberos/krb5kdc/kdc.conf
修改完畢後,拷貝到機器其餘機器上。
//修改/var/kerberos/krb5kdc/kdc.conf
vim /var/kerberos/krb5kdc/kdc.conf
[root@master ~]# cat /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
master = {
master_key_type = aes256-cts
max_life = 25h
max_renewable_life = 4w
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
max_life = 24h
max_renewable_life = 10d
#default_principal_flags = +renewable, +forwardable
}
//修改/etc/
[root@master ~]# vim /var/kerberos/krb5kdc/kadm5.acl
*/admin@master *
以上三個文件配置完畢後,只需拷貝krb5.conf到集羣中其餘機器上便可。
[root@master ~]# scp /etc/krb5.conf slave1:/etc/
krb5.conf 100% 422 0.4KB/s 00:00
[root@master ~]# scp /etc/krb5.conf slave2:/etc/
krb5.conf 100% 422 0.4KB/s 00:00
[root@master ~]#
//啓動kdc服務器
/sbin/service krb5kdc start
/sbin/service kadmin start
//建立kerberos數據庫 密碼輸入的是:123456
[root@master ~]# /usr/sbin/kdb5_util create -r master -s
[root@master ~]# kadmin.local //建立遠程管理的管理員帳戶
[root@master ~]# kadmin.local
Authenticating as principal test/admin@master with password.
kadmin.local: listprincs //列出全部用戶listprincs
K/M@master
hdfs/slave1@master
kadmin/admin@master
kadmin/changepw@master
kadmin/master@master
krbtgt/master@master
test@master
kadmin.local: addprinc hadoop/admin@master //建立測試用戶hadoop
WARNING: no policy specified for wwn@master; defaulting to no policy
Enter password for principal "hadoop@master":
Re-enter password for principal "hadoop@master":
Principal "hadoop@master" created.
kadmin.local: listprincs //查看,最後一個wwn@master用戶建立成功。
K/M@master
hdfs/slave1@master
kadmin/admin@master
kadmin/changepw@master
kadmin/master@master
krbtgt/master@master
test@master
hadoop/admin@master
[root@master ~]# kinit hadoop //測試:使用以前建立的wwn用戶,輸入密碼後,沒有報錯便可。
Password for wwn@master:
[root@master ~]# klist -e //查看緩存的票據認購:能夠看到,已經以hadoop@master登錄成功。
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hadoop@master
Valid starting Expires Service principal
12/26/14 08:24:48 12/27/14 08:24:48 krbtgt/master@master
renew until 12/26/14 08:24:52, Etype (skey, tkt): arcfour-hmac, arcfour-hmac
[root@master krb5kdc]# kinit hadoop
kinit: Client not found in Kerberos database while getting initial credentials
[root@master krb5kdc]# kinit hadoop/admin@master
Password for hadoop/admin@master:
[root@master krb5kdc]# klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hadoop/admin@master
Valid starting Expires Service principal
01/05/15 11:16:56 01/06/15 11:16:56 krbtgt/master@master
renew until 01/05/15 11:17:00, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96
4、配置KDC
1.建立票據帳號
[root@master ~]# kadmin.local
addprinc -randkey hdfs/master@master
addprinc -randkey hdfs/slave1@master
addprinc -randkey hdfs/slave2@master
addprinc -randkey mapred/master@master
addprinc -randkey mapred/slave1@master
addprinc -randkey mapred/slave2@master
addprinc -randkey host/master@master
addprinc -randkey host/slave1@master
addprinc -randkey host/slave2@master
2.建立keytab 文件,該文件是包括票據帳號+票據帳號密碼加密的密鑰
[root@master ~]# kadmin.local
xst -norandkey -k hdfs.keytab hdfs/master host/master
xst -norandkey -k hdfs.keytab hdfs/slave1 host/slave1
xst -norandkey -k hdfs.keytab hdfs/slave2 host/slave2
xst -norandkey -k mapred.keytab mapred/master host/master
xst -norandkey -k mapred.keytab mapred/slave1 host/slave1
xst -norandkey -k mapred.keytab mapred/slave2 host/slave2
3.驗證
[root@master ~]# kinit -k -t /root/hdfs.keytab hdfs/master@master
沒報錯便可。
4. 將hdfs.keytab 和mapred.keytab 拷貝到集羣的/usr/lib/hadoop-0.20/conf/
[root@master ~]# cp hdfs.keytab /etc/hadoop/conf/
[root@master ~]# cp mapred.keytab /etc/hadoop/conf/
[root@master conf]# chown hdfs:hadoop hdfs.keytab
[root@master conf]# chown mapred:hadoop mapred.keytab
[root@master conf]# chmod 400 ./*.keytab
5、配置hadoop (手動配置比較複雜,須要修改以下文件。)
中止hadoop 集羣
vim /etc/hadoop/conf/core-site.xml //修改simple爲:kerberos,把第二項的false更改成true
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
[root@master conf]# vim /etc/hadoop/conf/hdfs-site.xml
最後配置完成後查看生成的用戶爲:
[root@master ~]# kadmin.local
Authenticating as principal root/admin@master with password.
kadmin.local: listprincs
HTTP/master@master
HTTP/slave1@master
HTTP/slave2@master
K/M@master
hadoop/admin@master
hbase/master@master
hbase/slave1@master
hbase/slave2@master
hdfs/master@master
hdfs/slave1@master
hdfs/slave2@master
hive/master@master
host/master@master
host/slave1@master
host/slave2@master
httpfs/master@master
hue/master@master
impala/master@master
impala/slave1@master
impala/slave2@master
kadmin/admin@master
kadmin/changepw@master
kadmin/master@master
krbtgt/master@master
mapred/master@master
mapred/slave1@master
mapred/slave2@master
oozie/master@master
solr/master@master
solr/slave1@master
solr/slave2@master
spark/master@master
test@master
yarn/master@master
yarn/slave1@master
yarn/slave2@master
zookeeper/master@master
zookeeper/slave1@master
zookeeper/slave2@master
CDH配置步驟比較簡單:須要以下8個步驟:分別截圖以下:
整個過程完畢。