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 的转态返回。

posted @ 2024-08-23 17:08  takenika  阅读(185)  评论(0)    收藏  举报