在 Linux 上配置 HDFS 授权(Authorization),通常包含 权限模型配置 和 鉴权方式(如 Kerberos / ACL / Ranger)。下面按常见场景从易到难说明。
在 hdfs-site.xml 中确认:
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
默认就是 true,如果为 false,HDFS 不做任何权限控制。
HDFS 权限模型类似 Linux:
确保 Linux 用户存在:
useradd hadoopuser
groupadd hadoopgroup
usermod -aG hadoopgroup hadoopuser
HDFS 会直接使用 Linux 用户名和组。
hdfs dfs -mkdir /data
hdfs dfs -chown hadoopuser:hadoopgroup /data
hdfs dfs -chmod 750 /data
权限说明:
su hadoopuser
hdfs dfs -put file.txt /data
hdfs-site.xml:
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
重启 NameNode。
hdfs dfs -setfacl -m user:alice:rwx /data
hdfs dfs -setfacl -m group:team:r-x /data
查看:
hdfs dfs -getfacl /data
默认超级用户是启动 NameNode 的用户(如 hdfs)。
可配置额外超级用户:
<property>
<name>dfs.permissions.superusergroup</name>
<value>supergroup</value>
</property>
将用户加入该组即可拥有管理员权限。
core-site.xml:
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
hdfs-site.xml:
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.kerberos.principal</name>
<value>nn/_HOST@REALM.COM</value>
</property>
用户访问:
kinit user@REALM.COM
hdfs dfs -ls /
Ranger 可集中管理 HDFS 授权:
一般流程:
Permission denied: user=xxx, access=WRITE, inode="/data"
检查:
hdfs dfs -ls /
hdfs dfs -getfacl /data
id xxx
HDFS 使用的是 客户端 Linux 用户,不是远程服务器用户。
| 场景 | 推荐方式 |
|---|---|
| 测试环境 | 基础权限 |
| 多团队 | ACL |
| 生产环境 | Kerberos + Ranger |
| 简单隔离 | Linux 用户 + chmod |
如果你能说明:
我可以给你一份可直接用的配置示例。