HDFS中Acl權限管理的簡單實用,你學會了嗎?
1、背景
在我們開發的過程中有這么一種場景,/projectA目錄是hadoopdeploy用戶創建的,他對這個目錄有wrx權限,同時這個目錄屬于supergroup,在這個組中的用戶也具有這個目錄的wrx權限,對于其他人,不可訪問這個目錄。現在有這么一個特殊的用戶root,我想root用戶可以訪問這個目錄,在不修改root用戶組和其他人的權限的情況下,還有什么方式可以實現這個功能呢?
背景
由上圖可以,root用戶想訪問/projectA目錄,在hdfs中可以通過acl來實現。
2、環境準備
# 創建目錄
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -mkdir /projectA
# 列出根目錄下的文件夾
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -ls /
Found 1 items
drwxr-xr-x - hadoopdeploy supergroup 0 2023-05-24 20:35 /projectA
# 將 /projectA 目錄的權限修改成 770, 即其他人沒有這個目錄的訪問權限
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -chmod 770 /projectA
# 再次查看發現修改成功
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -ls /
Found 1 items
drwxrwx--- - hadoopdeploy supergroup 0 2023-05-24 20:35 /projectA
[hadoopdeploy@hadoop01 ~]$
環境準備
從上述代碼中可知,我們創建了一個/projecetA的目錄,且給這個目錄的權限為770,那么其他人對這個目錄應該是沒有訪問權限的。 通過上述圖片可知,我們用root用戶上傳文件,發現沒有權限。
3、開啟acl權限
3.1 修改hdfs-site.xml
<!-- 開啟acl訪問控制權限,默認就開啟了 -->
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
開啟acl
注意:在低版本的hadoop上默認是禁用的,高版本默認是開啟的。
3.2 重啟hdfs集群
[hadoopdeploy@hadoop01 ~]$ stop-dfs.sh
Stopping namenodes on [hadoop01]
Stopping datanodes
Stopping secondary namenodes [hadoop03]
[hadoopdeploy@hadoop01 ~]$ start-dfs.sh
Starting namenodes on [hadoop01]
Starting datanodes
Starting secondary namenodes [hadoop03]
[hadoopdeploy@hadoop03 ~]$
3.3 使用acl給root用戶授權
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -setfacl -m user:root:rwx /projectA
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA
# file: /projectA
# owner: hadoopdeploy
# group: supergroup
user::rwx
user:root:rwx
group::rwx
mask::rwx
other::---
[hadoopdeploy@hadoop01 ~]$
使用acl給root用戶授權
3.4 使用 root 用戶測試文件上傳
[root@hadoop01 ~]# hdfs dfs -put anaconda-ks.cfg /projectA
[root@hadoop01 ~]# hdfs dfs -ls /projectA
Found 1 items
-rw-r--r-- 2 root supergroup 1151 2023-05-24 21:10 /projectA/anaconda-ks.cfg
[root@hadoop01 ~]#
可以看到文件上傳成功了。
4、acl的一些簡單命令
acl語法
hdfs dfs -setfacl -m user:root:rwx /projectA對root用戶設置hdfs dfs -setfacl -m group:root:rwx /projectA對root組設置
4.1 設置acl
hdfs dfs -setfacl -m user:root:rwx /projectA
將/projectA這個目錄授予root用戶rwx權限。
4.2 查看acl
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA
# file: /projectA
# owner: hadoopdeploy
# group: supergroup
user::rwx
user:root:rwx
group::rwx
mask::rwx
other::---
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -ls /
Found 1 items
drwxrwx---+ - hadoopdeploy supergroup 0 2023-05-24 21:10 /projectA
[hadoopdeploy@hadoop01 ~]$
drwxrwx---+ 這個+表示有acl權限
4.3 移除某個用戶的acl
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -setfacl -x user:root /projectA
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA
# file: /projectA
# owner: hadoopdeploy
# group: supergroup
user::rwx
group::rwx
mask::rwx
other::---
[hadoopdeploy@hadoop01 ~]$
移除某個用戶的acl
4.4 刪除該目錄所有的acl權限
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -setfacl -b /projectA
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -getfacl /projectA
# file: /projectA
# owner: hadoopdeploy
# group: supergroup
user::rwx
group::rwx
other::---
[hadoopdeploy@hadoop01 ~]$
5、參考鏈接
1、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html#setfacl