概述

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]    其他的权限

各字段说明如下:

  • 对于 ugmo 都是固定字。
  • 对于 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

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