Linux访问控制列表ACL

本文详细介绍了Linux访问控制列表(Access Control List, ACL)的概念、查看与配置方法,包括如何添加、修改和删除ACL权限,以及如何设置掩码和控制默认权限。通过实例演示,帮助读者掌握在实际环境中管理文件和目录权限的高级技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 基础概念

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
### Linux ACL 使用方法及配置教程 #### 一、ACL简介 访问控制列表(Access Control List, ACL),是一种基于文件系统的安全机制,允许管理员为特定用户或组设置更细粒度的读写执行权限。相比传统的Unix权限模型,ACL提供了更为灵活和强大的权限管理能力。 #### 二、查看当前文件/目录是否有启用ACL支持 可以使用`getfacl`命令来获取指定路径下的ACL信息。如果返回的结果不仅限于owner/group/others三类主体,则说明该位置已经启用了ACL功能[^1]。 ```bash getfacl /path/to/file_or_directory ``` #### 三、设定新的ACL条目 通过`setfacl`工具能够向现有对象添加额外的访问规则: - `u:`后面跟用户名表示针对单个用户的特殊授权; - `rwx`分别代表可读(r)、可写(w)以及可执行(x)[^2]。 例如给定一个名为example.txt的文本文件,想要赋予userA具有完全控制权的同时保持原有权限不变: ```bash setfacl -m u:userA:rwx example.txt ``` 对于整个目录及其子项应用相同策略时,需附加参数`-R`(递归): ```bash setfacl -R -m u:userA:rwx /target/directory/ ``` #### 四、删除特定用户的ACL设置 当不再希望某个用户拥有特别授予的权利时,可以通过下面的方式移除对应的ACL入口: ```bash setfacl -x u:username file_or_dir_path ``` #### 五、默认ACL的应用场景 为了确保新创建的内容自动继承父级容器所定义的安全属性,在建立一个新的文件夹之前先为其指派好缺省ACL是非常有用的实践之一。这可通过追加选项`d:`到前面提到的操作上来完成。 比如让所有未来在此处产生的项目都给予groupB成员只读访问级别: ```bash mkdir new_project_folder && \ setfacl -m d:g:groupB:r-x new_project_folder ``` 以上就是关于Linux环境下如何操作ACL的一些基础指导。值得注意的是不同发行版之间可能存在细微差异,因此建议查阅官方文档获得最准确的帮助资料[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值