Hadoop集群的許可權認證

2021-10-03 20:06:25 字數 4215 閱讀 3502

在hadoop1.0.0或者cdh3 版本之前, hadoop並不存在安全認證一說。預設集群內所有的節點都是可靠的,值得信賴的。

導致存在惡意使用者偽裝成真正的使用者或者伺服器入侵到hadoop集群上,惡意的提交作業,修改jobtracker狀態,篡改hdfs上的資料,偽裝成namenode 或者tasktracker接受任務等。

2.1 使用者到伺服器的認證問題

2.2 伺服器到伺服器的認證問題

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

kerberos實現的是機器級別的安全認證。

3.1 解決伺服器到伺服器的認證

由於kerberos對集群裡的所有機器都分發了keytab,相互之間使用金鑰進行通訊,確保不會冒充伺服器的情況。集群中的機器就是它們所宣稱的,是可靠的。防止了使用者偽裝成datanode,tasktracker,去接受jobtracker,namenode的任務指派。

3.2 解決client到伺服器的認證

kerberos對可信任的客戶端提供認證,確保他們可以執行作業的相關操作。防止使用者惡意冒充client提交作業的情況。使用者無法偽裝成其他使用者入侵到乙個hdfs 或者mapreduce集群上。使用者即使知道datanode的相關資訊,也無法讀取hdfs上的資料,使用者無法傳送對於作業的操作到jobtracker上

3.3 對使用者級別上的認證並沒有實現

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

4.1 基本概念

kerberos由三個成員組成的

key distribution center(kdc)鑰匙分發中心,核心元件,類似於ca,kdc的埠預設為88。

client users客戶端。

principals.**人,角色。

乙個最基本的單位是principal

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

as (authentication server): 認證伺服器

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

kerberos

kerberos是乙個用於鑑定身份(authentication)的協議, 它採取對稱金鑰加密(symmetric-key cryptography),這意味著金鑰不會在網路上傳輸。在kerberos中,未加密的密碼(unencrypted password)不會在網路上傳輸,因此攻擊者無法通過嗅探網路來偷取使用者的密碼。

kerberos利用對稱加密和受信任的第三方(即kdc, key distribution center)來鑑別要求使用網路服務的使用者的身份。所有有kdc和secondary kdc管理的主機構成了乙個域(realm)。

當乙個使用者的身份通過了kdc的驗證後,kdc會向該使用者傳送乙個證書/票據(該證書/票據是與這次會話繫結的),其他kerberized services會在該使用者的主機上搜尋該ticket,而不是要求使用者使用密碼來驗證他的身份。

principal

乙個使用者會以乙個獨一無二的身份來被kdc認證,該身份被稱為principal。

乙個principal由三個部分組成:primary, instance以及realm,其組成形式為primary/instance@realm。

primary: 使用者/服務名

instance: 用於區分屬於同乙個user或者service的多個principals,該項為optional;

realm: kerberos的域,定義了一組principals

4.2 認證詳細原理

kerberos實際上乙個基於ticket的認證方式。

client想要獲取server端的資源,先得通過server的認證;而認證的先決條件是client向server提供從kdc獲得的乙個有server的master key進行加密的session ticket(session key + client info)。

可以這麼說,session ticket是client進入server領域的一張門票。而這張門票必須從乙個合法的ticket頒發機構獲得,這個頒發機構就是client和server雙方信任的kdc,同時這張ticket具有超強的防偽標識:它是被server的master key加密的。

對client來說,獲得session ticket是整個認證過程中最為關鍵的部分。

# 登陸集群

ssh username@ip

# 獲取集群root許可權

sudo -i

# 登陸管理kdc伺服器

kadmin.local

# 檢視使用者列表

listprincs

# 建立principal

add_principal principalname

# 刪除principal

delete_principal principalname

# 動態認證

kinit -kt /etc/security/keytabs/hdfs.keytab hdfs

# 檢視登陸狀態

klist

# 退出

kdestroy

# beeline連線hive

beeline -u "jdbc:hive2:"

kerberos之前是使用crypt的加密演算法加密的密碼。密碼還是在網際網路上傳輸的。

kerberos傳輸的是票(tickets)

secure network authentication system

based around credentials called tickets.基於對身份驗證的方法實現驗證,這種方式被成為票。

tickets secured by secret key encyption.票的安全是通過私鑰加密的,因此kerberos就是要保障票的安全

kerberos是安全的網路認證系統,它是專門用來做認證的。

認證體系是由兩部分組成的。

nss提供賬號。ldap /etc/nsswitch.conf

pam提供認證。kerberos /etc/pam.d/system-auth

賬戶資訊和密碼資訊都是有ldap提供的。system-config-authentication

正常情況下是客戶端訪問服務由服務保障安全,但是現在客戶端將請求傳送給kdc,由kdc來保障服務的安全。

ldap是輕量目錄訪問協議,英文全稱是lightweight directory access protocol,一般都簡稱為ldap。

ldap支援tcp/ip。

ldap目錄以樹狀的層次結構來儲存資料。

ldap訪問控制異常靈活和豐富。

訪問控制

雖然ldap並無訪問控制的標準,但從一些草案中或是事實上ldap產品的訪問控制情況,我們不難看出:ldap訪問控制異常的靈活和豐富,在ldap中是基於訪問控制策略語句來實現訪問控制的,這不同於現有的關係型資料庫系統和應用系統,它是通過基於訪問控制列表來實現的,無論是基於組模式或角色模式,都擺脫不了這種限制

而對於ldap,使用者資料管理和訪問標識是一體的,應用不需要關心訪問控制的實現。這是由於在ldap中的訪問控制語句是基於策略語句來實現的,無論是訪問控制的資料物件,還是訪問控制的主體物件,均是與這些物件在樹中的位置和物件本身的資料特徵相關。

在ldap中,可以把整個目錄、目錄的子樹、制定條目、特定條目屬性集或符合某過濾條件的條目作為控制物件進行授權;可以把特定使用者、屬於特定組或所有目錄使用者作為授權主體進行授權;最後,還可以定義對特定位置(例如ip位址或dns名稱)的訪問權。

通過kerberos的hive賬戶可以在集群上以hive shell的形式進入hive中建立資料庫和表

通過beeline連線hive server2來建立角色和組:

通過kerberos認證進入beeline

通過ldap的hive賬號進入beeline,hive預設為admin許可權

Hadoop集群中關於SSH認證許可權的問題

今天回北京了,想把在外地做的集群移植回來,需要修改ip位址和一些配置引數,結果在配置的過程中,總是會有一些提示,說是我的機器之間的認證許可權有問題。所以對照以前寫的安裝手冊,把ssh重新配置了一遍。但是發現在啟動的時候還是有提示,說是我的ssh有錯誤,還是需要輸入yes和密碼來登入。總結了一下,內容...

Hadoop基於SLA許可權認證

在core site.xml中配置以下屬性 hadoop.security.authorization true 配置hadoop policy.xml 引數格式 使用者名稱與使用者組之間用空格分開 使用者使用者之間用 tom,cat super,no 屬性說明 security.client.pr...

hadoop的集群安裝

hadoop的集群安裝 1 安裝jdk,解壓jar,配置環境變數 1.1 解壓jar tar zxvf jdk 7u79 linux x64.tar.gz c opt install 將jdk解壓到對應的檔案目錄下 1.2 配置環境變數,sudo vim etc profile 新增下面內容 exp...