概述
setfacl
命令可以更加精确的控制文件权限的分配,比如让某一个用户对某一个文件具有某种权限。setfacl
的全称是 set file access control list
,即”设置文件访问控制列表“。
chmod
命令把文件权限分为所有者(u
)、所属组(g
)、其他人(o
)三个组,而 setfacl
可以对每一个文件或目录设置更为精确的文件权限。如让某个用户对某一个文件具有具体某种权限,这种具体权限设置称之为 ACL(Access Control List),可以针对单一用户、单一文件、单一目录进行读、写、执行的权限控制。
适用于一些特殊情况,如某一个文件,不让单一的某个用户访问。
语法
该命令的语法如下:
setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
该命令支持的选项有:
选项 | 说明 |
---|---|
-m, --modify=acl | 更改文件的访问控制列表 |
-M, --modify-file=file | 从文件读取访问控制列表条目更改 |
-x, --remove=acl | 根据文件中访问控制列表移除条目 |
-X, --remove-file=file | 从文件读取访问控制列表条目并删除 |
-b, --remove-all | 删除所有扩展访问控制列表条目 |
-k, --remove-default | 移除默认访问控制列表 |
–set=acl | 设定替换当前的文件访问控制列表 |
–set-file=file | 从文件中读取访问控制列表条目设定 |
–mask | 重新计算有效权限掩码 |
-n, --no-mask | 不重新计算有效权限掩码 |
-d, --default | 应用到默认访问控制列表的操作 |
-R, --recursive | 递归操作子目录 |
-L, --logical | 依照系统逻辑,跟随符号链接 |
-P, --physical | 依照自然逻辑,不跟随符号链接 |
–restore=file | 恢复访问控制列表,和“getfacl -R”作用相反 |
–test | 测试模式,并不真正修改访问控制列表属性 |
-v, --version | 显示版本并退出 |
-h, --help | 显示本帮助信息 |
其中 acl
规则如下:
[d[efault]:] [u[ser]:]uid [:perms] 指定用户的权限,文件所有者的权限(如果uid没有指定)。
[d[efault]:] g[roup]:gid [:perms] 指定群组的权限,文件所有群组的权限(如果gid未指定)
[d[efault]:] m[ask][:] [:perms] 有效权限掩码
[d[efault]:] o[ther] [:perms] 其他的权限
各字段说明如下:
- 对于
u
、g
、m
、o
都是固定字。 - 对于
uid
可以是数字表示用户 ID,也可以是用户名。 - 对于
gid
可以是数字表示组 ID,也可以是组名。 - 对于
perms
域是一个代表各种权限的字母的组合:读(r
)、写(w
)和执行(x
),执行只适合目录和一些可执行的文件。pers
域也可设置为八进制格式。
使用
给某个用户添加某个文件的某个权限
如果我们要么要像某个用户添加某个文件的权限,需要使用 -m
选项。命令格式如下:
# 语法
setfacl -m u:用户名或ID:权限 文件名
# 示例,给用户 zhangsan 向 test.txt 文件添加读和执行的权限的 acl 规则,然后 zhangsan 用户对该文件没有写权限不能进行修改
setfacl -m u:zhangsan:rx test.txt
如果是组或其他用户或 mask,修改的语法也类似,只是把
u:
改成g:
或o:
或m:
。如果是多条 ACL 规则,则它们之间通过逗号(,
)进行分隔。
取消 ACL 权限
如果要取消在某个文件上的 ACL 权限,需要使用 -x
选项。命令格式如下:
#语法
setfacl -x ACL规则 文件名
# 示例,即取消在文件 test.txt 上关于用户 zhangsan 的 ACL 权限
setfacl -x u:zhangsan test.txt