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无写入权限