简介
Hadoop从2.4.0版本开始支持hdfs的ACL
ACL(Access Control Lists)
基本命令操作:
hdfs dfs -getfacl [-R] 获取目录和文件的ACL 信息
hdfs dfs -setfacl [-R] [-b |-k -m |-x ] |[--set ] 设置文件和目录的ACL信息
hdfs dfs -ls 当ls的权限位输出以+结束时,那么该文件或目录正在启用一个ACL。
配置信息
机制和测试
hdfs 默认是开启文件访问权限的,按照rwx 来进行判断是否有读写执行权限。然后根据用户拥有者, 同组用户, 非同组用户 来进行权限管理
我们可以通过bash -c users 和 bash -c groups 获取用户 和 组
(1) 创建文件
echo "hell" > 1.txt
hadoop fs -mkdir /acl; hadoop fs -put 1.txt /acl
(2) 更改用户组 和 权限
创建文件和目录的时候默认组为supergroup, 文件夹的权限是755 ,文件的权限是644.
hadoop fs -chmod -R 750 /acl
hadoop fs -chown -R bfd_hz:bfd_hz /acl
(3) 用户拥有者,同组用户, 非同组用户测试。
用户和组的创建省略, 测试的过程中三个用户 bfd_hz baseline wenting , bfd_hz 和 wenting 是同组用户,
baseline 单独一个组, 文件的由bfd_hz 创建,权限如下:
(4) ACL让非同组的用户也能访问此文件
注意点:用户名和组 要和 hadoop 上面的组对应, 比如默认创建的文件组是supergroup,
如果不设置成bfd_hz, wenting此时操作文件也不能执行,user -c groups 是bfd_hz, 和 supergroup不相等。 此时就导致不属于同组用户
关于一个文件的组关系:如果根目录,没有继承来源,默认supergroup, 如果是子目录,继承父目录的组
其他话题-->hive 中创建表的时候权限和组问题:https://cwiki.apache.org/confluence/display/Hive/Permission+Inheritance+in+Hive
参考资料:https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsPermissionsGuide.html