Linux命令:setfacl-设置文件访问控制列表
setfacl 用于在命令行中设置 ACL,一系列的的命令跟随着的是文件名。
给用户设定 ACL 权限: setfacl -m u:用户名:权限 指定文件名 。
给用户组设定 ACL 权限: setfacl -m g:组名:权限 指定文件名 。
删除指定用户的 ACL 权限:setfacl -x u:用户名 文件名
删除指定用户组的 ACL 权限:setfacl -x g:组名 文件名
删除文件的所有 ACL 权限:setfacl -b 文件名
ACL 权限存在一个最大有效权限的概念: 我们给用户或者用户组设置 ACL 权限其实并不是我们设定的权限,是与 mask 的权限 与 运算之后的才是用户的真正权限,一般默认 mask 权限都是 rwx,与我们所设定的权限相与就是我们设定的权限。
设定mask的值: setfacl -m m:权限 文件名
实例:
基础环境的搭建:
[root@server ~]# mkdir workdir
[root@server ~]# chmod 750 workdir/
[root@server ~]# ll
total 4
-rw-------. 1 root root 895 Aug 15 09:20 anaconda-ks.cfg
drwxr-x---. 2 root root 6 Aug 22 20:08 workdir
该环境创建了一个 workdir 文件夹,该文件夹的权限是 750,这让所属人有读写执行的权限,组的成员的有读和执行的权限。
现在需要额外的需求,需要其他的人来访问 workdir ,同时使用的权限和workdir的其他人的权限是不一样的。
这种特殊的情况就可以用到 ACL 这种对 workdir 权限的更细力度的管理。
这里添加一个名为 commissioner 的专员,该专员是独立于workdir基本三种权限的人,有 rwx 的权限,由于该 commissioner 既不能归于 root 组,也不能归于 orther 所以就需要设置对应的 acl 来控制。
给用户设定 ACL 权限: setfacl -m u:用户名:权限 指定文件名 。
[root@server ~]# setfacl -m u:commissioner:rwx workdir/
[root@server ~]# ll
total 4
-rw-------. 1 root root 895 Aug 15 09:20 anaconda-ks.cfg
drwxrwx---+ 2 root root 6 Aug 22 20:08 workdir
通过 ll 可以看到 drwxrwx--- 后面的 . 改为了 +,这就表明了该目录文件启用了 acl 。
通过 getfacl 可以查看该目录文件
[root@server ~]# getfacl workdir/
# file: workdir/
# owner: root
# group: root
user::rwx
user:commissioner:rwx
group::r-x
mask::rwx
other::---
可以看到 user:commissioner:rwx 。
setfacl命令
setfacl 命令 是用来在命令行里设置 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,--logial | 跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录 |
| -P,--physical | 跳过所有符号链接,包括符号链接文件 |
| --version | 输出setfacl的版本号并退出 |
| --help | 输出帮助信息 |
| -- | 标识命令行参数结果,其后是所有参数都将被认为是文件名 |
| - | 如果文件名是 - ,则 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 的转态返回。

浙公网安备 33010602011771号