HDFS中Acl權(quán)限管理的簡單實(shí)用,你學(xué)會(huì)了嗎?
1、背景
在我們開發(fā)的過程中有這么一種場景,/projectA目錄是hadoopdeploy用戶創(chuàng)建的,他對這個(gè)目錄有wrx權(quán)限,同時(shí)這個(gè)目錄屬于supergroup,在這個(gè)組中的用戶也具有這個(gè)目錄的wrx權(quán)限,對于其他人,不可訪問這個(gè)目錄。現(xiàn)在有這么一個(gè)特殊的用戶root,我想root用戶可以訪問這個(gè)目錄,在不修改root用戶組和其他人的權(quán)限的情況下,還有什么方式可以實(shí)現(xiàn)這個(gè)功能呢?
背景
由上圖可以,root用戶想訪問/projectA目錄,在hdfs中可以通過acl來實(shí)現(xiàn)。
2、環(huán)境準(zhǔn)備
# 創(chuàng)建目錄
[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 目錄的權(quán)限修改成 770, 即其他人沒有這個(gè)目錄的訪問權(quán)限
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -chmod 770 /projectA
# 再次查看發(fā)現(xiàn)修改成功
[hadoopdeploy@hadoop01 ~]$ hdfs dfs -ls /
Found 1 items
drwxrwx--- - hadoopdeploy supergroup 0 2023-05-24 20:35 /projectA
[hadoopdeploy@hadoop01 ~]$
環(huán)境準(zhǔn)備
從上述代碼中可知,我們創(chuàng)建了一個(gè)/projecetA的目錄,且給這個(gè)目錄的權(quán)限為770,那么其他人對這個(gè)目錄應(yīng)該是沒有訪問權(quán)限的。 通過上述圖片可知,我們用root用戶上傳文件,發(fā)現(xiàn)沒有權(quán)限。
3、開啟acl權(quán)限
3.1 修改hdfs-site.xml
<!-- 開啟acl訪問控制權(quán)限,默認(rèn)就開啟了 -->
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
開啟acl
注意:在低版本的hadoop上默認(rèn)是禁用的,高版本默認(rèn)是開啟的。
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用戶授權(quán)
[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用戶授權(quán)
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用戶設(shè)置hdfs dfs -setfacl -m group:root:rwx /projectA對root組設(shè)置
4.1 設(shè)置acl
hdfs dfs -setfacl -m user:root:rwx /projectA
將/projectA這個(gè)目錄授予root用戶rwx權(quán)限。
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---+ 這個(gè)+表示有acl權(quán)限
4.3 移除某個(gè)用戶的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 ~]$
移除某個(gè)用戶的acl
4.4 刪除該目錄所有的acl權(quán)限
[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