Linux setfacl命令详解

Linux setfacl命令教程

Linux 中的 setfacl 命令用于设置文件访问控制列表。setfacl命令 是用来在命令行里设置 ACL(访问控制列表)。在命令行里,一系列的命令跟随以一系列的文件名。

Linux setfacl命令详解

功能

用于设置文件访问控制列表。

语法

setfacl [option] ACL file

参数

参数 描述
options setfacl 命令使用的参数。
ACL ACL 访问控制权限。
files 需要变更权限的文件或目录。

setfacl命令常用参数

选项 含义
-m 参数 设定 ACL 权限。如果是给予用户 ACL 权限,参数则使用 “u:用户名:权限” 的格式,例如 setfacl -m u:st:rx /project 表示设定 st 用户对 project 目录具有 rx 权限;如果是给予组 ACL 权限,参数则使用 “g:组名:权限” 格式,例如 setfacl -m g:tgroup:rx /project 表示设定群组 tgroup 对 project 目录具有 rx 权限。
-x 参数 删除指定用户(参数使用 u:用户名)或群组(参数使用 g:群组名)的 ACL 权限,例如 setfacl -x u:st /project 表示删除 st 用户对 project 目录的 ACL 权限。
-b,–remove-all 删除所有扩展的 acl 规则,基本的acl规则(所有者,群组,其他)将被保留。
-k,–remove-default 删除缺省的 acl 规则。如果没有缺省规则,将不提示。
-n,–no-mask 不要重新计算有效权限。setfacl 默认会重新计算 ACL mask,除非 mask 被明确的制定。
–mask 重新计算有效权限,即使 ACL mask 被明确指定。
-d,–default 设定默认的 acl 规则。
–restore=file 从文件恢复备份的 acl 规则(这些文件可由 getfacl -R 产生)。通过这种机制可以恢复整个目录树的 acl 规则。此参数不能和除 --test 以外的任何参数一同执行。
–test 测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。
-R,–recursive 递归的对所有文件及目录进行操作。
-L,–logical 跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。
-P,–physical 跳过所有符号链接,包括符号链接文件。
标识命令行参数结束,其后的所有参数都将被认为是文件名。
- 如果文件名是 -,则 setfacl 将从标准输入读取文件名。

说明

选项 -m 和 -x 后边跟以 acl 规则。多条 acl 规则以逗号(,)隔开。选项 -M 和 -X 用来从文件或标准输入读取 acl 规则。

选项 --set 和 --set-file 用来设置文件或目录的 acl 规则,先前的设定将被覆盖。

选项 -m(–modify) 和 -M(–modify-file) 选项修改文件或目录的 acl 规则。

选项 -x(–remove)和 -X(–remove-file) 选项删除 acl 规则。

当使用 -M,-X 选项从文件中读取规则时,setfacl 接受 getfacl 命令输出的格式。每行至少一条规则,以#开始的行将被视为注释。

当在不支持 ACLs 的文件系统上使用 setfacl 命令时,setfacl 将修改文件权限位。如果 acl 规则并不完全匹配文件权限位,setfacl 将会修改文件权限位使其尽可能的反应 acl 规则,并会向 standard error 发送错误消息,以大于 0 的状态返回。

ACL规则详解

setfacl 命令可以识别以下的规则格式:

[d[efault]:] [u[ser]:]uid [:perms] 指定用户的权限,文件所有者的权限(如果uid没有指定)。 [d[efault]:] g[roup]:gid [:perms] 指定群组的权限,文件所有群组的权限(如果gid未指定) [d[efault]:] m[ask][:] [:perms] 有效权限掩码 [d[efault]:] o[ther] [:perms] 其他的权限

恰当的 acl 规则被用在修改和设定的操作中,对于 uid 和 gid,可以指定一个数字,也可指定一个名字。perms 域是一个代表各种权限的字母的组合:读 -r 写 -w 执行 -x,执行只适合目录和一些可执行的文件。pers 域也可设置为八进制格式。

Linux setfacl命令常用实例

实例

实例 描述
setfacl -m ACL file 设置文件 file 的 ACL 权限。
setfacl -b file 删除文件 file 的 ACL 权限。

说明

设置 ACL 时,ACL 一定要符合 ACL 规则。

设置ACL

语法

setfacl -m ACL file

案例

我们使用 touch 命令,创建一个 haicoder.txt 文件,具体命令如下:

touch haicoder.txt

运行后,终端输出如下:

59_Linux setfacl命令详解.png

现在,我们使用 getfacl 命令,查看文件 haicoder.txt 的 ACL,具体命令如下:

getfacl haicoder.txt

运行后,终端输出如下:

60_Linux setfacl命令详解.png

我们看到,此时 haicoder.txt 文件 ACL 策略,现在,我们让用户 haicoder 拥有对 haicoder.txt 文件有读写权限,具体命令如下:

setfacl -m user:haicoder:rw- haicoder.txt

运行后,终端输出如下:

61_Linux setfacl命令详解.png

我们已经修改了 ACL 策略,现在,我们再次查看 ACL,具体命令如下:

getfacl haicoder.txt

运行后,终端输出如下:

62_Linux setfacl命令详解.png

我们看到,此时 haicoder.txt 文件 ACL 策略已经被修改了。

删除ACL策略

语法

setfacl -b file

案例

我们首先,使用 getfacl 命令,查看文件 haicoder.txt 的 ACL,具体命令如下:

getfacl haicoder.txt

运行后,终端输出如下:

63_Linux setfacl命令详解.png

我们看到,此时 haicoder.txt 文件 ACL 策略,现在,我们使用 setfacl 命令,删除其 ACL 策略,具体命令如下

setfacl -b haicoder.txt

运行后,终端输出如下:

64_Linux setfacl命令详解.png

此时 haicoder.txt 文件 ACL 策略已经被删除了,现在,我们再次使用 getfacl 命令,查看文件 haicoder.txt 的 ACL,具体命令如下:

getfacl haicoder.txt

运行后,终端输出如下:

65_Linux setfacl命令详解.png

此时,我们看到,ACL 已经被删除了。

Linux setfacl命令总结

Linux 中的 setfacl 命令用于设置文件访问控制列表。setfacl命令 是用来在命令行里设置 ACL(访问控制列表)。在命令行里,一系列的命令跟随以一系列的文件名。