写点什么

HDFS 杂谈:ACL 访问控制列表

用户头像
罗小龙
关注
发布于: 2021 年 01 月 16 日
HDFS杂谈:ACL访问控制列表

HDFS ACL 介绍

在 HDFS 系统中,对象常规的权限控制模式为“用户+权限”。其中用户主要分为 3 类,分别为 u(对象拥有者)、g(对象拥有者所属组别)、o(除上述两类用户外的其他用户)。每类客户都有 3 种权限,分别为 r(读写)、w(写)、x(执行)。但是,这种权限控制的粒度太粗了,会出现不该有权限的用户具备了权限,而应该有权限的用户却被挡在门外。有没有办法可以更加精细地控制权限呢?从 Hadoop 2 系列开始 HDFS 引入了 ACL(Access Control List)功能,来满足精细化控制权限的需求。

HDFS ACL 功能灵感来源于 Linux ACL,可以在原有的权限控制模式额外对特定的用户或用户组添加权限。在使用 HDFS 系统的 ACL 功能前,必须要先开启该功能,具体为:

1)修改 hdfs-site.xml 的 dfs.namenode.acls.enabled 参数为 true,并重启 HDFS 服务;

2)在 CDH 界面上勾选 HDFS 的配置项”启动访问控制列表”, 并重启 HDFS 服务;

HDFS ACL 相关指令有两个:setfacl 与 getfacl,具体的使用方法可阅读《Hadoop编程实战:HDFS用户Shell详解》。比如为/hdfstest/test.txt 增加 luorl 用户的读写权限,可执行如下命令

可以看到,文件已经赋予了 luorl 用户的读写权限了。

default ACL

上述只是对文件配置 ACL 权限,对目录的话还是用同样的方式吗?实际上,对文件夹配置 ACL 权限时,要在 acl_spec 语句加上 default 关键字,否则会报错。

而且,对目录配置 ACL 权限后,在该目录内创建的对象会继承目录的 ACL 权限。

可以看到 acl_test.txt 的 ACL 权限继续了/hdfstest/目录的 ACL 权限。但是红框内还有两个信息让人注意的,一个是 mask::rw-,一个是 effective:r--。这两个信息分别表达什么含义?

ACL 权限计算

除了用户权限及 ACL 权限,还有一个 mask 权限。mask 权限是用来指定最大的有效权限,从实践可以看出,mask 权限是继承 user 的。而其他用户的权限是自身权限与 mask 权限的相与结果。比如上图的 group 权限,自身权限是 r-x,而 mask 权限是 rw-,两者相与的结果为 r--,所以 goup 权限右边会有提示 effective:r--,说明 group 权限只有 r--。

总结

  • HDFS 除了常规的权限控制模式为“用户+权限”,还有 ACL 功能,可以精细化控制用户权限;

  • 对文件,配置的 ACL 权限只对文件生效;对目录,配置的 ACL 权限会被该目录下的对象继承,而配置目录的 ACL 权限要加上 default 关键字;

  • 决定对象的 ACL 权限要看 mask 权限,而 mask 权限是继承 user 的。其他用户的权限是自身权限与 mask 权限的相与结果。


发布于: 2021 年 01 月 16 日阅读数: 23
用户头像

罗小龙

关注

镜花水月 2020.08.18 加入

数据工作者,目前就职于商业银行数据部门,擅长数据架构、数据建模、数据开发及数据分析

评论

发布
暂无评论
HDFS杂谈:ACL访问控制列表