Linux 中的 setfacl 命令用于设置文件访问控制列表。setfacl命令 是用来在命令行里设置 ACL(访问控制列表)。在命令行里,一系列的命令跟随以一系列的文件名。
用于设置文件访问控制列表。
setfacl [option] ACL file
参数 | 描述 |
---|---|
options | setfacl 命令使用的参数。 |
ACL | ACL 访问控制权限。 |
files | 需要变更权限的文件或目录。 |
选项 | 含义 |
---|---|
-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 的状态返回。
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 域也可设置为八进制格式。
实例 | 描述 |
---|---|
setfacl -m ACL file | 设置文件 file 的 ACL 权限。 |
setfacl -b file | 删除文件 file 的 ACL 权限。 |
设置 ACL 时,ACL 一定要符合 ACL 规则。
setfacl -m ACL file
我们使用 touch 命令,创建一个 haicoder.txt 文件,具体命令如下:
touch haicoder.txt
运行后,终端输出如下:
现在,我们使用 getfacl 命令,查看文件 haicoder.txt 的 ACL,具体命令如下:
getfacl haicoder.txt
运行后,终端输出如下:
我们看到,此时 haicoder.txt 文件 ACL 策略,现在,我们让用户 haicoder 拥有对 haicoder.txt 文件有读写权限,具体命令如下:
setfacl -m user:haicoder:rw- haicoder.txt
运行后,终端输出如下:
我们已经修改了 ACL 策略,现在,我们再次查看 ACL,具体命令如下:
getfacl haicoder.txt
运行后,终端输出如下:
我们看到,此时 haicoder.txt 文件 ACL 策略已经被修改了。
setfacl -b file
我们首先,使用 getfacl 命令,查看文件 haicoder.txt 的 ACL,具体命令如下:
getfacl haicoder.txt
运行后,终端输出如下:
我们看到,此时 haicoder.txt 文件 ACL 策略,现在,我们使用 setfacl 命令,删除其 ACL 策略,具体命令如下
setfacl -b haicoder.txt
运行后,终端输出如下:
此时 haicoder.txt 文件 ACL 策略已经被删除了,现在,我们再次使用 getfacl 命令,查看文件 haicoder.txt 的 ACL,具体命令如下:
getfacl haicoder.txt
运行后,终端输出如下:
此时,我们看到,ACL 已经被删除了。
Linux 中的 setfacl 命令用于设置文件访问控制列表。setfacl命令 是用来在命令行里设置 ACL(访问控制列表)。在命令行里,一系列的命令跟随以一系列的文件名。