詳解linux運維工程師高級篇(大數據安全方向)html
簡介:java
從運維青銅到運維白銀再到運維黃金,這裏就要牽扯到方向問題也就是裝備,根據本身的愛好,每一個人都應該選擇一個適合本身和喜歡本身的一個職業技術方向,如:大數據安全,開發運維,雲計算運維等等。而掌握的越多前言技術也就是更多的裝備,才能更好的在it行業混下去,畢竟it技術更新太快,初級篇和中級篇前面已介紹。node
初級篇:詳解Linux運維工程師入門必備技能(青銅)python
中級篇:詳解Linux運維工程師打怪升級篇(白銀)linux
如今給你們介紹大數據安全的正式面目:sql
1.大數據基本組件數據庫
2. Hadoop安全背景apache
共享集羣安全
按照業務或應用的規則劃分資源隊列,並分配給bash
特定用戶
HDFS上存放各類數據,包括公共的、機密的
安全認證:確保某個用戶是本身聲稱的那個用戶
安全受權:確保某個用戶只能作他容許的那些操做
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爲例)
# 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」。
[realms] EXAMPLE.COM = { kdc = my.kdc.server admin_server = my.kdc.server }
3. (可選)自定義realms配置(EXAMPLE.COM修改成CESHI.COM,下面例子都爲CESHI.COM)
# 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。
# kdb5_util create -s Loading random data Initializing database '/var/kerberos/krb5kdc/principal' for realm 'CESHI.COM', master key name 'K/M@CESHI.COM' 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
# service krb5kdc start # chkconfig krb5kdc on # service kadmin start # chkconfig kadmin on
6.建立kerberos Admin
經過建立一個admin principal建立KDC admin,須要輸入principal的密碼。
# 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/admin@CESHI.COM.COM": ceshi123456. Re-enter password for principal "admin/admin@CESHI.COM.COM": ceshi123456. Principal "admin/admin@CESHI.COM" created. "admin/admin@CESHI.COM":ceshi123456.
打開KDC ACL文件,確認admin principal在KDC ACL中擁有權限,若沒有對應的域則須要添加。
# vi /var/kerberos/krb5kdc/kadm5.acl */admin@VRV.COM *
若是修改了文件kadm5.acl,那麼你就必須重啓kadmin進程
# 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目錄下
# JAVA_HOME=/usr/java/default # unzip -o -j -q UnlimitedJCEPolicyJDK8.zip -d $JAVA_HOME/jre/lib/security/
重啓Ambari Server(ambari server服務器hdp140)
# 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爲自定義名)
# kadmin.local -q "addprinc -randkey ambari-server@CESHI.COM
2. 爲此principal生成一個Keytab
# kadmin.local -q "xst -k ambari.server.keytab ambari-server@CESHI.COM"
3. 將單前目錄生成的Keytab拷貝到Ambari Server所在的集羣。肯定該文件有合適的權限,可以被啓動Ambari Server守護進程所訪問。
# 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
# ambari-server stop
5. 運行setup-security命令,設置JAAS。標紅部分爲須要設置部分。
A. 選擇3,Setup Ambari kerberos JAAS configuration
B. 輸入第一步爲Ambari Server設置的principal名
C. 輸入Ambari principal的Keytab所在路徑
# 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 (ambari@VRV.COM): ambari-server@VRV.COM 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(後面介紹)管理權限。
列出全部用戶
# kadmin.local #在kdc服務器上執行 kadmin.local: listprincs #//列出全部用戶 ambari-server@CESHI.COM ................. nn/hdp140@CESHI.COM zookeeper/hdp142@CESHI.COM zookeeper/hdp143@CESHI.COM
建立測試用戶
kadmin.local: addprinc test Enter password for principal "test@CESHI.COM": ceshi123456. Re-enter password for principal "test@CESHI.COM": ceshi123456. Principal "test@CESHI.COM" created.
登陸驗證
# kinit test #登錄
ceshi123456.
退出登錄狀態
註銷:kdestroy
集羣登陸與受權(hdfs用戶)
未使用kerberos用戶認證前執行
# hadoop dfs -ls /
使用kerberos用戶認證
# kinit test #登錄 Password for test@CESHI.com #ceshi123456. # hadoop dfs -ls /
此時test用戶默認有查看權限,無目錄受權
換到hdfs用戶下,初始化hdfs
查看hdfs的Kerberos用戶名
# 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 hdfs-test@CESHI.COM -t /etc/security/keytabs/hdfs.headless.keytab 建立目錄:hadoop fs -mkdir /test 查看目錄屬性:
改變目錄屬性:hadoop fs -chown test:hdfs /test
使用test用戶登陸
修改密碼和從新生成
#修改密碼命令cpw test(KDC server上執行) # kadmin.local Authenticating as principal test/admin@CESHI.COM with password. kadmin.local: cpw test Enter password for principal "test1@CESHI.COM": ceshi123 Re-enter password for principal "test1@CESHI.COM": ceshi123 change_password: Principal does not exist while changing password for "test@CESHI.COM". kadmin.local: exit
生成新的多用戶使用keytab文件
建立keytab文件(生成到當前文件夾下)
案例:將hive和hdfs的keytab集成到同一個keytab文件中
1. 查看全部princs
# kadmin.local Kadmin.local: listprincs hbase/hdp143@CESHI.COM" hdfs-vrvtest@CESHI.COM" hive/hdp140@CESHI.COM"
2. 添加hdfs的princs的keytab到hdfs-hive.keytab
# kadmin.local Kadmin.local: xst -norandkey -k hdfs-hive.keytab hdfs-vrvtest@CESHI.COM
3. 添加hive的princs的keytab到hdfs-hive.keytab
# kadmin.local Kadmin.local: xst -norandkey -k hdfs-hive.keytab hive/hdp140@CESHI.COM
查看生成的hdfs-hive.keytab
使用生成的Keytab文件登陸
# kinit -k -t hdfs-hive.keytab hive/hdp140@CESHI.COM
修改租期
1.修改全局租期
# 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
#從新啓動
# service krb5kdc restart # service kadmin restart
2.手動修改用戶租期時間
#查看租期時間 可在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 用戶
#應用例子
modprinc -maxrenewlife 300days hive/hdp141@CESHI.com
modprinc -maxlife 300days hive/hdp141@CESHI.COM
退出後,從新啓動
# service krb5kdc restart # service kadmin restart
3.使用spark任務測試kerberos下的做業提交
1.指定spark用戶和密碼
# 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
# klist -k spark.headless.keytab Keytab name: FILE:spark.headless.keytab KVNO Principal ---- -------------------------------------------------------------------------- 1 spark-test@CESHI.COM 1 spark-test@CESHI.COM 1 spark-test@CESHI.COM 1 spark-test@CESHI.COM 1 spark-test@CESHI.COM # kinit -k spark-vrvtest@VRV.COM -t spark.headless.keytab #指定spark用戶 [root@hdp140 keytabs]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: spark-vrvtest@VRV.COM Valid starting Expires Service principal 10/31/2017 01:08:56 11/01/2017 01:08:56 krbtgt/VRV.COM@VRV.COM
上傳spark文件到opt
# hdfs dfs -mkdir -p /tmp/sparkwordcount/ # hdfs dfs -mkdir -p /tmp/sparkwordcount/input # hdfs dfs -put /opt/sparkwordcountinput.txt /tmp/sparkwordcount/input # hdfs dfs -put /opt/spark_word_count.jar /tmp/sparkwordcount/
#spark測試文件
sparkwordcountinput.txt spark_word_count.jar
spark命令提交任務
# spark-submit \ --class com.vrv.bigdata.ml.DataExtract2 \ --master yarn \ --deploy-mode cluster \ --principal spark-test@CESHI.COM \ --keytab /etc/security/keytabs/spark.headless.keytab \ hdfs://hdp140:8020/tmp/sparkwordcount/spark_word_count.jar \ hdfs://hdp140:8020/tmp/sparkwordcount/input \ hdfs://hdp140:8020/tmp/sparkwordcount/output/spark_work_count 17/10/31 01:15:28 INFO Client: client token: Token { kind: YARN_CLIENT_TOKEN, service: } diagnostics: N/A ApplicationMaster host: 192.168.2.143 ApplicationMaster RPC port: 0 queue: default start time: 1509383715631 final status: SUCCEEDED tracking URL: http://hdp141:8088/proxy/application_1509379053332_0014/ user: spark 17/10/31 01:15:28 INFO ShutdownHookManager: Shutdown hook called 17/10/31 01:15:28 INFO ShutdownHookManager: Deleting directory /tmp/spark-40e868df-ca58-4389-b20c-03d2717516cc
疑難問題1:
Received Exception while testing connectivity to the KDC: Algorithm AES256 not enabled **** Host: hdp261:88 (TCP) java.lang.IllegalArgumentException: Algorithm AES256 not enabled at sun.security.krb5.EncryptionKey.<init>(EncryptionKey.java:286) at javax.security.auth.kerberos.KeyImpl.<init>(KeyImpl.java
解決:
1. 在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
疑難問題2:
org.apache.hadoop.security.authentication.client.AuthenticationException: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
解決:
# kinit guest Password for guest@CESHI.COM: ceshi123456. # klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: guest@CESHI.COM Valid starting Expires Service principal 11/28/2017 18:30:48 11/29/2017 18:30:48 krbtgt/CESHI.COM@CESHI.COM 11/28/2017 18:31:09 11/29/2017 18:30:48 HTTP/hdp140@ 11/28/2017 18:31:09 11/29/2017 18:30:48 HTTP/hdp140@CESHI.COM
參考:
http://blog.csdn.net/wulantian/article/details/42418231
http://book.51cto.com/art/200907/140533.htm
實戰到此結束。
總結:
1. Hadoop集羣節點數多,配置和維護一個使用kerberos系統高性能,穩定的hadoop集羣難度很是高。
2. Hadoop中的hdfs是一個文件系統,用戶的認證和受權比較複雜,難度不低於linux系統的用戶和組管理。
加上kerberos後,用戶和用戶組的管理更加複雜,一般一個合適的用戶不能訪問hdfs上的文件。
3. Hadoop加上kerberos後,一般原來的用戶和文件,可能都失效致使數據流失。
後續專欄主題將持續更新
大數據安全運維實戰寶典
專題名稱 |
大數據安全運維實戰寶典 |
內容佔比 |
理論/實戰=1/9 |
|
做者介紹 |
陳浩,多年大數據平臺安全及運維實踐經驗,對大數據組件調優有着很深的看法。 51cto版主及51cto推薦博主 |
|||
適應人羣 |
1. 對於基礎運維轉大數據運維的同窗 2. 對大數據感興趣的同窗 3. 大數據研發工程師 |
|||
專欄介紹 |
大數據的熱度在持續的升溫,繼雲計算以後大數據成爲又一大衆所追捧的新星。數據的確是公司最最重要的核心資產。隨着業務的迅速發展,交易數據呈幾何級增長,隨之而來的是系統的不堪重負。業務部門、領導、甚至是集團老總成天嚷嚷的要報表、要分析、要提高競爭力。而研發部門能作的惟一事情就是執行一條一條複雜到本身都不可思議的SQL語句,緊接着系統開始罷工,內存溢出,宕機........簡直就是噩夢。OMG!please release me!!! 俗話說,工欲善其事,必先利其器。 本專欄內容從大數據運維角度出發,指導安裝大數據平臺,組件調優及默認配置修改去解決內存溢出,服務器宕機,kudu超時等業務沒法處理的問題。 專欄內容架構分爲: 總共分爲20篇文章,其中1篇理論介紹大數據平臺,12篇CDH實踐,7篇ambari實踐。 1. CDH基礎入門(1篇)+性能調優(4篇)+安全實戰(7篇) 2. Ambari基礎入門(1篇)+性能調優(1篇)+安全實戰(5篇) |
|||
學習收穫 |
1.理論上對知識點理解更加深刻,實戰案例讓咱們清楚知道這些知識點如何使用 3.大數據調優簡單易懂結合生產環境場景介紹 |
|||
專欄大綱 |
||||
序號 |
章節名稱 |
|||
1 |
大數據平臺是什麼?爲何要安裝大數據平臺? |
|||
CDH篇 |
||||
2 |
(入門)大數據平臺CDH基礎組件安裝和部署 |
|||
3 |
(性能壓測)數據倉庫之kudu性能測試及分析實戰 |
|||
4 |
(調優篇)Spark job failed because of out of memory.如何救急!!! |
|||
5 |
(調優篇)時常爆出 kudu-rpc 超時和 kudu 寫入延時及解決方法 |
|||
6 |
(調優篇)告別「Memorylimit exceeded」——Impala內存優化 |
|||
7 |
(安全篇)CDH構建大數據平臺-使用sentry進行權限把控! |
|||
8 |
(安全篇)CDH構建大數據平臺-集羣用戶的管理與視圖化權限分配 |
|||
9 |
(安全篇)CDH構建大數據平臺-高可用案例實操 (hdfs,hive,impala,sentry,hue,kudu,yarn,zookeeper) |
|||
10 |
(資源篇)使用Yarn按各bu線進行資源隊列劃分管理實戰 |
|||
11 |
(監控篇)impala實時監控,python腳本清除session和過時任務 |
|||
12 |
(監控篇)kudu演示如何傳遞impala-sql查詢出結果組裝成本身想要的告警信息,發送到釘釘(可用於日報,釘釘告警功能) |
|||
13 |
(實戰) StreamSets實現MySQL中變化數據實時寫入Kudu? |
|||
Ambari篇 |
||||
14 |
(入門篇)大數據平臺ambari平臺一鍵部署?So easy! |
|||
15 |
(性能壓測篇)Hadoop分佈式文件系統性能測試及分析 |
|||
16 |
(安全篇)大數據平臺安全利器kerberos? |
|||
17 |
(安全篇)ambari構建大數據平臺-如何開啓權限認證? |
|||
18 |
(安全篇)ambari構建大數據平臺-kerberos使用knos網關? |
|||
19 |
(安全篇)ambari構建大數據平臺-kerberos sso如何作單點登錄? |
|||
20 |
(資源篇)大數據集羣多用戶數據資源隔離管理實戰 |