学习 HDFS(七):权限

权限模型

HDFS 文件和目录权限模型的实现与 POSIX 模型相似,文件和目录都关联到一个 owner 和一个 group。

执行命令

hadoop fs -ls /  

显示:

drwxr-x---+  - hdfs supergroup          0 2019-01-15 09:00 /data  

第一位 d 说明 /data 是一个目录;

第二至四位 rwx 说明 hdfs 用户有 /data 目录的读(R)、写(W)、执行(X)权限;

第五至七位 r-x 说明 supergroup 组用户有 /data 目录的读(R)和执行(X)权限;

第八至十位 --- 说明其它人没有任何权限。

修改文件或目录 owner,执行命令:

hadoop fs -chown -R dyingbleed /data  
hadoop fs -chown dyingbleed /data/users.csv  

修改文件或目录 group,执行命令:

hadoop fs -chgrp -R dev /data  
hadoop fs -chgrp dev /data/users.csv  

修改文件或目录权限,执行命令:

hadoop fs -chmod -R rwxrwxr-x /data  
hadoop fs -chmod rwxrwxr-x /data/users.csv  

用户和组

HDFS 支持两种身份认证方式:

  • simple 弱认证,默认为客户端当前用户,即 whoami
  • kerberos 强认证,更多关于 Kerberos

通过身份认证之后,如何知晓用户所属的组呢?HDFS 提供了三种组映射机制:

  • 基于 JNI 的组映射: org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback
  • 基于 Shell 的组映射:org.apache.hadoop.security.ShellBasedUnixGroupsMapping
  • 基于 LDAP 的组映射:org.apache.hadoop.security.LdapGroupsMapping

其中,基于 Shell 的组映射的实现,在 NameNode 所在节点,执行命令:

bash -c id -gn <用户名>; id -Gn <用户名>  

查看用户所属的组,执行命令:

hadoop groups <用户名>  

以基于 Shell 的组映射为例,修改用户所属组,在 NameNode 所在节点,执行命令:

usermod -g <组名>  
usermod -a -G <组名>  

刷新组映射,执行命令:

hadoop dfsadmin -refreshUserToGroupsMappings  

ACL

编辑配置文件 hfds-site.xml 文件:

<configuration>  
  <name>dfs.namenode.acls.enabled</name>
  <value>true</value>
</configuration>  

重启集群使得配置生效。

获取文件和目录 ACL,执行命令:

hadoop fs -getfacl /data  

显示:

# file: /data
# owner: hdfs
# group: supergroup
user::rwx  
group::r-x  
mask::rwx  
other::---  

为 dev 组增加读、写、执行权限,执行命令:

hadoop fs -setfacl -R -m group:dev:rwx /data  

移除 dev 组权限,执行命令:

hadoop fs -setfacl -R -x group:dev /data  

参考