HDFS采用与Linux类似的用户-组-其他三级权限模型,包含三种基本权限:
权限通过hdfs dfs -ls命令查看,格式为-rwxr-xr--(所有者:读写执行;组:读执行;其他:读)。常用权限设置命令:
hdfs dfs -chmod 755 /path/to/file(所有者7=rwx,组5=r-x,其他5=r-x);hdfs dfs -chown hadoop:hadoop-group /path/to/file(用户:组);hdfs dfs -chgrp hadoop-group /path/to/file。要启用HDFS权限管理,需修改hdfs-site.xml配置文件,确保以下参数设置为true:
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.acls.enabled</name>
<value>true</value>
</property>
修改后需重启HDFS集群使配置生效。
HDFS的用户和组需与Linux系统用户同步,常用操作如下:
sudo groupadd hadoopgroup # 创建组
sudo useradd -g hadoopgroup hadoopuser # 创建用户并加入组
hdfs dfs -mkdir -p /user/hadoopuser # 创建用户根目录
hdfs dfs -chown hadoopuser:hadoopgroup /user/hadoopuser # 设置所有者
usermod命令(Linux系统层),并同步更新HDFS文件所有者。ACL(访问控制列表)允许为特定用户或组设置额外权限,突破基本权限的限制。常用命令:
hdfs dfs -setfacl -m user:hadoopuser:rwx /path/to/file # 用户hadoopuser有rwx
hdfs dfs -setfacl -m group:hadoopgroup:r-x /path/to/dir # 组hadoopgroup有r-x
hdfs dfs -getfacl /path/to/file(显示当前ACL规则);hdfs dfs -setfacl -x user:hadoopuser /path/to/file(移除指定用户的ACL规则);hdfs dfs -setfacl -R -m group:devgroup:rwx /path/to/dir(递归应用到目录及子项)。HDFS支持权限继承,子目录和文件会自动继承父目录的组权限。通过设置父目录的setgid位,可强制子项继承父目录的组:
hdfs dfs -chmod g+s /path/to/parent_dir # 设置setgid位
hdfs dfs -ls /path/to/parent_dir # 查看时组权限旁会显示"s"(如drwxr-sr-x)
此后,在父目录下创建的新文件或目录,会自动继承父目录的组。
在高度安全的环境中,建议集成Kerberos认证,实现强身份验证。关键步骤:
/etc/krb5.conf文件,指定KDC服务器和默认领域;kinit命令获取临时票据(有效期默认10小时):kinit hadoopuser@REALM # 替换为实际用户名和领域
core-site.xml中启用Kerberos认证:<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
配置后,用户需先通过kinit认证才能访问HDFS。通过审计日志可跟踪所有对HDFS的访问和修改操作,便于排查安全问题。配置core-site.xml开启审计日志:
<property>
<name>hadoop.security.audit.log.enabled</name>
<value>true</value>
</property>
<property>
<name>hadoop.security.audit.log.path</name>
<value>/var/log/hadoop-hdfs/audit.log</value> # 日志路径
</property>
<property>
<name>hadoop.security.audit.log.maxsize</name>
<value>10485760</value> # 单个日志文件最大大小(10MB)
</property>
<property>
<name>hadoop.security.audit.log.rotation.period</name>
<value>86400</value> # 日志轮转周期(秒,1天)
</property>
日志会记录用户操作(如read、write、delete)、操作时间、IP地址等信息。