HDFS采用與Linux類似的用戶-組-其他三級權限模型,包含三種基本權限:
權限通過hdfs dfs -ls
命令查看,格式為-rwxr-xr--
(所有者:讀寫執行;組:讀執行;其他:讀)。常用權限設置命令:
hdfs dfs -chmod 755 /path/to/file
(所有者7=rwx,組5=r-x,其他5=r-x);hdfs dfs -chown hadoop:hadoop-group /path/to/file
(用戶:組);hdfs dfs -chgrp hadoop-group /path/to/file
。要啟用HDFS權限管理,需修改hdfs-site.xml
配置文件,確保以下參數設置為true
:
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.acls.enabled</name>
<value>true</value>
</property>
修改后需重啟HDFS集群使配置生效。
HDFS的用戶和組需與Linux系統用戶同步,常用操作如下:
sudo groupadd hadoopgroup # 創建組
sudo useradd -g hadoopgroup hadoopuser # 創建用戶并加入組
hdfs dfs -mkdir -p /user/hadoopuser # 創建用戶根目錄
hdfs dfs -chown hadoopuser:hadoopgroup /user/hadoopuser # 設置所有者
usermod
命令(Linux系統層),并同步更新HDFS文件所有者。ACL(訪問控制列表)允許為特定用戶或組設置額外權限,突破基本權限的限制。常用命令:
hdfs dfs -setfacl -m user:hadoopuser:rwx /path/to/file # 用戶hadoopuser有rwx
hdfs dfs -setfacl -m group:hadoopgroup:r-x /path/to/dir # 組hadoopgroup有r-x
hdfs dfs -getfacl /path/to/file
(顯示當前ACL規則);hdfs dfs -setfacl -x user:hadoopuser /path/to/file
(移除指定用戶的ACL規則);hdfs dfs -setfacl -R -m group:devgroup:rwx /path/to/dir
(遞歸應用到目錄及子項)。HDFS支持權限繼承,子目錄和文件會自動繼承父目錄的組權限。通過設置父目錄的setgid
位,可強制子項繼承父目錄的組:
hdfs dfs -chmod g+s /path/to/parent_dir # 設置setgid位
hdfs dfs -ls /path/to/parent_dir # 查看時組權限旁會顯示"s"(如drwxr-sr-x)
此后,在父目錄下創建的新文件或目錄,會自動繼承父目錄的組。
在高度安全的環境中,建議集成Kerberos認證,實現強身份驗證。關鍵步驟:
/etc/krb5.conf
文件,指定KDC服務器和默認領域;kinit
命令獲取臨時票據(有效期默認10小時):kinit hadoopuser@REALM # 替換為實際用戶名和領域
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
認證才能訪問HDFS。通過審計日志可跟蹤所有對HDFS的訪問和修改操作,便于排查安全問題。配置core-site.xml
開啟審計日志:
<property>
<name>hadoop.security.audit.log.enabled</name>
<value>true</value>
</property>
<property>
<name>hadoop.security.audit.log.path</name>
<value>/var/log/hadoop-hdfs/audit.log</value> # 日志路徑
</property>
<property>
<name>hadoop.security.audit.log.maxsize</name>
<value>10485760</value> # 單個日志文件最大大?。?0MB)
</property>
<property>
<name>hadoop.security.audit.log.rotation.period</name>
<value>86400</value> # 日志輪轉周期(秒,1天)
</property>
日志會記錄用戶操作(如read
、write
、delete
)、操作時間、IP地址等信息。