本章主要介绍 ACL 权限
- ACL 的用法
- ACL 的 mask 权限
- 设置默认权限
10.1 ACL 介绍及基本用法
前面讲权限时,是对u、g、o设置权限的,现在假如有图10-1所示的需求。
有一个目录aa,要求tom、bob、mary具有不同的权限,利用前面讲过的知识是完全可
以实现的。
所有者设置为tom,把所有者的权限设置为rw。
所属组设置为bob,把所属组的权限设置为r。
mary使用o的权限,把 o 的权限设置为rx。
但是如果有四个或更多个用户,要求设置不同的权限
利用前面讲的知识就无法实现了,要实现对具体用户设置权限,我们可以考虑ACL。
ACL的用法如下。
setfacl ‐m u: 用户名 :rw‐ file/dir ‐‐对用户设置ACL
setfacl ‐m g: 组名 :rw‐ file/dir ‐‐对组设置ACL
在/opt下创建一个文件/opt/aa.txt,命令如下。
[root@op opt]# touch aa.txt
[root@op opt]# ls -ls aa.txt
0 -rw-r--r--. 1 root root 0 12月 2 15:31 aa.txt
[root@op opt]#
[root@op opt]#
对于 jjj 用户来说,只能使用o的权限,所以 blab 是不能往此 aa.txt 中写内容的。打
开一个新标签使用 blab 登录,然后在 aa.txt 中测试写。
[jjj@op opt]$ echo aaa > aa.txt
-bash: aa.txt: 权限不够
[jjj@op opt]$
此时是写不进去的。使用root用户对 aa.txt设置ACL权限,首先查看aa.txt是否具有ACL
权限,查看的命令是getfacl,如下所示。
[root@op opt]# getfacl aa.txt
# file: aa.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--[root@op opt]#
如果不想结果中显示前面几行带有#的,可以加上-c选项,命令如下。
[root@op opt]# getfacl -c aa.txt
user::rw-
group::r--
other::r--[root@op opt]#
设置aa.txt的ACL权限,使得 blab 用户对 aa.txt 只具有写权限而没有读权限。
[root@op opt]# setfacl -m u:jjj:-w- aa.txt
[root@op opt]#
查看aa.txt的ACL权限、命令如下。
[root@op opt]# getfacl -c aa.txt
user::rw-
user:jjj:-w-
group::r--
mask::rw-
other::r--[root@op opt]#
使用jjj用户进行测试,命令如下。
[jjj@op opt]$ echo aaa > /opt/aa.txt
[jjj@op opt]$ cat aa.txt
cat: aa.txt: 权限不够
[jjj@op opt]$
可以看到,blab 用户对/opt/aa.txt具备写权限,但是没有读权限。
为aa.txt设置ACL 权限,让 blab 用户具备读写权限,命令如下。
[root@op opt]# setfacl -m u:jjj:rw- aa.txt
[root@op opt]#
可以看到,blab 用户对 aa.txt 具有 rw 权限了,然后使用 blab 用户往aa.txt中写数据,如
下所示。
[jjj@op opt]$ cat aa.txt
aaa
[jjj@op opt]$
10.2 ACL 的 mask 权限
先查看aa.txt的ACL 权限,然后介绍5个名词。
[root@op opt]# getfacl -c aa.txt
user::rw- ACL_USER_OBJ
user:jjj:rw- ACL_USER
group::r-- ACL_GROUP_OBJ
group:tom:rw- ACL_GROUP
mask::rw- ACL_MASK
other::r--[root@op 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 的变化而变化,始终是这几个权限的最大
值。
假设将 tom组(ACL_GROUP)的权限改成 r--,命令如下。
[root@op opt]# setfacl -m g:tom:r-- aa.txt
[root@op opt]# getfacl -c aa.txt
user::rw-
user:jjj:rw-
group::r--
group:tom:r--
mask::rw-
other::r--[root@op opt]#
这里因为ACL_USER (blab用户)的权限是rw,是这几者中最高的,所以 ACL_MASK的
权限并没有改变。现在将blab的ACL权限改成---,命令如下。
[root@op opt]# setfacl -m u:jjj:--- aa.txt
[root@op opt]# getfacl -c aa.txt
user::rw-
user:jjj:---
group::r--
group:tom:r--
mask::r--
other::r--[root@op opt]#
因为这几者中最高权限为r,所以ACL_MASK的权限为r。
如果将 jjj 的 ACL权限设置为rwx
[root@op opt]# setfacl -m u:jjj:rwx aa.txt
[root@op opt]# getfacl -c aa.txt
user::rw-
user:jjj:rwx
group::r--
group:tom:r--
mask::rwx
other::r--[root@op opt]#
jjj的 ACL权限现在是最高的,所以 mask也跟着变成了rwx。
10.3 设置默认权限
当我们对目录设置ACL时,还可以设置默认ACL 权限,语法如下。
1 setfacl ‐m d:u:user1:rwx dir
不管谁在目录dir中新创建的目录或文件,对user1都会自动设置ACL权限rwx。
注意
这里的默认权限是对dir中新创建的目录或文件,并非对dir本身设置权限。
这里语法中的d(default)是默认的意思。为了更好地解释,我们看下面的例子。
创建目录/opt/xx,为了测试方便,可以设置ACL 权限,让tom具有rwx权限,命令如
下。
[root@op opt]# mkdir xx
[root@op opt]# setfacl -m u:jjj:rwx xx
[root@op opt]# getfacl -c xx
user::rwx
user:jjj:rwx
group::r-x
mask::rwx
other::r-x[root@op opt]#
现在设置blab对目录xx的默认ACL权限为rwx,命令如下。
[root@op opt]# setfacl -m d:u:blab:rwx xx
[root@op opt]# getfacl -c xx/
user::rwx
user:jjj:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:blab:rwx
default:group::r-x
default:mask::rwx
default:other::r-x[root@op opt]#
不管任何人在目录xx中新创建的文件或目录,对blab都会有默认ACL权限rwx。
测试:使用jjj用户在 /opt/xx下创建一个文件 aa.txt,然后查看此文件的ACL权限,命
令如下。
[jjj@op opt]$ touch /opt/xx/aa.txt
[jjj@op opt]$ getfacl -c /opt/xx/aa.txt
getfacl: Removing leading '/' from absolute path names
user::rw-
user:blab:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::r--[jjj@op opt]$
可以看到,blab对/opt/xx/aa.txt具有默认ACL 权限 rwx。因为除了后期修改权限,创
建文件时不会出现x权限,所以这里出现了#effective:rw-。
然后blab用户往/opt/xx 中写入内容。
[blab@op ~]$ touch /opt/xx/bb.txt
touch: 无法创建 '/opt/xx/bb.txt': 权限不够
[blab@op ~]$
会发现权限不够,写不进去,说明默认权限是对/opt/xx中新创建的目录或文件,并非
对/opt/xx本身设置权限。
取消默认权限,命令如下。
[root@op opt]# setfacl -x d:u:blab xx
[root@op opt]#
取消默认权限之后,以后在/opt/xx中新创建的文件对lduan用户不会有默认ACL权限但是
已经存在的文件的默认权限也不会取消。