一、基础权限准备:创建专用用户与组
在Linux系统中,为Hadoop创建专用的用户和组是权限管理的核心基础,避免使用root用户直接操作,提升安全性。
groupadd命令创建名为hadoop的用户组,用于统一管理Hadoop相关用户。sudo groupadd hadoop
useradd命令创建hadoop用户(-r表示系统用户,-g指定主组为hadoop),并设置密码。sudo useradd -r -g hadoop hadoop
sudo passwd hadoop
ubuntu)使用Hadoop,需将其添加到hadoop组(-aG表示追加组,避免移除原有组)。sudo usermod -aG hadoop ubuntu
# 注销并重新登录使组变更生效
二、Hadoop目录权限配置
Hadoop的安装目录、配置文件目录及数据目录需设置正确权限,确保hadoop用户拥有所有权,避免启动或运行时报“Permission denied”错误。
/opt/hadoop,使用chown将所有者设为hadoop:hadoop,chmod 755允许所有者读写执行,其他用户仅读执行。sudo mkdir -p /opt/hadoop
sudo chown -R hadoop:hadoop /opt/hadoop
sudo chmod -R 755 /opt/hadoop
core-site.xml、hdfs-site.xml)需限制为hadoop用户专属读写,防止其他用户篡改。sudo chown hadoop:hadoop /opt/hadoop/etc/hadoop/*
sudo chmod 644 /opt/hadoop/etc/hadoop/*
/var/lib/hadoop、HDFS数据目录)需归属hadoop用户,确保数据读写权限。sudo mkdir -p /var/lib/hadoop
sudo chown -R hadoop:hadoop /var/lib/hadoop
sudo chmod -R 755 /var/lib/hadoop
/var/log/hadoop)需允许hadoop用户写入,便于排查问题。sudo mkdir -p /var/log/hadoop
sudo chown -R hadoop:hadoop /var/log/hadoop
sudo chmod -R 755 /var/log/hadoop
三、HDFS权限精细化管理
HDFS作为Hadoop的核心分布式文件系统,其权限模型类似Linux,但需通过hdfs dfs命令管理,支持标准权限(读、写、执行)及ACL(访问控制列表)。
-ls命令查看目录/文件的权限、所有者及组。hdfs dfs -ls /
输出示例:drwxr-xr-x - hadoop supergroup 0 2025-11-01 10:00 /user(drwxr-xr-x表示目录权限,hadoop为所有者,supergroup为组)。-chmod命令设置权限(格式同Linux:755=所有者读写执行+组及其他用户读执行,700=所有者独占权限)。hdfs dfs -chmod 755 /user/hadoop # 设置用户目录权限
hdfs dfs -chmod 644 /user/hadoop/test.txt # 设置文件权限
-chown修改所有者,-chgrp修改组(需HDFS超级用户权限)。sudo -u hdfs hdfs dfs -chown hadoop:hadoop /user/ubuntu # 将/user/ubuntu目录归属给ubuntu用户
-R参数。hdfs dfs -chmod -R 755 /user/hadoop/data # 递归设置data目录权限
四、HDFS ACL(访问控制列表)配置
当标准权限无法满足细粒度需求(如允许特定用户访问某目录)时,可使用ACL扩展权限控制。
hdfs-site.xml中添加以下配置,重启HDFS使生效。<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.acls.enabled</name>
<value>true</value>
</property>
-setfacl命令添加用户/组的权限(如允许ubuntu用户对/user/test目录有读写执行权限)。sudo -u hdfs hdfs dfs -setfacl -m user:ubuntu:rwx /user/test
-getfacl命令查看目录的ACL详情。hdfs dfs -getfacl /user/test
-setfacl -x删除指定规则(如删除ubuntu用户的权限)。sudo -u hdfs hdfs dfs -setfacl -x user:ubuntu /user/test
五、Kerberos认证(可选,增强安全性)
若需更高级别的安全控制(如防止未授权访问),可启用Kerberos认证,强制用户通过票据访问Hadoop服务。
core-site.xml中启用Kerberos认证,在hdfs-site.xml中启用权限检查。<!-- core-site.xml -->
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
<!-- hdfs-site.xml -->
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
kinit命令获取票据(需提前配置KDC服务器)。kinit hadoop@EXAMPLE.COM # 替换为实际用户名和域名
klist命令查看当前票据信息。klist
六、常见问题排查
hadoop,权限设置为755;若使用start-all.sh,需用sudo -u hdfs或当前用户在hadoop组中。hdfs dfs -chown修改目录所有者为用户所属组(如hadoop),或通过-chmod增加权限(如755)。/opt/hadoop/etc/hadoop)的所有者设为hadoop,权限设为644,防止其他用户修改。