Setfacl设置文件访问控制列表
1)目录下文件的权限继承
2)目录的权限传递
3)单独文件的权限传递
4)Acl权限的移除
Setfacl参数详解
linux中用setfacl设置文件或目录的acl (权限可以使用字符或者数字)
在设置了分区支持ACL功能之后,就可以使用setfacl命令让文件或目录使用ACL功能配置更精细的权限
setfacl [-bkdR] [{-m|-x}]<acl规则> 文件|目录
可用getfacl查看权限 -d显示默认权限-R显示目录及其子目录和文件的acl
-m :更改文件或者目录的acl规则
-x :删除文件或者目录指定的acl规则
-b :删除文件或者目录所有的acl规则
-k :删除文件或者目录默认的acl规则
-d :指定文件或者目录默认的acl规则
--test :测试模式,不会改变任何文件或者目录的acl规则。操作后的acl规格将被显示
-R :递归处理,将指定目录下的所有文件及子目录一并处理
特别提示
若要使用cp命令复制文件且保留acl,则必须使用“-p”选项,mv则会默认保留acl
配置用户组默认权限与用户默认权限相同,选项u:改为g:
特别提示.
英文全称:Set file access control list
[root@localhost /]#mkdir ceshi
[root@localhost /]# ll ceshi/
total 16
-rw-r--r-- 1 root root 3 Apr 16 03:44 c1
-rw-r--r-- 1 root root 3 Apr 16 03:44 c2
[root@localhost /]# setfacl -R -m u:mingming:6 nihao/
[root@localhost /]# setfacl -m u:mingming:6 ceshi/ 因为这是一个目录,而我设置对他设置权限的时候,并没有采用递归的方式,所以里面的两个文件权限属性不受影响
[root@localhost /]# ll ceshi/
total 16
-rw-r--r-- 1 root root 3 Apr 1603:44 c1
-rw-r--r-- 1 root root 3 Apr 1603:44 c2
[root@localhost /]# setfacl -Rm u:mingming:6 ceshi/ 现在我又增加了-R选项,再次查看的时候,发现里面原有的两个文件权限属性信息已成功改变
[root@localhost /]# ll ceshi/
total 16
-rw-rw-r--+ 1 root root 3 Apr 16 03:44 c1
-rw-rw-r--+ 1 root root 3 Apr 16 03:44 c2
[root@localhost /]# echo "c3" >ceshi/c3 现在,我在该目录下创建文件c3,然后查看权限,发现c3的权限还是644,并没有受该目录权限属性的影响,为何?
[root@localhost /]# ll ceshi/
total 24
-rw-rw-r--+ 1 root root 3 Apr 16 03:44 c1
-rw-rw-r--+ 1 root root 3 Apr 16 03:44 c2
-rw-r--r-- 1 root root 3 Apr16 03:49 c3
目录下文件的权限继承
[root@localhost/]# setfacl -dm u:mingming:6 ceshi/ -d:default,对目录有效,使用此参数设置权限后,再在该目录下创建的文件,会默认继承该目录的权限,而我在上一步
[root@localhost/]# echo "c4" > ceshi/c4 创建的文件c3并不受影响,要想文件c3和目录权限保持一致,可以使用setfacl -Rmu:mingming:6 ceshi/
[root@localhost/]# ll ceshi/ 命令。 (-d:默认权限继承)
total 32
-rw-rw-r--+ 1root root 3 Apr 16 03:44 c1
-rw-rw-r--+ 1root root 3 Apr 16 03:44 c2
-rw-r--r-- 1 root root 3 Apr 16 03:49 c3
-rw-rw-r--+ 1root root 3 Apr 16 03:52 c4
目录的权限传递
[root@localhost/]# mkdir he
[root@localhost/]# echo "a1" > he/a1
[root@localhost/]# echo "a2" > he/a2
[root@localhost/]# getfacl --access ceshi/ | setfacl -d -M- he/ ===>我本想在此命令行使用-R选项,想让该目录在设置权限之前就有的文件也受影响,但发现不行
[root@localhost/]# ll he/ 此时,我们发现,若在传递权限之前,该目录已有文件存在,则不受传递权限命令的影响,只会对权限设置成功之后新创建的文件有影响如例五所示
total 16
-rw-r--r-- 1 root root 3 Apr 16 03:53 a1
-rw-r--r-- 1 root root 3 Apr 16 03:53 a2
例五:
[root@localhost/]# echo "a3" > he/a3
[root@localhost/]# echo "a5" > he/a5
[root@localhost/]# ll he/
total 28
-rw-r--r-- 1 root root 3 Apr 16 03:53 a1
-rw-r--r-- 1 root root 3 Apr 16 03:53 a2
-rw-rw-r--+ 1root root 11 Apr 16 03:57 a3
-rw-rw-r--+ 1root root 0 Apr 16 04:24 a5
单独文件的权限传递
[root@localhostmingming]# getfacl ceshi/ming | setfacl --set-file=- sec/m1
[root@localhostmingming]# ll sec/m1
-rw-rw-r--+ 1root root 0 Apr 16 03:27 sec/m1
[root@localhostmingming]# getfacl sec/m1 getfacl获取文件/目录的权限属性信息
# file: sec/m1
# owner: root
# group: root
user::rw-
user:mingming:rw-
group::r--
mask::rw-
other::r--
[root@localhostmingming]# getfacl ceshi/ming
# file:ceshi/ming
# owner: root
# group: root
user::rw-
user:mingming:rw-
group::r--
mask::rw-
other::r—
我们发现两个文件的权限已保持一致,至此单独文件的权限传递成功。
Acl权限的移除
法1:(非递归移除)
[root@localhost/]# setfacl -x he/ -x选项看来不行
setfacl: Option-x: Invalid argument near character 1
[root@localhost/]# setfacl -b he/ -b选项可用来移除acl权限;不过需注意下面的问题。
[root@localhost/]# ll he/ 虽然刚刚我们移除了acl权限,但是我们发现该目录下原有文件的权限,并未发生变化,
total 28
-rw-r--r-- 1 root root 3 Apr 16 03:53 a1
-rw-r--r-- 1 root root 3 Apr 16 03:53 a2
-rw-rw-r--+ 1root root 11 Apr 16 03:57 a3
-rw-rw-r--+ 1root root 0 Apr 16 04:24 a5
[root@localhost/]# touch he/a7 经过上面的操作,现在我再创建新的文件a7,看看该文件的权限属性信息有何变化
[root@localhost/]# ll he/
total 32
-rw-r--r-- 1 root root 3 Apr 16 03:53 a1
-rw-r--r-- 1 root root 3 Apr 16 03:53 a2
-rw-rw-r--+ 1root root 11 Apr 16 03:57 a3
-rw-rw-r--+ 1root root 0 Apr 16 04:24 a5
-rw-r--r-- 1 root root 0 Apr 16 04:40 a7 现在我们发现,刚刚新创建的文件已没有被设置acl权限,而是默认的644权限,
法2:(递归移除acl权限)
[root@localhostmingming]# setfacl -bR ceshi/ 递归移除acl权限,在此之前,该目录下原有文件的acl权限也会被移除
[root@localhost mingming]# ll ceshi/
total 16
-rw-r--r-- 1 root root 16 Apr 16 03:00 ming
-rw-r--r-- 1 root root 3 Apr 16 03:00 u1
我们发现该目录原有的两个文件已恢复默认,递归移除acl权限成功。
[root@localhost mingming]# getfacl ceshi/u1
# file: ceshi/u1
# owner: root
# group: root
user::rw-
user:mingming:---
group::r--
mask::r--
other::r—
[root@localhost mingming]# getfacl ceshi/ming
# file: ceshi/ming
# owner: root
# group: root
user::rw-
user:mingming:rw-
group::r--
mask::rw-
other::r--
切换成用户mingming
su – mingming
验证刚刚对目录下的两个文件设置的权限是否生效
测试发现,对ming有写入权限,对u1无写入权限