Linux中的ACL权限

本文详细介绍了Linux中的访问控制列表(AccessControlList,ACL)权限设置,包括对用户和组的权限分配、mask权限的作用以及默认权限的设定。通过实例展示了如何设置和撤销ACL权限,以及默认权限如何影响新创建的文件和目录。
摘要由CSDN通过智能技术生成

本章主要介绍ACL权限

  • ACL的用法
  • ACL的mask权限
  • 设置默认权限

1.1 ACL介绍及基本用法

要实现对具体用户设置权限,我们可以考虑ACL

ACL的用法如下

1. setfacl ‐m u: 用户名 :rw‐ file/dir ‐‐对用户设置ACL
2. setfacl ‐m g: 组名 :rw‐ file/dir ‐‐对组设置ACL

在/opt下创建一个文件/opt/abc.txt

[root@redhat8 opt]# touch abc.txt

对于jin用户来说,只能使用o权限,所有jin是不能往此abc.tx中写内容的。打开一个新的标签使用jin用户登录,然后在abc.txt中测写

[jin@redhat8 ~]$ echo asd > /opt/abc.txt 
-bash: /opt/abc.txt: 权限不够
[jin@redhat8 ~]$

此时是写不进去的。使用root用户对 aa.txt设置ACL权限,首先查看aa.txt是否具有ACL 权限,查看的命令是getfacl

[root@redhat8 opt]# getfacl abc.txt 
# file: abc.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

[root@redhat8 opt]#

如果不想结果中显示前面几行带有#的,可以加上-c选项

[root@redhat8 opt]# getfacl -c abc.txt 
user::rw-
group::r--
other::r--

[root@redhat8 opt]#

设置abc.txt的ACL权限,使得 jin 用户对 abc.txt 只具有写权限而没有读权限

[root@redhat8 opt]# setfacl -m u:jin:-w- abc.txt 
[root@redhat8 opt]#

查看abc.txt的ACL权限

[root@redhat8 opt]# getfacl -c abc.txt

使用jin用户进行测试

[jin@redhat8 ~]$ echo asd > /opt/abc.txt

可以看到,jin 用户对/opt/abc.txt具备写权限,但是没有读权限

为abc.txt设置ACL 权限,让 jin 用户具备读写权限

[root@redhat8 opt]# setfacl -m u:jin:rw- abc.txt 

可以看到,jin 用户对 abc.txt 具有 rw 权限了,然后使用 jin 用户往abc.txt中写数据

已经成功写进去了,也能看到文件中的内容

如果对组设置ACL权限,如设置abc.txt的ACL权限,让jin组的用户具备读写权限

[root@redhat8 opt]# setfacl -m g:jin:rw- abc.txt 
[root@redhat8 opt]#

此后凡是jin组的用户对abc.txt都具有rw权限

注意

(1)假设一个用户bob已经登录系统但是不属于tom组,然后把bob加入 tom组后,bob需要退出重 新登录才能使用权限

(2)如果对一个不存在的用户或组设置ACL权限,会有“无效的参数”报错

[root@redhat8 opt]# setfacl -m g:jin4:rw- abc.txt 
setfacl: Option -m: 无效的参数 near character 3
[root@redhat8 opt]#

1.2 ACL的mask权限

先查看abc.txt的ACL 权限,然后介绍5个名词

[root@redhat8 opt]# getfacl -c abc.txt 
user::rw-    ##ACL_USER_OBJ    
user:jin:rw-    ##ACL_USER
group::r--    ##ACL_GROUP_OBJ
group:jin:rw-    ##ACL_GROUP
mask::rw-    ##ACL_MASK
other::r--

[root@redhat8 opt]#

(1)ACL_USER_OBJ:文件的所有者

(2)ACL_USER:通过ACL授权的用户

(3)ACL_GROUP_OBJ:文件所属组

(4)ACL_GROUP:通过ACL授权的组

(5)ACL_MASK: ACL_USER、ACL_GROUP_OBJ和 ACL_GROUP中的最大权限。 如果没有手动配置ACL_MASK 的权限,则ACL_MASK 的权限会随着

ACL_USER.ACL_GROUP_OBJ和ACL_GROUP 的变化而变化,始终是这几个权限的最大值

假设将 jin组(ACL_GROUP)的权限改成 r--

[root@redhat8 opt]# setfacl -m g:jin:r-- abc.txt 
[root@redhat8 opt]# getfacl -c abc.txt 
user::rw-
user:jin:rw-
group::r--
group:jin:r--
mask::rw-
other::r--

[root@redhat8 opt]#

这里因为ACL_USER (jin用户)的权限是rw,是这几者中最高的,所以 ACL_MASK的权限并没有改变。现在将jin的ACL权限改成---

[root@redhat8 opt]# setfacl -m u:jin:--- abc.txt 
[root@redhat8 opt]# getfacl -c abc.txt 
user::rw-
user:jin:---
group::r--
group:jin:r--
mask::r--
other::r--

[root@redhat8 opt]#

因为这几者中最高权限为r,所以ACL_MASK的权限为r

如果将 jin 的 ACL权限设置为rwx

[root@redhat8 opt]# setfacl -m u:jin:rwx abc.txt 
[root@redhat8 opt]# getfacl -c abc.txt 
user::rw-
user:jin:rwx
group::r--
group:jin:r--
mask::rwx
other::r--

[root@redhat8 opt]#

jin的 ACL权限现在是最高的,所以 mask也跟着变成了rwx

当然,我们也可以手动设置ACL_MASK的权限

下面手动将abc.tx的mask权限设置为r--

[root@redhat8 opt]# setfacl -m m:r-- abc.txt 
[root@redhat8 opt]# getfacl -c abc.txt 
user::rw-
user:jin:rwx			#effective:r--
group::r--
group:jin:r--
mask::r--
other::r--

