簡介
Hadoop從2.4.0版本開始支持hdfs的ACL
ACL(Access Control Lists)
基本命令操作:
hdfs dfs -getfacl [-R] ?獲取目錄和文件的ACL 信息
hdfs dfs -setfacl [-R] [-b |-k -m |-x ] |[--set ] ?設置文件和目錄的ACL信息
hdfs dfs -ls 當ls的權限位輸出以+結束時,那么該文件或目錄正在啟用一個ACL。
配置信息
機制和測試
hdfs 默認是開啟文件訪問權限的,按照rwx 來進行判斷是否有讀寫執行權限。然后根據用戶擁有者, 同組用戶, 非同組用戶 來進行權限管理
我們可以通過bash -c users ?和 bash -c groups 獲取用戶 和 組
(1) 創建文件
echo "hell" > 1.txt
hadoop fs -mkdir /acl; hadoop fs -put 1.txt /acl
(2) 更改用戶組 和 權限
創建文件和目錄的時候默認組為supergroup, 文件夾的權限是755 ,文件的權限是644.
hadoop fs -chmod -R 750 ?/acl
hadoop fs -chown -R bfd_hz:bfd_hz /acl
(3) 用戶擁有者,同組用戶, 非同組用戶測試。
用戶和組的創建省略, 測試的過程中三個用戶 bfd_hz ? baseline ? wenting , ? bfd_hz 和 wenting 是同組用戶,
baseline 單獨一個組, 文件的由bfd_hz 創建,權限如下:


(4) ACL讓非同組的用戶也能訪問此文件

注意點:用戶名和組 要和 hadoop 上面的組對應, 比如默認創建的文件組是supergroup,
如果不設置成bfd_hz, wenting此時操作文件也不能執行,user -c groups 是bfd_hz, 和 supergroup不相等。 此時就導致不屬于同組用戶
關于一個文件的組關系:如果根目錄,沒有繼承來源,默認supergroup, 如果是子目錄,繼承父目錄的組
其他話題-->hive 中創建表的時候權限和組問題:https://cwiki.apache.org/confluence/display/Hive/Permission+Inheritance+in+Hive
參考資料:https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsPermissionsGuide.html