Linux常用命令-setfacl

命令

setfacl

描述

set file access control lists
设置文件ACL

用法

1
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Options:
-m, --modify=acl 修改当前ACL
-M, --modify-file=file 从文件中读取ACL进行修改
-x, --remove=acl 删除指定ACL
-X, --remove-file=file 从文件中读取ACL进行删除
-b, --remove-all 删除所有ACL
-k, --remove-default 删除所有默认ACL
--set=acl 重新设置ACL,将覆盖之前的ACL
--set-file=file 从文件中读取ACL重新设置ACL
--mask 重新计算有效的掩码
-n, --no-mask 不重新计算有效的掩码
-d, --default 操作应用到默认ACL
-R, --recursive 递归到子目录
-L, --logical 跟随链接跳转
-P, --physical 不跟随链接跳转
--restore=file 从文件中恢复ACL
--test 测试模式,不修改ACL

注意

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
$ touch file
$ getfacl file
# file: file
# owner: root
# group: root
user::rw-
group::r--
other::r--
# 添加用户ACL
$ setfacl -m u:usera:rw file
$ getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:usera:rw-
group::r--
mask::rw-
other::r--
# 添加用户组ACL
$ setfacl -m g:ftp:rw file
$ getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:usera:rw-
group::r--
group:ftp:rw-
mask::rw-
other::r--
# 删除ACL
$ setfacl -x u:usera file
# 重新设置当前文件的ACL
$ chacl -l file
file [u::rw-,u:usera:rw-,g::r--,g:ftp:rw-,m::rw-,o::r--]
$ setfacl --set u::rw-,u:usera:rw-,g::rw-,m::rw-,o::r-- file
$ getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:usera:rw-
group::rw-
mask::rw-
other::r--
# 设置掩码ACL,最大权限为只读r
$ setfacl -m m:r file
# 设置目录ACL
$ mkdir dir
$ setfacl -m d:u:usera:rw dir
# 目录下的文件和子目录自动继承目录的ACL
$ touch dir/aa
$ getfacl dir/aa
# file: dir/aa
# owner: root
# group: root
user::rw-
user:usera:rw-
group::r-x #effective:r--
mask::rw-
other::r--
$ mkdir dir/dir1
$ getfacl dir/dir1/
# file: dir/dir1/
# owner: root
# group: root
user::rwx
user:usera:rw-
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:usera:rw-
default:group::r-x
default:mask::rwx
default:other::r-x

# 清空所有ACL
$ setfacl -b file