[root@redhat8 opt]#

刚才讲mask 设置的是 ACL USER、ACL_GROUP_OBJ和ACL_GROUP中的最大权限,所以即使blab用户的权限有rwx,但是生效的只有r权限,即上面结果中#effective:r--显示的, 因为最大权限被限定在r了

如何将mask权限设置为---呢?

[root@redhat8 opt]# setfacl -m m:--- abc.txt 
[root@redhat8 opt]# getfacl -c abc.txt 
user::rw-
user:jin:rwx			#effective:---
group::r--			#effective:---
group:jin:r--			#effective:---
mask::---
other::r--

[root@redhat8 opt]#

因为mask 是最高权限,所以上面显示的ACL_USER、ACL_GROUP_OBJ和ACL_GROUP 实际能使用的权限均为---。下面测试 jin 用户是否能读和写abc.txt 的内容

[jin@redhat8 ~]$ cat /opt/abc.txt 
abc
[jin@redhat8 ~]$ echo 123 > /opt/abc.txt 
-bash: /opt/abc.txt: 权限不够
[jin@redhat8 ~]$

可以看到,jin用户能读但是不能写,这与mask权限---相嗓,因为这里又涉及了other 权限,前面可以看到o的权限为r,所以jin用户是能读但是不能写的

如果给o设置一个写权限

[root@redhat8 opt]# chmod o+w abc.txt 
[root@redhat8 opt]#

则jin用户可以往abc.txt中写内容

[jin@redhat8 ~]$ cat /opt/abc.txt 
abc
[jin@redhat8 ~]$ echo 123 > /opt/abc.txt 
[jin@redhat8 ~]$

把mask权限设置为r--

[root@redhat8 opt]# setfacl -m m:r-- abc.txt 
[root@redhat8 opt]# getfacl -c abc.txt 
user::rw-
user:jin:rwx			#effective:r--
group::r--
group:jin:r--
mask::r--
other::rw-

[root@redhat8 opt]#

这里other权限是rw,然后用jin进行测试

[jin@redhat8 ~]$ cat /opt/abc.txt 
123
[jin@redhat8 ~]$ echo 123 > /opt/abc.txt 
-bash: /opt/abc.txt: 权限不够
[jin@redhat8 ~]$

可以看到,此时jin用户能读但是不能写

结论:(1)如果没有手动设置ACL的mask权限,则对用户/组设置的ACL 权限生效,不用 考虑o的权限

(2)如果手动设置了mask权限,且mask权限被设置为了---,则other权限生效

如果手动设置mask权限只要不是---,则不考虑other权限

重新给任一用户设置ACL 权限,则自动取消手动设置的mask权限

要取消ACL语法如下

1. setfacl ‐x u:用户名 file/dir
或
2. setfacl ‐x g:组名 file/dir

要取消用户jin和jin组的ACL权限

[root@redhat8 opt]# setfacl -x u:jin abc.txt 
[root@redhat8 opt]# setfacl -x g:jin abc.txt

1.3 设置默认权限

当我们对目录设置ACL时,还可以设置默认ACL 权限

 1. setfacl ‐m d:u:user1:rwx dir

不管谁在目录dir中新创建的目录或文件,对user1都会自动设置ACL权限rwx

注意

这里的默认权限是对dir中新创建的目录或文件,并非对dir本身设置权限

这里语法中的d(default)是默认的意思。为了更好地解释,我们看下面的例子。 创建目录/opt/xx,为了测试方便,可以设置ACL 权限,让jin具有rwx权限

[root@redhat8 opt]# setfacl -m u:jin:rwx xx
[root@redhat8 opt]# getfacl -c xx
user::rwx
user:jin:rwx
group::r-x
mask::rwx
other::r-x

[root@redhat8 opt]#

现在设置jin对目录xx的默认ACL权限为rwx

[root@redhat8 opt]# setfacl -m d:u:jin:rwx xx
[root@redhat8 opt]# getfacl -c xx
user::rwx
user:jin:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:jin:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

[root@redhat8 opt]#

不管任何人在目录xx中新创建的文件或目录,对jin都会有默认ACL权限rwx

测试:使用jin用户在 /opt/xx下创建一个文件 aa.txt,然后查看此文件的ACL权限

[jin@redhat8 ~]$ touch /opt/xx/abc.txt
[jin@redhat8 ~]$ getfacl -c /opt/xx/abc.txt 
getfacl: Removing leading '/' from absolute path names
user::rw-
user:jin:rwx			#effective:rw-
group::r-x			#effective:r--
mask::rw-
other::r--

[jin@redhat8 ~]$

可以看到,jin对/opt/xx/aa.txt具有默认ACL 权限 rwx。因为除了后期修改权限,创 建文件时不会出现x权限,所以这里出现了#effective:rw-

然后aaa用户往/opt/xx中写入内容

[aaa@redhat8 ~]$ touch /opt/xx/abc.txt
touch: 无法创建 '/opt/xx/abc.txt': 权限不够
[aaa@redhat8 ~]$

会发现权限不够,写不进去,说明默认权限是对/opt/xx中新创建的目录或文件,并非 对/opt/xx本身设置权限

取消默认权限

[root@redhat8 opt]# setfacl -x d:u:jin xx
[root@redhat8 opt]# 

取消默认权限之后,以后在/opt/xx中新创建的文件对lduan用户不会有默认ACL权限但是 已经存在的文件的默认权限也不会取消

清空/opt中的内容

[root@redhat8 opt]# rm -rf *
[root@redhat8 opt]# ls
[root@redhat8 opt]#

  • 31
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值