RHEL8---ACL权限

本文详细介绍了Linux的ACL权限控制,包括如何为特定用户和组设置权限,mask权限的作用,以及如何设置默认权限。通过实例演示了如何使用setfacl命令调整权限,确保不同用户对文件和目录的不同访问级别。
摘要由CSDN通过智能技术生成

本章主要介绍 ACL 权限

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

ACL 介绍及基本用法

前面讲权限时,是对u、g、o设置权限的。

有一个目录aa,要求tom、bob、mary具有不同的权限,利用前面讲过的知识是完全可 以实现的。

所有者设置为tom,把所有者的权限设置为rw。

所属组设置为bob,把所属组的权限设置为r。

所属组设置为bob,把所属组的权限设置为r。

但是如果有四个或更多个用户,要求设置不同的权限,如下图所示。

利用前面讲的知识就无法实现了,要实现对具体用户设置权限,我们可以考虑ACL。

ACL的用法如下。

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

在/opt下创建一个文件/opt/aa.txt,命令如下。

[root@rhel03 ~]# cd /opt/
[root@rhel03 opt]# touch aa.txt
[root@rhel03 opt]# ls -l aa.txt 
-rw-r--r--. 1 root root 0 12月  3 17:28 aa.txt

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

[bdqn@rhel03 ~]$ echo 111 > /opt/aa.txt 
-bash: /opt/aa.txt: 权限不够
[bdqn@rhel03 ~]$ 

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

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

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

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

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

[root@rhel03 opt]# setfacl -m u:bdqn:-w- aa.txt 
[root@rhel03 opt]# 

 查看aa.txt的ACL权限、命令如下。

[root@rhel03 opt]# getfacl -c aa.txt 
user::rw-
user:bdqn:-w-
group::r--
mask::rw-
other::r--

使用bdqn用户进行测试,命令如下。

[bdqn@rhel03 ~]$ echo 1111 > /opt/aa.txt 
[bdqn@rhel03 ~]$ cat /opt/aa.txt 
cat: /opt/aa.txt: 权限不够

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

为aa.txt设置ACL 权限,让bdqn用户具备读写权限,命令如下。

[root@rhel03 opt]# setfacl -m u:bdqn:rw- aa.txt 
[root@rhel03 opt]# 

使用bdqn用户进行测试,可以看到,bdqn用户对 aa.txt 具有 rw 权限了,然后使用bdqn用户往aa.txt中写数据,如 下所示。

[bdqn@rhel03 ~]$ echo aaa > /opt/aa.txt 
[bdqn@rhel03 ~]$ cat /opt/aa.txt 
aaa

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

如果对组设置ACL权限,如设置aa.txt的ACL权限,让tom组的用户具备读写权限,命令如下。

[root@rhel03 opt]# setfacl -m g:tom:rw- aa.txt 
[root@rhel03 opt]# 

注意

  • 假设一个用户bob已经登录系统但是不属于tom组,然后把bob加入 tom组后,bob需要退出重新登录才能使用权限。 
  • 如果对一个不存在的用户或组设置ACL权限,会有“无效的参数”报错。
[root@rhel03 opt]# setfacl -m u:tomxx:rw- aa.txt 
setfacl: Option -m: 无效的参数 near character 3
[root@rhel03 opt]# 

ACL 的 mask 权限 

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

[root@rhel03 opt]# getfacl -c aa.txt 
user::rw-
user:bdqn:rw-
group::r--
group:tom:rw-
mask::rw-
other::r--
  • user文件的所有者。
  • user:bdqn:通过ACL授权的用户。
  • group:文件所属组。
  • group:tom:通过ACL授权的组。
  • mask:2.3.4行中的最大权限。 如果没有手动配置ACL_MASK 的权限,则ACL_MASK 的权限会随着2.3.4行的变化而变化,始终是这几个权限的最大 值。
  • other:其他人 

假设将 tom组(ACL_GROUP)的权限改成 r--,命令如下。

[root@rhel03 opt]# setfacl -m g:tom:r-- aa.txt 
[root@rhel03 opt]# getfacl -c aa.txt 
user::rw-
user:bdqn:rw-
group::r--
group:tom:r--
mask::rw-
other::r--

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

[root@rhel03 opt]# setfacl -m u:bdqn:--- aa.txt 
[root@rhel03 opt]# getfacl -c aa.txt 
user::rw-
user:bdqn:---
group::r--
group:tom:r--
mask::r--
other::r--

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

 如果将bdqn的 ACL权限设置为rwx,如下所示。

