HDFS(Hadoop分布式文件系統)的權限管理基于用戶-組-權限位模型,并支持**ACL(訪問控制列表)**實現細粒度控制。以下是在Ubuntu系統上設置HDFS權限的關鍵步驟:
HDFS的權限模型與Linux類似,每個文件/目錄包含所有者(owner)、**所屬組(group)和權限位(rwx)**三部分,權限位分別對應:
sudo groupadd hadoop
sudo useradd -r -g hadoop hdfs # 創建系統用戶hdfs(NameNode默認用戶)
sudo passwd hdfs # 設置密碼
sudo useradd -G hadoop hadoop_user1
sudo passwd hadoop_user1
編輯hdfs-site.xml
(位于/etc/hadoop/
),設置dfs.permissions.enabled
為true
(默認開啟):
<property>
<name>dfs.permissions.enabled</name>
<value>true</value> <!-- 開啟權限檢查 -->
</property>
重啟HDFS服務使配置生效:
sudo systemctl restart hadoop-hdfs-namenode
sudo systemctl restart hadoop-hdfs-datanode
查看權限:
hdfs dfs -ls /path/to/dir # 示例:hdfs dfs -ls /user/hadoop_user1
輸出示例:drwxr-xr-x - hdfs hadoop 0 2025-10-01 10:00 /user/hadoop_user1
(d
表示目錄,rwx
為所有者權限,r-x
為組權限,r-x
為其他用戶權限)
修改權限:
755
:所有者rwx
,組和其他r-x
):hdfs dfs -chmod 755 /user/hadoop_user1
w
權限):hdfs dfs -chmod u+w /user/hadoop_user1
修改所有者/組:
hdfs dfs -chown hdfs_user1:hadoop /user/hadoop_user1
hdfs dfs -chgrp hadoop /user/hadoop_user1
ACL用于為特定用戶或組設置額外權限,突破傳統“所有者-組-其他”的限制。
編輯hdfs-site.xml
,設置dfs.namenode.acls.enabled
為true
:
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value> <!-- 開啟ACL -->
</property>
重啟HDFS服務:
sudo systemctl restart hadoop-hdfs-namenode
查看ACL:
hdfs dfs -getfacl /path/to/dir
輸出示例:
user::rwx
group::r-x
other::r-x
添加用戶權限(如給hadoop_user2
添加rwx
權限):
hdfs dfs -setfacl -m user:hadoop_user2:rwx /user/hadoop_user1
添加組權限(如給hadoop
組添加rw-
權限):
hdfs dfs -setfacl -m group:hadoop:rw- /user/hadoop_user1
設置默認ACL(讓新建文件/目錄繼承父目錄的ACL):
hdfs dfs -setfacl -m default:user:hadoop_user2:rwx,default:group:hadoop:rw- /user/hadoop_user1
刪除ACL條目(如刪除hadoop_user2
的權限):
hdfs dfs -setfacl -x user:hadoop_user2 /user/hadoop_user1
刪除所有ACL(恢復默認權限):
hdfs dfs -setfacl -b /user/hadoop_user1
HDFS支持權限繼承,新建文件/目錄會繼承父目錄的權限??赏ㄟ^以下方式控制:
default:
前綴的ACL條目,確保新建對象繼承指定權限。HDFS有一個超級用戶(默認是啟動NameNode的用戶,如hdfs
),擁有繞過所有權限檢查的特權。
hdfs-site.xml
,設置dfs.permissions.superusergroup
:<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value> <!-- 超級用戶組為hadoop -->
</property>
重啟HDFS服務后,hadoop
組的成員將擁有超級用戶權限。core-site.xml
和hdfs-site.xml
中的Kerberos相關參數(如hadoop.security.authentication=kerberos
)。ufw
限制HDFS端口(如8020
、50070
)的訪問,僅允許可信IP連接:sudo ufw allow from 192.168.1.0/24 to any port 8020
通過以上步驟,可在Ubuntu環境下實現HDFS的精細化權限管理,滿足不同用戶/組的訪問需求。需注意:生產環境中應避免過度開放權限(如關閉dfs.permissions.enabled
),優先使用ACL和超級用戶組控制訪問。