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和超级用户组控制访问。