Hadoop基礎-HDFS安全管家之Kerberos實戰篇
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
我們都知道hadoop有很多不同的發行版,比如:Apache Hadoop,CDH,HDP,MapR,EMR等等,我們使用這些組件部署的hdfs分布式文件系統時,都會面臨很直接的一個安全問題,比如Java大數據開發工程師可以在java源代碼中使用“System.setProperty("HADOOP_USER_NAME","yinzhengjie");”來提權操作,只要client能夠連接上hadoop集群就能或得hadoop集群上“yinzhengjie”這個用戶對應的權限。這樣做是很不安全的!而實行Kerberos后,任意機器的任意用戶都必須現在 Kerberos 的 KDC 中有記錄,才允許和集群中其它的模塊進行通信。
一.Kerberos工作原理
如上圖所示,詳細步驟如下: 1>.用戶發送自己的用戶信息給KDC; 2>.KDC訪問AS服務,獲得TGT; 3>.KDC用client key加密TGT以及一個Session Key給用戶;用戶得到加密數據后,使用client key解密得到TGT和Session Key; 4>.Client將之前獲得TGT和要請求的服務信息(服務名等)發送給KDC; 5>.認證用戶合法后,KDC中的TGS將Session Key和用戶名,用戶地址(IP),服務名,有效期, 時間戳一起包裝成一個Ticket; 6>.KDC將Ticket用Server key加密並發送Client; 7>.此時Client沒有密鑰B所以他無法查看Ticket中的內容,於是Client將Ticket直接轉發Service;同時Client將自己的用戶名,用戶地址(IP)打包成Authenticator,用之前獲得的Session Key加密也發送給Service。 8>.客戶端驗證過程:Service 收到Ticket后利用它與KDC之間的Server key將Ticket中的信息解密出來,從而獲得Session Key和用戶名,用戶地址(IP),服務名,有效期。然后再用SK將Authenticator解密從而獲得用戶名,用戶地址(IP)將其與之前Ticket中解密出來的用戶名,用戶地址(IP)做比較,從而驗證Client的身份。 9>.如果Service有返回結果,將其返回給Client。在Hadoop應用中,服務器可以是namenode或jobtracker。 簡單的說,使用Kerberos時,一個客戶端大致需要經過三個步驟來獲取服務: 1>.認證: 客戶端向認證服務器發送一條報文,並獲取一個含時間戳的Ticket-Granting Ticket(TGT)和一個Session Key。 2>.授權: 客戶端使用TGT向Ticket-Granting Server(TGS)請求一個服務Ticket。 3>.服務請求: 客戶端向服務器出示服務Ticket,以證實自己的合法性。該服務器提供客戶端所需服務,在Hadoop應用中,服務器可以是namenode或jobtracker。 溫馨提示: Kerberos需要The Key Distribution Centers(KDC)來進行認證。KDC只有一個Master,可以帶多個slaves機器。slaves機器僅進行普通驗證。Mater上做的修改需要自動同步到slaves。另外,KDC需要一個admin,來進行日常的管理操作。這個admin可以通過遠程或者本地方式登錄。
二.Kerberos部署實戰
三.