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 权限的相与结果。
版权声明: 本文为 InfoQ 作者【罗小龙】的原创文章。
原文链接:【http://xie.infoq.cn/article/3ac08693ac54ae8749a0b5caa】。文章转载请联系作者。
评论