Setfacl
命令介绍
先查看文档中如何描述这个命令的
NAME
setfacl - set file access control lists
setfacl(Set file access control lists)直译过来是设置文件访问控制列表 ,其主要功能是用于设置文件ACL策略规则。FACL即文件访问控制列表策略,通过该技术可以更加精准的控制权限的分配。
这样子说可能有些难理解它真正的含义是什么,可以举一个例子,例如仅允许某个用户访问指定目录,或仅有某个用户才具有写入权限,把权限约束在一个极小的范围内,系统也就更加安全。
语法格式
setfacl的语法格式是:setfacl 【参数】【文件/目录】
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
setfacl --restore=file
基本参数
命令的常用参数是以下这些,一起来看看
-b | 删除所有扩展访问控制列表,保留基本的信息 |
---|---|
-k | 移除默认访问控制列表 |
-d | 应用到默认访问控制列表的操作,针对目录使用 |
-P | 跳过所有符号链接,包括符号链接文件 |
-R | 递归操作子目录 |
- m | 更改文件访问控制列表 |
-x | 根据文件中访问控制列表移除条目 |
-X | 从文件读取访问控制列表条目并删除 |
-M | 从文件读取访问控制列表条目更改 |
- -restore=file | 从文件恢复备份的ACL规则,通过这种机制可以恢复整个目录树的ACL规则 |
- - test | 测试模式,不会改变任何文件的ACL规则,操作后的ACL规格将被列出 |
参考实例
1. 对目录进行FACL策略规则设置
可以看到加上-d
参数后,显示的规则多了一些目录默认规则信息
[root@localhost ~]# setfacl -d -m u:test:rwx namedir/
[root@localhost ~]# getfacl namedir/
# file: namedir/
# owner: root
# group: root
user::rwx
user:root:rwx
user:test1:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:root:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
2. 获取文件的ACL信息
获取文件的ACL信息会需要用到getfacl
这个命令,一起来看下默认显示的ACL是咋样的
[root@localhost ~]# touch a.txt
[root@localhost ~]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
3.更改文件的ACL规则
更改文件的ACL规则会需要用到-m
的参数,设置用户test
的权限为读写执行,并且设置用户test1
的权限为000权限。
[root@localhost ~]# setfacl -m u:test:rwx a.txt
[root@localhost ~]# setfacl -m u:test1:- a.txt
[root@localhost ~]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:root:rwx
user:test1:---
group::r--
mask::rwx
other::r--
若是要修改所有组对这个文件的访问权限,可以将u改成g,一起来试试
[root@localhost ~]# groupadd grp
[root@localhost ~]# usermod -G grp test1
[root@localhost ~]# useradd -G grp test2
[root@localhost ~]# setfacl -m g:grp:- a.txt
[root@localhost ~]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
group:grp:---
mask::r--
other::r--
[root@localhost ~]# su - test1
上一次登录:日 3月 5 16:39:21 CST 2023pts/1 上
[test1@localhost ~]$ cat /root/a.txt
cat: /root/a.txt: 权限不够
4.去掉所有的ACL规则
直接使用-b
参数即可
[root@localhost ~]# setfacl -b a.txt
[root@localhost ~]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
5.移除一条ACL规则
-x
参数是可以直接移除一个规则的,若在工作中,只想移除一个ACL规则,可以使用这个参数了,因为-b
相当于是全部删掉,只保留原来的ACL信息。
这里的话移除用户test2
的规则
[root@localhost ~]# setfacl -Rm u:test1:rwx namedir
[root@localhost ~]# setfacl -Rm u:test2:rwx namedir
[root@localhost ~]# getfacl namedir
# file: namedir
# owner: root
# group: root
user::rwx
user:root:rwx
user:test1:rwx
user:test2:rwx
group::r-x
mask::rwx
other::r-x
[root@localhost ~]# setfacl -x u:test2 namedir #执行这一条命令
[root@localhost ~]# getfacl namedir/
# file: namedir/
# owner: root
# group: root
user::rwx
user:root:rwx
user:test1:rwx
#原本这里有一行test2的规则,现在已经移除了
group::r-x
mask::rwx
other::r-x
总结
setfacl
命令使用起来稍稍复杂一些,对比大部分的命令格式,这个就有点与众不同了,若觉得以上内容还行的,可以点赞支持一下!