zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Linux基础命令-setfacl设置文件ACL策略规则

Linux文件规则基础命令 设置 策略 ACL
2023-09-14 09:09:44 时间

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
上一次登录:日 35 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命令使用起来稍稍复杂一些,对比大部分的命令格式,这个就有点与众不同了,若觉得以上内容还行的,可以点赞支持一下!
在这里插入图片描述