2016-10-14 112 views
0

目前我正在開發一個項目來增強Hadoop集羣的安全性。最終,我將使用Kerberos和Sentry進行身份驗證和授權。用戶名和組映射將來自AD/LDAP(?),我想是的。Hadoop從linux shell用戶名和組映射獲取用戶名和組映射?

但現在我只是在學習和嘗試。我有一個問題,我還沒有弄清楚是

哪裏的用戶名/組映射信息來自?

據我所知Hadoop沒有用戶名和組名,用戶名和組名來自本地客戶機或Kerberos領域的客戶端。但是對我來說有點模糊,我能在這裏得到實現細節嗎?

該信息來自HDFS客戶機所在的計算機,還是來自linux shell命名節點上的用戶名和組?或者它取決於上下文 - 甚至與數據節點有關?如果數據節點和名稱節點在本地框中具有不同的用戶或用戶組映射會怎麼樣?

回答

1

Hadoop從名爲HADOOP_USER_NAME的全局變量中獲取該信息。

如果你想通過另一個USER_NAME,您可以編寫如下:

HADOOP_USER_NAME=yourname hadoop dfs -put ... 

所以命令必須開始與HADOOP_USER_NAME=VALUE

+0

我認爲這是正確的。但是,這是Hadoop獲取用戶名的唯一方式嗎? – cdhit

1

客戶端和NameNode和所有Hadoop的服務,這是在Linux機器上檢查組成員和用戶名默認使用id命令。 (但是我不確定Windows客戶端上的詳細信息,但最近它是通過JNI完成的,因此必須在該端也有解決方案。)

這也意味着結果將取決於本地框的用戶組映射。如果您使用Kerberos作爲後端,或者通過sssd或其他任何方式爲此設置了中央後端,則可以在其nsswitch.conf中設置該框,以便在id命令後面使用該後端。

側注:有一個名爲hadoop.security.group.mapping的屬性定義了用於執行映射的策略。即使您有LDAP後端,我也不建議使用LDAPGroupMapping,但JNIBasedGroupMappingWithFallback似乎更可靠並且運行良好。