當前位置:
首頁 > 最新 > 高手指路:Linux運維工程師的大數據安全修鍊手冊

高手指路:Linux運維工程師的大數據安全修鍊手冊

作者介紹

陳浩,北信源研發工程師,五年Linux運維工作經驗,熱衷運維技術研究、實踐和團隊分享。

從運維青銅到運維白銀再到運維黃金,這裡面牽扯到的方向問題也就是裝備,根據自己的愛好,每個人都應該選擇一個適合自己和喜歡自己的一個職業技術方向,如:大數據安全、開發運維、雲計算運維等。掌握越多前沿技術也就是掌握了更多的裝備,才能更好地在IT行業混下去,畢竟IT技術更新太快。

初級和中級篇詳見《從苦逼到牛逼,詳解Linux運維工程師的打怪升級之路》,今天給大家介紹大數據安全的正式面目。

Hadoop安全目錄:

Kerberos(已發布)

Elasticsearch

Knox

Oozie

Ranger

Apache Sentry

一、大數據基本組件

二、Hadoop安全背景

共享集群

按照業務或應用的規則劃分資源隊列,並分配給特定用戶

HDFS上存放各種數據,包括公共的、機密的

安全認證:確保某個用戶是自己聲稱的那個用戶

安全授權:確保某個用戶只能做他允許的那些操作

三、設備說明

四、Kerberos基本概念

Principal(安全個體):被認證的個體,有一個名字和口令

KDC(key distribution center ) : 是一個網路服務,提供ticket 和臨時會話密鑰

Ticket:一個票據,客戶用它來向伺服器證明自己的身份,包括客戶標識、會話密鑰、時間戳。

AS (Authentication Server): 認證伺服器

TGS(Ticket Granting Server): 許可證伺服器

TGT:Ticket-granting Ticket

五、Kerberos認證過程

六、集群啟用Kerberos認證

裝KDC Server

1、安裝一個新的KDC Server(任意一個集群主機,這裡hdp141為例)

# yum install krb5-server krb5-libs krb5-workstation

2、打開KDC Server的配置文件

# vi /etc/krb5.conf

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。

5、啟動KDC

# service krb5kdc start

# chkconfig krb5kdc on

# service kadmin start

# chkconfig kadmin on

6、創建kerberos Admin

通過創建一個admin principal創建KDC admin,需要輸入principal的密碼。

打開KDC ACL文件,確認admin principal在KDC ACL中擁有許可權,若沒有對應的域則需要添加。

如果修改了文件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為自定義名)

2. 為此principal生成一個Keytab

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(後面介紹)管理許可權。

列出所有用戶

創建測試用戶

登錄驗證

# kinit test #登陸

ceshi123456.

退出登陸狀態

註銷:kdestroy

集群登錄與授權(hdfs用戶)

未使用kerberos用戶認證前執行

# hadoop dfs -ls /

使用Kerberos用戶認證

此時test用戶默認有查看許可權,無目錄授權

換到HDFS用戶下,初始化HDFS

查看HDFS的Kerberos用戶名

改變目錄屬性:hadoop fs -chown test:hdfs /test

使用test用戶登錄

修改密碼和重新生成

生成新的多用戶使用keytab文件

創建keytab文件(生成到當前文件夾下)

案例:將Hive和HDFS的Keytab集成到同一個Keytab文件中

1. 查看所有Princs

2. 添加HDFS的Princs的Keytab到hdfs-hive.keytab

3. 添加Hive的Princs的Keytab到hdfs-hive.keytab

查看生成的hdfs-hive.keytab

使用生成的Keytab文件登錄

修改租期

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.手動修改用戶租期時間

#應用例子

退出後,重新啟動

# 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

上傳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:

解決:

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:

解決:

參考:

http://book.51cto.com/art/200907/140533.htm

實戰到此結束。後續再更新Elasticsearch安全實戰。

總結

Hadoop集群節點數多,配置和維護一個使用Kerberos系統高性能,穩定的Hadoop集群難度非常高。

Hadoop中的HDFS是一個文件系統,用戶的認證和授權比較複雜,難度不低於Linux系統的用戶和組管理。加上Kerberos後,用戶和用戶組的管理更加複雜,通常一個合適的用戶不能訪問HDFS上的文件。

Hadoop加上Kerberos後,通常原來的用戶和文件,可能都失效導致數據流失。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 DBAplus社群 的精彩文章:

基於支付場景的微服務高可用架構實戰

TAG:DBAplus社群 |