Ubuntu HDFS权限怎么设置
小樊
44
2026-01-01 12:06:04
Ubuntu 上 HDFS 权限设置实操指南
一 前置检查与身份准备
- 确认 HDFS 权限开关已开启(默认开启):在 hdfs-site.xml 中确保 dfs.permissions.enabled=true;如需使用更细粒度授权,开启 dfs.namenode.acls.enabled=true。
- 统一身份上下文:
- 未启用 Kerberos 时,可通过环境变量指定代理用户:export HADOOP_USER_NAME=目标用户名(仅对当前会话生效)。
- 已启用 Kerberos 时,先获取票据:kinit 业务用户,再执行 HDFS 命令。
- 常用查看命令:hdfs dfs -ls /path、hdfs dfs -getfacl /path。
二 常用 HDFS 权限命令
- 修改权限:hdfs dfs -chmod [-R] 755 /path(八进制或符号模式,如 u=rwx,g=rx,o=rx)。
- 修改属主/属组:hdfs dfs -chown [-R] owner:group /path;仅超级用户可更改属主。
- 修改属组:hdfs dfs -chgrp [-R] group /path。
- 递归操作:在目录上批量调整时加上 -R。
- 设置默认权限掩码:在 core-site.xml 配置 fs.permissions.umask-mode(如 022 或符号 u=rwx,g=rwx,o=),控制新建文件/目录的默认权限。
- 设置 ACL(细粒度授权):
- 为用户/组赋权:hdfs dfs -setfacl -m user:alice:rwx /data
- 为默认 ACL(影响后续在该目录下新建的对象):hdfs dfs -setfacl -m d:user:bob:rw- /data
- 查看 ACL:hdfs dfs -getfacl /data
- 典型目录建议:将 /user 设为 1777(含 sticky 位,防止非属主删除他人文件),历史作业目录如 /mr-history、/mr-history/tmp、/mr-history/done 常为 777,/user/mapred 常为 755。
三 常见场景与命令示例
- 场景 A:新建业务目录并授权给某用户/组
- 创建目录:hdfs dfs -mkdir -p /data/warehouse
- 赋权给用户:hdfs dfs -chown alice:data /data/warehouse
- 设置权限:hdfs dfs -chmod 750 /data/warehouse(所有者 rwx,组 rx,其他无)
- 需要跨组访问时增加 ACL:hdfs dfs -setfacl -m group:analyst:r-x /data/warehouse
- 场景 B:Java/Spark 作业报“权限不足”
- 未启用 Kerberos:在提交环境设置 export HADOOP_USER_NAME=目标用户(或代码中 System.setProperty(“HADOOP_USER_NAME”, “目标用户”))。
- 启用 Kerberos:先 kinit 业务用户 再提交作业。
- 场景 C:批量修复历史目录权限
- 递归授权:hdfs dfs -chown -R hdfs:hdfs /user/history
- 统一权限:hdfs dfs -chmod -R 755 /user/history
- 场景 D:调整新建文件默认权限
- 在 core-site.xml 设置 fs.permissions.umask-mode=027(示例:文件默认 640、目录 750),保存并重启相关实例生效。
四 安全与运维注意事项
- 不要滥用 777;临时目录可用 1777(sticky),业务目录遵循“最小权限”原则。
- 启用 Kerberos 后,所有操作需有效票据;权限校验以 Kerberos 主体为准。
- 使用 ACL 做细粒度授权,并定期审计:hdfs dfs -getfacl 查看,必要时开启审计日志。
- 修改 fs.permissions.umask-mode 后需重启相关服务/实例使其生效。
- 仅超级用户可更改属主;普通用户只能调整自己拥有对象的权限/ACL。
- 避免用本地文件系统命令(如 chmod/chown)直接修改 HDFS 路径,应使用 hdfs dfs 前缀命令。