hadoop安全目錄: kerberos(已發佈) elasticsearch(已發佈)http://blog.51cto.com/chenhao6/2113873 knox oozie ranger apache sentry 簡介: 從運維青銅到運維白銀再到運維黃金,這裡就要牽扯到方向問題也就是 ...
hadoop安全目錄:
-
kerberos(已發佈)
-
elasticsearch(已發佈)http://blog.51cto.com/chenhao6/2113873
-
knox
-
oozie
-
ranger
-
apache sentry
簡介:
從運維青銅到運維白銀再到運維黃金,這裡就要牽扯到方向問題也就是裝備,根據自己的愛好,每個人都應該選擇一個適合自己和喜歡自己的一個職業技術方向,如:大數據安全,開發運維,雲計算運維等等。而掌握的越多前言技術也就是更多的裝備,才能更好的在it行業混下去,畢竟it技術更新太快,初級篇和中級篇前面已介紹。
如果你想瞭解大數據的學習路線,想學習大數據知識以及需要免費的學習資料可以加群:784789432.歡迎你的加入。
現在給大家介紹大數據安全的正式面目:
1.大數據基本組件
2. Hadoop安全背景
共用集群
按照業務或應用的規則劃分資源隊列,並分配給
特定用戶
HDFS上存放各種數據,包括公共的、機密的
安全認證:確保某個用戶是自己聲稱的那個用戶
安全授權:確保某個用戶只能做他允許的那些操作
如果你想瞭解大數據的學習路線,想學習大數據知識以及需要免費的學習資料可以加群:784789432.歡迎你的加入。
3. 設備說明
服務 |
IP |
主機名 |
系統 |
Ambari Kerberos |
192.168.2.140 |
hdp140 |
CentOS 7.3 |
namenode |
192.168.2.141 |
hdp141 |
CentOS 7.3 |
datanode |
192.168.2.142 |
hdp142 |
CentOS 7.3 |
datanode |
192.168.2.143 |
hdp143 |
CentOS 7.3 |
4. kerberos基本概念:
Principal(安全個體):被認證的個體,有一個名字和口令
KDC(key distribution center ) : 是一個網路服務,提供ticket 和臨時會話密鑰
Ticket:一個票據,客戶用它來向伺服器證明自己的身份,包括客戶標識、會話密鑰、時間戳。
AS (Authentication Server): 認證伺服器
TGS(Ticket Granting Server): 許可證伺服器
TGT:Ticket-granting Ticket
5. kerberos認證過程:
6. 集群啟用Kerberos認證
裝KDC Server
1. 安裝一個新的KDC Server(任意一個集群主機,這裡hdp141為例)
1 |
# yum install krb5-server krb5-libs krb5-workstation
|
2. 打開KDC Server的配置文件
# vi /etc/krb5.conf
修改文件中的[realms]部分,將為屬性kdc和admin_server設置的預設值“kerberos.example.com”替換成實際KDC server的主機名。在下麵的例子中,“kerberos.example.com”被替換成了 “my.kdc.server”。
1 2 3 4 5 |
[realms]
EXAMPLE.COM = {
kdc = my.kdc.server
admin_server = my.kdc.server
}
|
3. (可選)自定義realms配置(EXAMPLE.COM修改為CESHI.COM,下麵例子都為CESHI.COM)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# vi /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 = CESHI.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
CESHI.COM = {
kdc = hdp141
admin_server = hdp141
}
[domain_realm]
.vrv.com = CESHI.COM
vrv.com = CESHI.COM
# vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
CESHI.COM = {
#master_key_type = aes256-cts
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 camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}
|
4.創建Kerberos資料庫
創建過程中需要輸入master key。
1 2 3 4 5 6 7 8 |
# kdb5_util create -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'CESHI.COM' ,
master key name 'K/[email protected]'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: ceshi123456.
Re - enter KDC database master key to verify: ceshi123456.
|
5.啟動KDC
1 2 3 4 |
# service krb5kdc start
# chkconfig krb5kdc on
# service kadmin start
# chkconfig kadmin on
|
6.創建kerberos Admin
通過創建一個admin principal創建KDC admin,需要輸入principal的密碼。
1 2 3 4 5 6 7 |
# kadmin.local -q "addprinc admin/admin"
Authenticating as principal root /admin @CESHI.COM.COM with password.
WARNING: no policy specified for admin /admin @CESHI.COM.COM; defaulting to no policy
Enter password for principal "admin/[email protected]" : ceshi123456.
Re-enter password for principal "admin/[email protected]" : ceshi123456.
Principal "admin/[email protected]" created.
"admin/[email protected]" :ceshi123456.
|
打開KDC ACL文件,確認admin principal在KDC ACL中擁有許可權,若沒有對應的域則需要添加。
1 2 |
# vi /var/kerberos/krb5kdc/kadm5.acl
* /admin @VRV.COM *
|
如果修改了文件kadm5.acl,那麼你就必須重啟kadmin進程
1 |
# service kadmin restart
|
7.啟用Kerberos保護
安裝JCE
必須用官網下載的JCE覆蓋本地已有的JCE,否則將缺少供Kerberos使用的加密方式
在Ambari server所在的主機和集群中的所有主機上,根據使用的JDK版本選擇合適的JCE策略文件。
• Oracle JDK 1.7:
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-
download-432124.html
• Oracle JDK 1.8:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-
download-2133166.html
在Ambari Server所在主機和集群中的所有主機上,添加unlimited security policy JCE jars
到目錄$AMBARI_SERVER_JAVA_HOME/jre/lib/security/下。
註意:在所有的主機上,JCE相關的包都必須解壓到配置文件/etc/ambari-server/conf/ambari.properties中屬性java.home所指定的JDK目錄下
1 2 |
# JAVA_HOME=/usr/java/default
# unzip -o -j -q UnlimitedJCEPolicyJDK8.zip -d $JAVA_HOME/jre/lib/security/
|
重啟Ambari Server(ambari server伺服器hdp140)
1 |
# service ambari-server restart
|
8.運行Kerberos保護嚮導
1. 確認KDC已經安全和正確配置,並且已經在集群的所有主機上配置好JCE。
2. 登錄Ambari Web,打開管理員 > Kerberos
3.點擊啟用Kerberos,啟用安裝嚮導,選擇條件檢查
4.提供關於KDC和管理員賬號的信息
KDC相關信息請參考配置文件/etc/krb5.conf
5.ambari會在集群的主機上安裝Kerberos客戶端,然後通過測試是否能創建principal,生成keytab和分配Keytab來測試是否能連接KDC。
自定義Hadoop使用的Kerberos identities
6.確認你的配置。你可以通過頁面下載自動創建的包含principals和Keytabs的CSV文件。
7.停止服務
8.啟用kerberos
Keytabs保存在主機的/etc/security/keytabs目錄下。
9.啟動和測試服務
啟動和測試服務成功後點擊完成以結束Kerberos的啟用。
10.查看已啟用的Kerberos配置
到這裡kerberos安裝完成。
高級選項:
為Ambari Server設置Kerberos(可選項)
1. 使用kadmin在你的KDC所在的主機(hdp141)為Ambari Server創建一個principal。(ambari-server為自定義名)
1 |
# kadmin.local -q "addprinc -randkey [email protected]
|
2. 為此principal生成一個Keytab
1 |
# kadmin.local -q "xst -k ambari.server.keytab [email protected]"
|
3. 將單前目錄生成的Keytab拷貝到Ambari Server所在的集群。確定該文件有合適的許可權,能夠被啟動Ambari Server守護進程所訪問。
1 2 3 |
# scp ambari.server.keytab hdp140:/etc/security/keytabs/
# ll /etc/security/keytabs/ambari.server.keytab
-r--r----- 1 root root 530 Dec 18 20:06 /etc/security/keytabs/ambari .server.keytab
|
4. 停止ambari server
1 |
# ambari-server stop
|
5. 運行setup-security命令,設置JAAS。標紅部分為需要設置部分。
A. 選擇3,Setup Ambari kerberos JAAS configuration
B. 輸入第一步為Ambari Server設置的principal名
C. 輸入Ambari principal的Keytab所在路徑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# ambari-server setup-security
Using python /usr/bin/python2
Security setup options...
===========================================================================
Choose one of the following options:
[1] Enable HTTPS for Ambari server.
[2] Encrypt passwords stored in ambari.properties file .
[3] Setup Ambari kerberos JAAS configuration.
[4] Setup truststore.
[5] Import certificate to truststore.
===========================================================================
Enter choice, (1-5): 3
Setting up Ambari kerberos JAAS configuration to access secured Hadoop daemons...
Enter ambari server's kerberos principal name ([email protected]): [email protected]
Enter keytab path for ambari server's kerberos principal: /etc/security/keytabs/ambari .server.keytab
Ambari Server 'setup-security' completed successfully.
重啟Ambari Server
# ambari-server restart
|
開始實測:
1.新建測試用戶
普通用戶需要安裝ranger(後面介紹)管理許可權。
列出所有用戶
1 2 3 4 5 6 7 |
# kadmin.local #在kdc伺服器上執行
kadmin. local : listprincs #//列出所有用戶
[email protected]
.................
nn /hdp140 @CESHI.COM
zookeeper /hdp142 @CESHI.COM
zookeeper /hdp143 @CESHI.COM
|
創建測試用戶
1 2 3 4 |
kadmin. local : addprinc test
Enter password for principal "[email protected]" : ceshi123456.
Re-enter password for principal "[email protected]" : ceshi123456.
Principal "[email protected]" created.
|
登錄驗證
# kinit test #登陸
ceshi123456.
退出登陸狀態
1 |
註銷:kdestroy
|
集群登錄與授權(hdfs用戶)
未使用kerberos用戶認證前執行
1 |
# hadoop dfs -ls /
|
使用kerberos用戶認證
1 2 3 |
# kinit test #登陸
Password for test @CESHI.com #ceshi123456.
# hadoop dfs -ls /
|
此時test用戶預設有查看許可權,無目錄授權
換到hdfs用戶下,初始化hdfs
查看hdfs的Kerberos用戶名
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# klist -k /etc/security/keytabs/hdfs.headless.keytab
Keytab name: FILE:hdfs.headless.keytab
KVNO Principal
---- --------------------------------------------------------------------------
1 hdfs- test @CESHI.COM
1 hdfs- test @CESHI.COM
1 hdfs- test @CESHI.COM
1 hdfs- test @CESHI.COM
1 hdfs- test @CESHI.COM
初始化認證hdfs用戶
# kinit -k [email protected] -t /etc/security/keytabs/hdfs.headless.keytab
創建目錄:hadoop fs - mkdir /test
查看目錄屬性:
|
改變目錄屬性:hadoop fs -chown test:hdfs /test
使用test用戶登錄
修改密碼和重新生成
1 2 3 4 5 6 7 8 |
#修改密碼命令cpw test(KDC server上執行)
# kadmin.local
Authenticating as principal test /admin @CESHI.COM with password.
kadmin. local : cpw test
Enter password for principal "[email protected]" : ceshi123
Re-enter password for principal "[email protected]" : ceshi123
change_password: Principal does not exist while changing password for "[email protected]" .
kadmin. local : exit
|
生成新的多用戶使用keytab文件
創建keytab文件(生成到當前文件夾下)
案例:將hive和hdfs的keytab集成到同一個keytab文件中
1. 查看所有princs
1 2 3 4 5 |
# kadmin.local
Kadmin. local : listprincs
hbase /hdp143 @CESHI.COM"
[email protected]"
hive /hdp140 @CESHI.COM"
|
2. 添加hdfs的princs的keytab到hdfs-hive.keytab
1 2 |
# kadmin.local
Kadmin. local : xst -norandkey -k hdfs-hive.keytab [email protected]
|
3. 添加hive的princs的keytab到hdfs-hive.keytab
1 2 |
# kadmin.local
Kadmin. local : xst -norandkey -k hdfs-hive.keytab hive /hdp140 @CESHI.COM
|
查看生成的hdfs-hive.keytab
使用生成的Keytab文件登錄
1 |
# kinit -k -t hdfs-hive.keytab hive/[email protected]
|
修改租期
1.修改全局租期
1 2 3 4 5 6 7 8 9 10 |
# vi /etc/krb5.conf
[libdefaults]
default_realm = CESHI.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
#ticket 租期時間
renew_lifetime = 7d
#重新申請時間
frwardable = true
|
#重新啟動
1 2 |
# service krb5kdc restart
# service kadmin restart
|
2.手動修改用戶租期時間
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#查看租期時間
可在kadmin命令行下用getprinc命令查看預設的最大時長,否則時長被限制在24小時,並且無法renew)
# kadmin.local
kadmin. local :getprinc hive /hdp141
Principal: hive /hdp141 @CESHI
Expiration date : [never]
Last password change: Mon Dec 18 05:56:57 EST 2017
Password expiration date : [none]
Maximum ticket life: 1 day 00:00:00 #租期時間
Maximum renewable life: 0 days 00:00:00 #重新續租時間
Last modified: Mon Dec 18 05:56:57 EST 2017 (admin /admin @VRV.COM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 8
Key: vno 1, aes256-cts-hmac-sha1-96
Key: vno 1, aes128-cts-hmac-sha1-96
Key: vno 1, des3-cbc-sha1
Key: vno 1, arcfour-hmac
Key: vno 1, camellia256-cts-cmac
Key: vno 1, camellia128-cts-cmac
Key: vno 1, des-hmac-sha1
Key: vno 1, des-cbc-md5
#更改租期時間命令(用戶使用真實用戶替換)
modprinc -maxrenewlife 300days 用戶
modprinc -maxlife 300days 用戶
|
#應用例子
1 |
modprinc -maxrenewlife 300days hive /hdp141 @CESHI.com
|
1 |
modprinc -maxlife 300days hive /hdp141 @CESHI.COM
|
退出後,重新啟動
1 2 |
# service krb5kdc restart
# service kadmin restart
|
3.使用spark任務測試kerberos下的作業提交
1.指定spark用戶和密碼
1 2 3 4 5 6 7 8 9 10 11 |
# cd /etc/security/keytabs
[root@hdp140 keytabs] # ll
-r--r----- 1 root root 353 Oct 30 23:54 ambari.server.keytab
-r--r----- 1 hbase hadoop 313 Oct 30 23:54 hbase.headless.keytab
-r-------- 1 hbase hadoop 313 Oct 30 23:54 hbase.service.keytab
-r-------- 1 hdfs hadoop 308 Oct 30 23:54 hdfs.headless.keytab
-r--r----- 1 hive hadoop 308 Oct 30 23:54 hive.service.keytab
-r-------- 1 hdfs hadoop 298 Oct 30 23:54 nn.service.keytab
-r--r----- 1 ambari-qa hadoop 333 Oct 30 23:54 smokeuser.headless.keytab
-r-------- 1 spark hadoop 313 Oct 30 23:54 spark.headless.keytab
-r--r----- 1 root hadoop 308 Oct 30 23:54 spnego.service.keytab
|