HDFS文件权限管理概述
HDFS(Hadoop分布式文件系统)的权限管理机制融合了传统POSIX权限模型与POSIX ACLs(访问控制列表),旨在实现细粒度的访问控制。其核心要素包括用户(User)(文件/目录的所有者)、组(Group)(用户所属的集合,共享权限)、权限位(定义用户/组/其他用户的访问级别)以及ACLs(扩展细粒度权限)。
HDFS的基础权限模型与Linux文件系统一致,通过用户、组、其他用户三类主体及**读(r)、写(w)、执行(x)**三种权限控制访问:
drwxr-xr-x格式表示(d代表目录,-代表文件),依次为所有者、所属组、其他用户的权限。例如,rwxr-xr--表示所有者有读写执行权限,组用户有读执行权限,其他用户仅有读权限。hdfs dfs -ls /path/to/file_or_dir,输出示例:drwxr-xr-x - hdfs supergroup 0 2023-01-01 12:00 /data(解释:目录,所有者hdfs有rwx权限,所属组supergroup有r-x权限,其他用户有r-x权限);hdfs dfs -chmod 755 /path/to/dir(所有者7=rwx,组5=r-x,其他5=r-x);hdfs dfs -chmod u+rwx,g+rx,o+rx /path/to/dir(为用户添加rwx,为组添加r-x,为其他用户添加r-x);hdfs dfs -chown newowner:newgroup /path/to/dir;hdfs dfs -chown newowner /path/to/dir;hdfs dfs -chgrp newgroup /path/to/dir;hdfs dfs -chgrp newgroup /path/to/dir。HDFS中,新建文件或目录的权限默认继承自父目录的权限(除非父目录设置了默认ACL)。可通过dfs.permissions参数(hdfs-site.xml)启用/禁用权限检查:
true(默认):启用权限检查,用户需遵守权限规则;false(仅测试环境使用):关闭所有权限检查,任何用户均可随意操作。基础权限模型无法满足复杂场景(如为特定用户单独授权),HDFS通过ACLs实现更细粒度的控制。ACL由多个条目组成,每个条目定义特定用户/组的权限:
user:username:permissions(如user:hadoop:rwx,为hadoop用户添加rwx权限);group:groupname:permissions(如group:dev:r-x,为dev组添加r-x权限);mask::permissions(限制组和其他用户的最大权限,如mask::rwx,则组/其他用户的权限不能超过rwx);other::permissions(如other::r--,其他用户仅有读权限)。default:user:joe:rwx,则joe用户创建的子目录自动继承rwx权限)。hdfs dfs -getfacl /path/to/file_or_dir(输出示例:user::rwx group::r-x other::r-x);hdfs dfs -setfacl -m user:hadoop:rwx /path/to/dir;hdfs dfs -setfacl -m group:dev:r-x /path/to/dir;hdfs dfs -setfacl -x user:hadoop /path/to/dir;hdfs dfs -setfacl -b /path/to/dir;hdfs dfs -setfacl -m default:user:joe:rwx /path/to/dir(为joe用户设置默认rwx权限)。hdfs)拥有完全访问权限,可绕过所有权限检查(如修改任何文件的权限、删除任何文件);dfs.permissions.superusergroup(hdfs-site.xml)定义超级用户组(如hadoop),组内成员均拥有超级用户权限;HDFS权限管理的核心配置参数位于hdfs-site.xml,主要包括:
dfs.permissions.enabled:是否启用权限检查(默认true);dfs.permissions.superusergroup:超级用户组(默认hadoop);dfs.namenode.acls.enabled:是否启用ACLs(默认true);dfs.datanode.acls.enabled:是否启用DataNode端的ACLs(默认true)。