Hadoop Kerberos安全機制介紹

2021-06-19 15:22:42 字數 2904 閱讀 5890

在hadoop1.0.0或者cdh3 版本之前, hadoop並不存在安全認證一說。預設集群內所有的節點都是可靠的,值得信賴的。使用者與hdfs或者m/r進行互動時並不需要進行驗證。導致存在惡意使用者偽裝成真正的使用者或者伺服器入侵到hadoop集群上,惡意的提交作業,修改jobtracker狀態,篡改hdfs上的資料,偽裝成namenode 或者tasktracker接受任務等。 儘管在版本0.16以後, hdfs增加了檔案和目錄的許可權,但是並沒有強認證的保障,這些許可權只能對偶然的資料丟失起保護作用。惡意的使用者可以輕易的偽裝成其他使用者來篡改許可權,致使許可權設定形同虛設。不能夠對hadoop集群起到安全保障。

在hadoop1.0.0或者cdh3版本後,加入了kerberos認證機制。使得集群中的節點就是它們所宣稱的,是信賴的。kerberos可以將認證的金鑰在集群部署時事先放到可靠的節點上。集群執行時,集群內的節點使用金鑰得到認證。只有被認證過節點才能正常使用。企圖冒充的節點由於沒有事先得到的金鑰資訊,無法與集群內部的節點通訊。防止了惡意的使用或篡改hadoop集群的問題,確保了hadoop集群的可靠安全。

使用者可以偽裝成其他使用者入侵到乙個hdfs 或者mapreduce集群上。

datanode對讀入輸出並沒有認證。導致如果一些客戶端如果知道block的id,就可以任意的訪問datanode上block的資料

可以任意的殺死或更改使用者的jobs,可以更改jobtracker的工作狀態

使用者可以偽裝成datanode ,tasktracker,去接受jobtracker, namenode的任務指派。

kerberos實現的是機器級別的安全認證,也就是前面提到的服務到服務的認證問題。事先對集群中確定的機器由管理員手動新增到kerberos資料庫中,在kdc上分別產生主機與各個節點的keytab(包含了host和對應節點的名字,還有他們之間的金鑰),並將這些keytab分發到對應的節點上。通過這些keytab檔案,節點可以從kdc上獲得與目標節點通訊的金鑰,進而被目標節點所認證,提供相應的服務,防止了被冒充的可能性。

由於kerberos對集群裡的所有機器都分發了keytab,相互之間使用金鑰進行通訊,確保不會冒充伺服器的情況。集群中的機器就是它們所宣稱的,是可靠的。

防止了使用者偽裝成datanode,tasktracker,去接受jobtracker,namenode的任務指派。

kerberos對可信任的客戶端提供認證,確保他們可以執行作業的相關操作。防止使用者惡意冒充client提交作業的情況。

使用者無法偽裝成其他使用者入侵到乙個hdfs 或者mapreduce集群上

使用者即使知道datanode的相關資訊,也無法讀取hdfs上的資料

使用者無法傳送對於作業的操作到jobtracker上

無法控制使用者提交作業的操作。不能夠實現限制使用者提交作業的許可權。不能控制哪些使用者可以提交該型別的作業,哪些使用者不能提交該型別的作業。這些由acl模組控制(參考)

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

kdc(key distribution center ) : 是乙個網路服務,提供ticket 和臨時會話金鑰

ticket:乙個記錄,客戶用它來向伺服器證明自己的身份,包括客戶標識、會話金鑰、時間戳。

as (authentication server): 認證伺服器

tsg(ticket granting server): 許可證伺服器

4.2.1  kerberos協議

kerberos可以分為兩個部分:

4.3 kerberos認證過程

kerberos協議的重點在於第二部分(即認證過程):

(1)client將之前獲得tgt和要請求的服務資訊(服務名等)傳送給kdc,kdc中的ticket granting service將為client和service之間生成乙個session key用於service對client的身份鑑別。然後kdc將這個session key和使用者名稱,使用者位址(ip),服務名,有效期, 時間戳一起包裝成乙個ticket(這些資訊最終用於service對client的身份鑑別)傳送給service, 不過kerberos協議並沒有直接將ticket傳送給service,而是通過client**給service,所以有了第二步。

(2)此時kdc將剛才的ticket**給client。由於這個ticket是要給service的,不能讓client看到,所以kdc用協議開始前kdc與service之間的金鑰將ticket加密後再傳送給client。同時為了讓client和service之間共享那個金鑰(kdc在第一步為它們建立的session key),kdc用client與它之間的金鑰將session key加密隨加密的ticket一起返回給client。

(3)為了完成ticket的傳遞,client將剛才收到的ticket**到service. 由於client不知道kdc與service之間的金鑰,所以它無法算改ticket中的資訊。同時client將收到的session key解密出來,然後將自己的使用者名稱,使用者位址(ip)打包成authenticator用session key加密也傳送給service。

(4)service 收到ticket後利用它與kdc之間的金鑰將ticket中的資訊解密出來,從而獲得session key和使用者名稱,使用者位址(ip),服務名,有效期。然後再用session key將authenticator解密從而獲得使用者名稱,使用者位址(ip)將其與之前ticket中解密出來的使用者名稱,使用者位址(ip)做比較從而驗證client的身份。

(5)如果service有返回結果,將其返回給client。

hadoop集群內部使用kerberos進行認證

具體的執行過程可以舉例如下:

(1)kerberos原理:

(2)什麼是kerberos:

(3)「hadoop security design」  owen o』malley, kan zhang, sanjay radia,  ram marti, and christopher harrell 

mongodb els memcached安全漏洞

elasticsearch漏洞 漏洞 cve 2014 3120 命令執行 cve 2015 3337 目錄穿越 cve 2014 3120 命令執行 啟動 docker compose build docker compose up d cve 2015 3337 目錄穿越 在安裝了具有 site...

pureftp mysql pureftp安裝部署

ftp 檔案傳輸 pure ftpd ftp軟體 作用 通過對映登入傳送和接收檔案。wget 2 解壓包 tar jxvf pure ftpd 1.0.43.tar.bz2 3 進入解壓目錄 cd pure ftpd.4 初始化安裝環境 先建立安裝目錄mkdir usr local pureftpd...

thinkphp nginx phpcgj安裝配置

環境 mysql 5.6.26 nginx 1.9.4.tar.gz php 5.6.13 程式框架thinkphp 客戶要求必須使用nginx php 1.首先安裝nginx mysql php 2.安裝擴充套件php擴充套件 pdo mysql 1 cd usr local src php 5....