文章目录
一 基础概念
1.1 起因
Linux系统限制了文件的访问权限仅限于文件的所有者、文件所属组、其他所有用户。除此之外,进程就不适合作为文件所属组的成员,而将权限授予其他任何用户更是不可取。所以,我们需要对权限的进一步细分。
使用ACL可以向文件分配细化权限。通过指定用户或者UID、指定用户组或者GID,应用相同的权限标志(r读、w写、x执行),进行权限的细分。
1.2 系统支持
文件系统必须挂载已经启用的ACL支持。
XFS系统内置ACL支持;
红帽Linux7的ext4系统默认启动了ACL支持。
1.3 相关定义
名称 | 解释 |
---|---|
ls -l 命令文件权限后的+ | 存在ACL设置 |
ls -l 命令文件权限后的. | 文件存在SELinux的安全上下文 |
ACL掩码 | 指定用户、属组成员可拥有的最大权限 |
ACL权限优先级 | 依次是用户、指定用户、组、其他 |
二 查看ACL权限
2.1 简单查看
通过ls -l
命令,可以查看较少的ACL权限信息。
[root@server tmp]# ls -l
total 4
-rw-rw-r--+ 1 root root 14 Dec 19 10:01 test.txt
第一个rw-
显示用户ACL设置,与标准的用户文件设置相同。
第二个rw-
显示当前的ACL掩码设置,不是组所有者设置。
第三个r--
显示其他ACL设置,与标准的其他文件设置相同。
如果使用chmod
修改这个具有ACL的文件的组的权限,那么修改的是ACL掩码,而不是属组权限;
如果想要修改属组权限,需要setfacl -m g::perms 文件名
。
2.2 详细查看
使用getfacl
详细查看ACL信息。
[root@server tmp]# getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:oldboy:rw-
group::r--
mask::rw-
other::r--
首先,前三行是注释条目,识别文件名、属主和属组。
第四行是属主以及对应的所有者权限。
第五行是指定用户oldboy的权限。
第六行是属组的权限。
第七行是ACL掩码,是所有指定的用户、指定的组所拥有的理论上最大权限。
最后一行是其他权限。
2.3 具体配置
描述 | 操作 |
---|---|
文件具有rx权限的指定james用户 | u:james:rx file |
文件具有rx权限的属主用户 | u::rx file |
目录属组的rw权限 | g::rw /dir |
目录指定组dev的rwx权限 | g:dev:rwx /dir |
设置成默认掩码的rx权限 | d:m:rx /dir |
设置指定用户dick的新文件rx初始权限 | d:user:dick:rx /dir |
三 更改ACL权限
3.1 添加或修改ACL
给oldboy用户添加rx权限
[root@server tmp]# setfacl -m u:oldboy:rx test.txt
[root@server tmp]# getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:oldboy:r-x
group::r--
mask::r-x
other::r--
如果此处的oldboy位置内容为空,则修改文件属主权限。
修改其他ACL,将权限变成-
。
[root@server tmp]# setfacl -m o::- test.txt
[root@server tmp]# getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:oldboy:r-x
group::r--
mask::r-x
other::---
修改其他权限时,chmod效果等同于setfacl。
3.2 输出和输入
使用getfacl的输出,可以作为setfacl的输入。
getfacl file1 | setfacl --set-file=- file2
此处单独的-
表示stdin。
3.3 设置ACL掩码
setfacl -m m::r file3
该操作设置的掩码值会作用于所有指定的用户与指定的组,但不影响属主。
一般情况下,每次修改或删除ACL掩码,该数值都会被重新计算。如果想要避免重复计算ACL掩码,使用-n
参数;或者使用-m m::perms
。
3.4 递归修改ACL
以递归方式将ACL应用到目录和目录下的文件中,则使用-R
参数。一般如果有x
权限时,会写成大写X
,具有执行权限的文件会保留权限,并防止管理员意外的向普通文件添加执行权限。
3.5 删除ACL
setfacl -x u:oldboy,g:oldman file4
这个操作会从ACL中删除指定的用户和指定的组。其他ACL活动保持不变。
当其他设置的ACL删除后,最后才可以删除ACL掩码。
setfacl -b file
此时,权限字符串旁边不再有+
。
3.6 控制默认ACL权限
将某个目录设置默认的ACL,在该目录下创建的新目录和新文件将自动继承默认的ACL。
setfacl -m d:u:oldboy:rx /dir
如果想要删除这个默认ACL,换成-x
参数,并取消权限即可。
setfacl -x d:u:oldboy /dir