HDFS的權限管理兼容POSIX標準,采用“用戶-組-其他”三級權限模型,支持傳統POSIX權限(讀、寫、執行)和**ACL(訪問控制列表)**細粒度權限控制。其核心配置通過Hadoop的core-site.xml
和hdfs-site.xml
文件完成,確保權限機制生效。
core-site.xml
配置用戶映射(將Linux用戶映射到HDFS UID)和權限檢查:
<property>
<name>hadoop.security.uid.mapping</name>
<value>org.apache.hadoop.security.uid.mapping.SimpleUIDMapping</value>
</property>
<property>
<name>hadoop.security.uid.mapping.file</name>
<value>/etc/hadoop/conf/users.map</value>
</property>
<property>
<name>hadoop.security.authentication</name>
<value>simple</value> <!-- 生產環境建議使用kerberos -->
</property>
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
其中users.map
文件需定義Linux用戶與HDFS UID的映射(如hdfs 1000
,hadoop 1001
)。
hdfs-site.xml
啟用HDFS權限檢查和ACL功能:
<property>
<name>dfs.permissions.enabled</name>
<value>true</value> <!-- 啟用權限檢查 -->
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value> <!-- 啟用ACL -->
</property>
<property>
<name>dfs.datanode.acls.enabled</name>
<value>true</value> <!-- DataNode支持ACL -->
</property>
<property>
<name>dfs.permissions.umask-mode</name>
<value>022</value> <!-- 默認umask(創建文件權限為644,目錄為755) -->
</property>
修改后需重啟HDFS集群使配置生效。
使用hdfs dfs -ls
命令查看文件/目錄的權限、所有者和組:
hdfs dfs -ls /user/hadoop/example.txt
# 輸出示例:-rw-r--r-- 3 hadoop hadoop 12345 2025-10-01 10:00 /user/hadoop/example.txt
# 解釋:所有者(hadoop)有讀寫權限,組和其他用戶有讀權限
使用hdfs dfs -chmod
命令修改權限(格式:[ugoa][+-=][rwx]
或八進制數):
# 給所有者添加執行權限
hdfs dfs -chmod u+x /user/hadoop/example.txt
# 設置目錄權限為755(所有者rwx,組和其他r-x)
hdfs dfs -chmod 755 /user/hadoop/testdir
# 遞歸修改目錄及其子項權限
hdfs dfs -chmod -R 755 /user/hadoop
使用hdfs dfs -chown
(修改所有者)或hdfs dfs -chgrp
(修改所屬組)命令:
# 將文件所有者改為hadoop用戶,組改為hadoop組
hdfs dfs -chown hadoop:hadoop /user/hadoop/example.txt
# 僅修改所屬組
hdfs dfs -chgrp hadoop /user/hadoop/example.txt
# 遞歸修改目錄及其子項所有權
hdfs dfs -chown -R hadoop:hadoop /user/hadoop
ACL允許為特定用戶或組設置額外權限,突破傳統POSIX權限的限制。
確保hdfs-site.xml
中dfs.namenode.acls.enabled=true
,并重啟HDFS。
使用hdfs dfs -setfacl
命令添加權限規則:
# 給用戶alice添加對目錄的讀寫執行權限
hdfs dfs -setfacl -m user:alice:rwx /user/hadoop/testdir
# 給組dev組添加對文件的讀權限
hdfs dfs -setfacl -m group:dev:r-- /user/hadoop/example.txt
# 刪除用戶bob的所有權限
hdfs dfs -setfacl -x user:bob /user/hadoop/example.txt
# 刪除所有ACL規則(恢復為傳統權限)
hdfs dfs -setfacl -b /user/hadoop/example.txt
使用hdfs dfs -getfacl
命令查看詳細權限:
hdfs dfs -getfacl /user/hadoop/testdir
# 輸出示例:
# user::rwx
# user:alice:rwx
# group::r-x
# mask::rwx
# other::r-x
# default:user::rwx
# default:group::r-x
# default:other::r-x
default
規則表示子項繼承的權限。
HDFS目錄支持權限繼承,子目錄和文件會自動繼承父目錄的權限。通過+i
選項開啟繼承:
# 開啟目錄的權限繼承(后續創建的子項會繼承父目錄權限)
hdfs dfs -chmod +i /user/hadoop/parentdir
# 關閉繼承(需遞歸修改現有子項權限)
hdfs dfs -chmod -i /user/hadoop/parentdir
生產環境中,建議使用Kerberos進行身份認證,確保只有合法用戶能訪問HDFS。
在core-site.xml
中啟用Kerberos認證:
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
使用kinit
命令獲取票據(需提前配置krb5.conf
和keytab文件):
kinit hadoop@EXAMPLE.COM # 替換為實際用戶名和域名
klist # 查看票據有效期
票據過期后需重新獲?。?code>kinit -R刷新,kinit
重新獲?。?。
dfs.permissions.enabled=true
,否則權限設置無效。dfs.permissions.umask-mode
調整默認權限(如022
對應文件644、目錄755)。hdfs-site.xml
中配置審計日志(dfs.namenode.audit.log.maxsize
、dfs.namenode.audit.log.rotation.period
),記錄訪問行為。