# 1、背景 在我們開發的過程中有這麼一種場景, `/projectA` 目錄是 `hadoopdeploy`用戶創建的,他對這個目錄有`wrx`許可權,同時這個目錄屬於`supergroup`,在這個組中的用戶也具有這個目錄的`wrx`許可權,對於其他人,不可訪問這個目錄。現在有這麼一個特殊的用戶`r ...
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>
註意:
在低版本的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 ~]$
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的一些簡單命令
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 ~]$
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、參考鏈接
本文來自博客園,作者:huan1993,轉載請註明原文鏈接:https://www.cnblogs.com/huan1993/p/17450295.html