文件ACL针对特定用户指定权限的规则,比UGO规则更灵活
设置ACL权限:setfacl
参数
-b,--remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。
-k,--remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。
-d,--default:设定默认的acl规则。
-m:修改一个ACL
-x:移除一个ACL
示例
1、给lisa用户单独设置对file可读
setfacl -m u:lisa:r file
2、 给staff组删除执行权限
setfacl -x g:staff file
3、从所有组撤销写权限
setfacl -m m::rx file
4、复制一个文件的ACL到另外一个文件
getfacl file1 | setfacl --set-file=- file2
5、复制一个ACL到默认的ACL规则
getfacl --access dir | setfacl -d -M- dir
6、删除所有ACL规则
setfacl -b file
查看ACL权限:getfacl
getfacl file
ACL高级特性
mask:用于临时降低用户和组的权限(设置了ACL的用户和组)
[root@Worker2 test1]# getfacl f1
# file: f1
# owner: root
# group: root
user::rw-
user:hadoop:rw- #effective:---
group::r-- #effective:---
mask::---
other::---
上例中hadoop用户和组有效权限变成了空
default:继承子目录权限
默认情况下,ACL只对当前目录下的文件拥有自定义权限,对其子目录没有,设置default参数可继承其后续创建的子目录权限
注意:1、如果只设置了default继承权限,当前文件夹是无该权限的
2、之前存在的子目录无权限,只对设置默认权限后的子目录有权限
详细示例:
1、root用户创建三级目录
[root@Spark-Worker2 /]# mkdir -p /111/222/333
[root@Spark-Worker2 /]# tree /111
/111
└── 222
└── 333
2、查看权限
[root@Spark-Worker2 /]# getfacl /111
getfacl: Removing leading '/' from absolute path names
# file: 111
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
3、给hadoop用户对/111目录赋予权限
[root@Spark-Worker2 /]# setfacl -m u:hadoop:rwx /111
[root@Spark-Worker2 /]# getfacl /111
getfacl: Removing leading '/' from absolute path names
# file: 111
# owner: root
# group: root
user::rwx
user:hadoop:rwx
group::r-x
mask::rwx
other::r-x
4、 默认情况下,hadoop用户只能在/111文件夹下拥有写权限,其子目录没有写权限
[hadoop@Spark-Worker2 111]$ touch h1
[hadoop@Spark-Worker2 111]$ cd 222
[hadoop@Spark-Worker2 222]$ touch h2
touch: cannot touch ‘h2’: Permission denied
5、给/111/222目录赋予读写执行权限
[root@Spark-Worker2 /]# setfacl -m d:u:hadoop:rwx /111/222
[root@Spark-Worker2 /]# getfacl /111/222
getfacl: Removing leading '/' from absolute path names
# file: 111/222
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:hadoop:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
6、hadoop用户不能在/111/222/内及已存在的333目录内拥有写权限
[hadoop@Spark-Worker2 222]$ touch h2
touch: cannot touch ‘h2’: Permission denied
[hadoop@Spark-Worker2 222]$ cd 333/
[hadoop@Spark-Worker2 333]$ touch h3
touch: cannot touch ‘h3’: Permission denied
7、对于/111/222/内新创建的目录,hadoop拥有写权限
[hadoop@Spark-Worker2 222]$ touch h2
touch: cannot touch ‘h2’: Permission denied
[hadoop@Spark-Worker2 222]$ cd 333/
[hadoop@Spark-Worker2 333]$ touch h3
touch: cannot touch ‘h3’: Permission denied