Hadoop从2.4.0版本号開始支持hdfs的ACL,在CDH5.0其中也集成了该特性,以下对其进行一些測试:
unnamed user (file owner) |
文件的拥有者 |
unnamed group (file group) |
文件的所属组 |
named user |
除了文件的拥有者和拥有组之外,的其他用户 |
named group |
除了文件的拥有者和拥有组之外,的其他用户 |
mask |
权限掩码。用于过滤named user和named group的权限 |
一、启用ACL:
<property> <name>dfs.permissions.enabled</name> <value>true</value> </property> <property> <name>dfs.namenode.acls.enabled</name> <value>true</value> </property>
二、測试ACL:
①
[hadoop@master ~]$ groups hadoop
创建文件夹并上传文件:
[hadoop@master ~]$ hadoop fs -mkdir /input/acl [hadoop@master hadoop]$ hadoop fs -put conf/yarn-site.xml /input/acl [hadoop@master hadoop]$ hadoop fs -ls /input/acl Found 1 items -rw-r--r-- 3 hadoop supergroup 5919 2014-04-25 15:08 /input/acl/yarn-site.xml [hadoop@master ~]$ hadoop fs -getfacl /input/acl # file: /input/acl # owner: hadoop # group: supergroup user::rwx group::r-x other::r-x
同一组的成员有读权限。没有写权限:
[mapred@master ~]$ groups hadoop [mapred@master ~]$ hadoop fs -ls /input/acl Found 1 items -rw-r--r-- 3 hadoop supergroup 5919 2014-04-25 15:08 /input/acl/yarn-site.xml [mapred@master hadoop]$ hadoop fs -put conf/capacity-scheduler.xml /input/acl put: Permission denied: user=mapred, access=WRITE, inode="/input/acl":hadoop:supergroup:drwxr-xr-x
设置mapred用户仅仅读:
[hadoop@master ~]$ hdfs dfs -setfacl -m user:mapred:r-- /input/acl [hadoop@master ~]$ hdfs dfs -getfacl /input/acl # file: /input/acl # owner: hadoop # group: supergroup user::rwx user:mapred:r-- group::r-x mask::r-x other::r-x
运行权限被拒绝:
[hadoop@master ~]$ logout [root@master ~]# su - mapred [mapred@master ~]$ hadoop fs -ls /input/acl ls: Permission denied: user=mapred, access=READ_EXECUTE, inode="/input/acl":hadoop:supergroup:drwxr-xr-x:user:mapred:r--,group::r-x
移除acl:
[hadoop@master ~]$ hdfs dfs -setfacl -x user:mapred /input/acl [hadoop@master ~]$ hdfs dfs -getfacl /input/acl # file: /input/acl # owner: hadoop # group: supergroup user::rwx group::r-x mask::r-x other::r-x
又一次拥有运行权限。由于mapred是hadoop用户组中的:
[mapred@master ~]$ hadoop fs -ls /input/acl/yarn-site.xml Found 1 items -rw-r--r-- 3 hadoop supergroup 5919 2014-04-25 15:08 /input/acl/yarn-site.xml
②
定义在owner、other里的权限一直都是有效的,其他权限可能用效或者被隐蔽。
named user与named group的值是否生效。还要看其值与mask的“与”值。即mask也要有该权限,才干生效。
mask是用于过滤named user与named group的权限的。能够通过chmod改变。
如:在给同组的其他用户。其他组的用户或组加入acl时,假设给的权限比当前mask大。则mask会随之更新:
[hadoop@master ~]$ hdfs dfs -getfacl /input/acl 【初始权限】 # file: /input/acl # owner: hadoop # group: supergroup user::rwx group::r-x mask::r-x other::r-x [hadoop@master ~]$ hdfs dfs -setfacl -m user:mapred:rwx /input/acl [hadoop@master ~]$ hdfs dfs -getfacl /input/acl 【mapred用户拥有rwx权限,但mask为r-x,则mask自己主动改为rwx】 # file: /input/acl # owner: hadoop # group: supergroup user::rwx user:mapred:rwx group::r-x mask::rwx other::r-x
但所属组的用户权限不受影响:
[hadoop@master ~]$ hadoop fs -chmod g-x /input/acl 【取消同一用户组的可运行权限。并更新mask的值】 [hadoop@master ~]$ hdfs dfs -getfacl /input/acl # file: /input/acl # owner: hadoop # group: supergroup user::rwx group::r-x #effective:r-- group:apache:rwx #effective:rw- mask::rw- other::r-x [hadoop@master ~]$ logout [root@master ~]# su - mapred [mapred@master ~]$ hadoop fs -ls /input/acl 【上一步取消同一用户组的可运行权限,但没有生效,由于mapred和hadoop属于同一组】 Found 1 items -rw-r--r-- 3 hadoop supergroup 5919 2014-04-25 15:08 /input/acl/yarn-site.xml