温馨提示×

HDFS权限管理在CentOS中如何实现

小樊
34
2025-12-23 17:46:35
栏目: 智能运维

在 CentOS 上落地 HDFS 权限管理

一 核心概念与前置准备

  • HDFS 采用类 POSIX 权限模型,包含 owner/group/othersr/w/x 权限;支持 ACL 做细粒度授权;可与 Kerberos 集成实现强认证。
  • 建议准备:已部署并可访问的 Hadoop 集群(NameNode/DataNode)、集群各节点统一的 用户/用户组 规划、具备 sudo 权限的运维账号、以及(可选)Kerberos 环境。

二 启用与配置权限检查

  • 修改 core-site.xml,设置新建文件/目录的默认权限掩码(umask),例如 022
<configuration>
  <property>
    <name>fs.permissions.umask-mode</name>
    <value>022</value>
  </property>
</configuration>
  • 修改 hdfs-site.xml,启用权限与 ACL:
<configuration>
  <property>
    <name>dfs.permissions.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>dfs.namenode.acls.enabled</name>
    <value>true</value>
  </property>
</configuration>
  • 如集群使用代理用户(如提交作业的用户代理 hdfs),在 core-site.xml 配置代理规则(示例允许 hdfs 代理任意主机与组,生产请收敛为白名单):
<property>
  <name>hadoop.proxyuser.hdfs.hosts</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.hdfs.groups</name>
  <value>*</value>
</property>
  • 使配置生效:重启 HDFS 服务,并刷新用户到组映射。
# 重启示例(按你的实际服务名调整)
sudo systemctl restart hadoop-hdfs-namenode
sudo systemctl restart hadoop-hdfs-datanode

# 刷新用户-组映射缓存
hdfs dfsadmin -refreshUserToGroupsMappings
  • 验证进程与连通性:
jps                      # 应看到 NameNode、DataNode 等进程
hdfs dfs -ls /           # 基本连通性验证

上述配置分别用于启用权限检查、ACL、默认 umask 与代理用户白名单,并给出重启与验证方式。

三 常用权限操作命令

  • 修改权限与属主/属组(类 Unix 风格):
hdfs dfs -chmod 755 /user/hadoop/data.txt
hdfs dfs -chown hadoop:hadoop /user/hadoop/data.txt
hdfs dfs -chgrp analytics /user/hadoop/data.txt
  • ACL 细粒度授权与查看:
# 为用户 alice 授予 /data 读写执行;-R 递归
hdfs dfs -setfacl -R -m user:alice:rwx /data

# 为组 sales 授予读执行,并保留最小 ACL 项
hdfs dfs -setfacl -m group:sales:r-x /data

# 查看 ACL
hdfs dfs -getfacl /data

# 删除某个 ACL 项
hdfs dfs -setfacl -x user:alice /data

# 删除所有 ACL(回到仅 POSIX 权限)
hdfs dfs -setfacl -b /data

# 设置默认 ACL(对 /data 下新建文件/目录自动继承)
hdfs dfs -setfacl -m default:user:alice:rwx /data
  • 常用要点
    • ACL 必须包含最小项:user::group::other::
    • default ACL 仅对之后在该目录内创建的新对象生效,不会回溯修改既有对象。
    • mask 会过滤命名用户/命名组/未命名组的权限,最终有效权限为“授予权限 & mask”。

四 安全加固与运维要点

  • 启用 Kerberos(强认证,生产推荐):
<!-- core-site.xml -->
<property>
  <name>hadoop.security.authentication</name>
  <value>kerberos</value>
</property>
<property>
  <name>hadoop.security.authorization</name>
  <value>true</value>
</property>

获取票据示例:

kinit hdfs@YOUR.REALM
  • 目录与数据目录权限基线:
    • 对共享目录设置合适的 sticky bit,防止非属主删除他人文件:
      hdfs dfs -chmod 1777 /user
      
    • 保护本地元数据与数据目录(OS 层):
      <!-- hdfs-site.xml -->
      <property>
        <name>dfs.namenode.name.dir.perm</name>
        <value>700</value>
      </property>
      <property>
        <name>dfs.datanode.data.dir.perm</name>
        <value>700</value>
      </property>
      
  • 常见排错
    • 权限不生效时,确认 dfs.permissions.enabled=truedfs.namenode.acls.enabled=true 已启用,并执行 hdfs dfsadmin -refreshUserToGroupsMappings 刷新组映射。
    • 集群处于 安全模式 时,部分元数据变更会被拒绝,先退出安全模式:
      hdfs dfsadmin -safemode leave
      
    • 使用 hdfs dfs -getfacl 复核实际生效的 ACL 与 mask

0