20.linux ACL控制文件访问
Linux ACL 控制文件访问
什么是 ACL?
- 访问控制列表(ACL)为文件系统提供了一种额外的、更灵活的权限机制。
- 它旨在辅助标准的 UNIX 文件权限(用户、组、其他)。
- ACL 允许您为文件或目录的属主和属组之外的特定用户或组设置精细的读、写、执行权限。
ACL 的用途
- 设想一个场景:用户
alice需要访问/data/report.txt,但这个文件属于bob,属组是sales,而alice不在sales组里。在不改变文件所有权或将alice加入sales组的情况下,ACL 可以轻松地为alice单独授予访问权限。 - 基本上,ACL 用于在 Linux 中实现更灵活、更细粒度的权限管理。
ACL 命令
getfacl:查看 ACL 权限
getfacl 命令用于显示文件或目录的访问控制列表。
- 查看文件 ACL
1
getfacl /path/to/file
- 输出示例:
1
2
3
4
5
6
7
8# file: my_file.txt
# owner: alice
# group: alice
user::rw-
user:bob:r--
group::r--
mask::r--
other::r--
- 输出示例:

setfacl:设置或修改 ACL 权限
setfacl 命令用于修改文件或目录的 ACL。
为用户添加/修改权限 (
-m)1
setfacl -m u:bob:rwx /path/to/file
为组添加/修改权限 (
-m)1
setfacl -m g:developers:rw /path/to/file
设置默认 ACL (
-d)
默认 ACL 只对目录有效。设置后,在该目录下创建的新文件或子目录会自动继承此默认 ACL。1
2# 为目录设置默认 ACL,让新文件自动给 bob 用户读权限
setfacl -d -m u:bob:r /path/to/dir移除一个特定的 ACL 条目 (
-x)1
setfacl -x u:bob /path/to/file
移除所有扩展 ACL 条目 (
-b)
此命令会移除所有扩展的 ACL 条目,只保留基本的用户、组和其他权限。1
setfacl -b /path/to/file
注意事项
ls -l中的+号
当一个文件或目录设置了 ACL 后,ls -l命令显示的权限末尾会有一个+号,提示您该文件有扩展的 ACL 权限。1
-rwxr--r--+ 1 alice alice 0 Nov 15 10:30 my_file.txt
文件删除权限
能否删除一个文件,取决于对该文件所在的父目录是否具有写(w)和执行(x)权限。对文件本身的写权限(w)只允许修改文件内容,与能否删除该文件无关。