[root@rhel03 opt]# setfacl -m u:bdqn:rwx aa.txt 
[root@rhel03 opt]# getfacl -c aa.txt 
user::rw-
user:bdqn:rwx
group::r--
group:tom:r--
mask::rwx
other::r--

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

当然,我们也可以手动设置ACL_MASK的权限,语法如下。

  • setfacl ‐m m::rw‐ file/dir

下面手动将aa.txt 的mask权限设置为r--。

[root@rhel03 opt]# setfacl -m m:r-- aa.txt 
[root@rhel03 opt]# getfacl -c aa.txt 
user::rw-
user:bdqn:rwx			#effective:r--
group::r--
group:tom:r--
mask::r--
other::r--

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

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

[root@rhel03 opt]# setfacl -m m:--- aa.txt 
[root@rhel03 opt]# getfacl -c aa.txt 
user::rw-
user:bdqn:rwx			#effective:---
group::r--			#effective:---
group:tom:r--			#effective:---
mask::---
other::r--

  因为mask 是最高权限,所以上面显示的user:bdqn、group和group:tom实际能使用的权限均为---。下面测试 bdqn用户是否能读和写aa.txt 的内容,如下所示。

[bdqn@rhel03 ~]$ cat /opt/aa.txt 
aaa
[bdqn@rhel03 ~]$ echo 222 > /opt/aa.txt 
-bash: /opt/aa.txt: 权限不够

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

如果给o设置一个写权限,命令如下。

[root@rhel03 opt]# chmod o+w aa.txt 
[root@rhel03 opt]# 

则bdqn用户可以往aa.txt中写内容。 

[bdqn@rhel03 ~]$ cat /opt/aa.txt 
aaa
[bdqn@rhel03 ~]$ echo 222 > /opt/aa.txt 
[bdqn@rhel03 ~]$ cat /opt/aa.txt 
222

把 mask权限设置为r--。

[root@rhel03 opt]# setfacl -m m:r-- aa.txt 
[root@rhel03 opt]# getfacl -c aa.txt 
user::rw-
user:bdqn:rwx			#effective:r--
group::r--
group:tom:r--
mask::r--
other::rw-

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

[bdqn@rhel03 ~]$ cat /opt/aa.txt 
222
[bdqn@rhel03 ~]$ echo aaa > /opt/aa.txt 
-bash: /opt/aa.txt: 权限不够
[bdqn@rhel03 ~]$

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

结论:

  • 如果没有手动设置ACL的mask权限,则对用户/组设置的ACL 权限生效,不用 考虑o的权限。 
  • 如果手动设置了mask权限,且mask权限被设置为了---,则other权限生效。 如果手动设置mask权限只要不是---,则不考虑other权限。

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

要取消ACL,语法如下。

  • setfacl ‐x u:用户名 file/dir

或者

  • setfacl ‐x u:用户名 file/dir 
[root@rhel03 opt]# setfacl -x u:bdqn aa.txt 
[root@rhel03 opt]# setfacl -x g:tom aa.txt 
[root@rhel03 opt]# getfacl -c aa.txt 
user::rw-
group::r--
mask::r--
other::rw-

设置默认权限 

当我们对目录设置ACL时,还可以设置默认ACL 权限,语法如下。

  • setfacl ‐m d:u:user1:rwx dir 

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

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

这里语法中的d(default)是默认的意思。为了更好地解释,我们看下面的例子。

创建目录/opt/xx,为了测试方便,可以设置ACL 权限,让tom具有rwx权限,命令如下。

[root@rhel03 opt]# mkdir xx
[root@rhel03 opt]# setfacl -m u:tom:rwx xx/
[root@rhel03 opt]# getfacl -c xx/
user::rwx
user:tom:rwx
group::r-x
mask::rwx
other::r-x

现在设置bdqn对目录xx的默认ACL权限为rwx,命令如下。 

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

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

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

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

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

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

[bdqn@rhel03 ~]$ touch /opt/xx/bb.txt
touch: 无法创建 '/opt/xx/bb.txt': 权限不够
[bdqn@rhel03 ~]$ 

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

取消默认权限,命令如下。

[root@rhel03 opt]# setfacl -x d:u:bdqn xx
[root@rhel03 opt]# getfacl -c xx
user::rwx
user:tom:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:mask::r-x
default:other::r-x

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

清空/opt中的内容,命令如下。

[root@rhel03 ~]# rm -rf /opt/*
[root@rhel03 ~]# ls /opt/
[root@rhel03 ~]# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值