HDFS在Linux中的权限设置体系
HDFS(Hadoop分布式文件系统)的权限管理借鉴了Linux/Unix的UGO(用户-组-其他)模型,但作为分布式系统,其用户、组及权限的实现依赖外部系统(如Linux用户数据库、LDAP),并通过配置文件调整权限行为。
HDFS的权限类型与Linux一致,包括读(r)(读取文件内容/列出目录文件)、写(w)(修改文件内容/添加/删除目录文件)、执行(x)(执行文件/进入目录)。权限分为三个层级:
-rwxr-xr--代表所有者有读写执行权限,组用户有读执行权限,其他用户仅有读权限。HDFS的权限行为通过hdfs-site.xml和core-site.xml配置:
dfs.permissions.enabled(默认true,开启权限检查;设为false则关闭,不推荐生产环境使用);hdfs),可通过dfs.permissions.superusergroup设置超级用户组(如admin,默认supergroup),组内用户均具备超级权限;fs.permissions.umask-mode(默认022,新建文件权限644、目录755;若设为037,则文件640、目录740)。HDFS提供与Linux类似的命令,用于管理权限:
hdfs dfs -ls /path(显示文件/目录的权限、所有者、组等信息,如-rw-r--r-- 1 hdfs supergroup 1024 2025-10-01 10:00 /test.txt);hdfs dfs -chmod [权限] /path(支持八进制如755或符号如u+x,例如hdfs dfs -chmod 755 /data设置所有者读写执行、组及其他读执行);hdfs dfs -chown [用户]:[组] /path(如hdfs dfs -chown hadoop:hadoop-group /data);hdfs dfs -chgrp [组] /path(如hdfs dfs -chgrp hadoop-group /data)。ACL(Access Control List)用于实现更细粒度的权限控制(如给特定用户/组添加权限),需先启用:
dfs.namenode.acls.enabled(hdfs-site.xml中设为true);hdfs dfs -setfacl -m [规则] /path(如hdfs dfs -setfacl -m user:test:rwx /data给用户test添加读写执行权限);hdfs dfs -getfacl /path(显示当前ACL条目,如user::rwx user:test:rwx group::r-x other::r--);hdfs dfs -setfacl -x [规则] /path(如hdfs dfs -setfacl -x user:test /data删除用户test的ACL条目)。HDFS自身不维护用户/组信息,需依赖外部系统:
whoami获取),适用于测试环境,但存在安全风险(如用户伪造身份);core-site.xml中的hadoop.security.authentication为kerberos,并结合hadoop.security.auth_to_local规则将Kerberos principal映射为本地用户;hadoop.security.group.mapping属性指定组映射服务(默认org.apache.hadoop.security.ShellBasedUnixGroupsMapping,使用Linux系统/etc/group文件;也可配置LDAP服务(如OpenLDAP),从LDAP服务器获取用户组列表。-R选项递归修改(如hdfs dfs -chmod -R 755 /data);hdfs用户可修改任何文件的所有者);