Linux文件的ACL权限
ACL
ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。
它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。
它被设计为UNIX文件权限管理的一个补充。
ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。
场景
通常无论文件还是目录都会有基础的三类权限
- 拥有者(owner):文件的创建者或拥有者。
- 用户组(group):文件所属的用户组。
- 其他人(others):除拥有者和用户组之外的所有用户。
而无特殊需求的情况下,这三类就基本满足需求了
但是如果出现了需要有第四类权限的需求,基础权限就无法满足了
这个时候,就需要使用ACL了
使用
查看ACL权限
使用 getfacl
命令
getfacl 文件/目录名
示例
$ getfacl a
# file: a
# owner: root
# group: root
user::rwx
group::r-x
other::r--
default:user::rwx
default:user:user2:---
default:group::r-x
default:mask::r-x
default:other::r--
$ getfacl 111.log
# file: 111.log
# owner: root
# group: root
user::rw-
user:user2:---
group::r--
mask::r--
other::r--
操作ACL权限
使用 setfacl
命令
参数
setfacl [-bkRd] [{-m|-x} acl参数] 文件/目录名
-m
:配置后面的 acl 参数给文件/目录使用,不可与-x
合用;-x
:删除后续的 acl 参数,不可与-m
合用;-b
:移除所有的 acl 配置参数;-k
:移除默认的 acl 参数;-R
:递归配置 acl; 既设定的 acl 权限会对目录下所有子文件生效。-d
:配置“默认 acl 参数”,只对目录有效,在该目录新建的数据会引用此默认值;
添加或修改ACL权限
# 对文件test.txt设置user2用户的权限是---
setfacl -m u:user2:--- test.txt
# 对文件1设置user2组的权限是rwx
setfacl -m g:user2:rwx test.txt
结果
$ ll test.txt
# 会发现最后的 . 变成了 +
-rw-r--r--+ 1 root root 0 Aug 6 03:24 test.txt
$ getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:user2:---
group::r--
group:user2:rwx
mask::r--
other::r--
删除ACL权限
setfacl -x u:user2 test.txt
$ getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
group::r--
group:user2:rwx
mask::r--
other::r--
setfacl -x g:user2 test.txt
$ getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
$ ll test.txt
# 会发现最后的 . 变成了 +
-rw-r--r--+ 1 root root 0 Aug 6 03:24 test.txt
此时我们虽然已经删掉了添加的两条acl,但是在ll
的时候,还是有+
这个时候就需要用到 -b
了,清除所有acl规则
$ setfacl -b test.txt
$ ll test.txt
-rw-r--r--. 1 root root 0 Aug 6 03:24 test.txt
默认ACL权限(default)
default 权限在 ACL(Access Control List)中的继承行为是为了方便和简化权限管理。
当我们在一个目录上设置了 default 权限时,这些权限会自动应用于该目录下新创建的文件或子目录。
修改 default 权限
# 修改文件夹a的default权限中grop的权限为---
setfacl -d -m g::--- a
$ getfacl a
# file: a
# owner: root
# group: root
user::rwx
group::r-x
other::r--
default:user::rwx
default:group::---
default:other::r--
此时我们再在a目录下创建文件夹
$ mkdir a/dir1
$ getfacl a/dir1
# file: a/dir1
# owner: root
# group: root
user::rwx
group::---
other::r--
default:user::rwx
default:group::---
default:other::r--
可以看到不仅继承了default权限,而且自己的权限也是继承的父目录的default权限
创建文件
$ touch a/file1
$ getfacl a/file1
# file: a/file1
# owner: root
# group: root
user::rw-
group::---
other::r--
可以看到,文件是没有default权限的,但是自己的权限也是继承自父目录的default权限的,因为文件的满权限也只是666,所以default中的执行权限是无法继承到文件中的
添加或修改其他default权限
例如 需要文件夹中所有创建的文件夹或者文件对 user2
的权限都是 r-x
$ setfacl -m d:u:user2:r-x a
$ getfacl a
# file: a
# owner: root
# group: root
user::rwx
group::r-x
other::r--
default:user::rwx
default:user:user2:r-x
default:group::r-x
default:mask::r-x
default:other::r--
此时在目录a下创建文件和文件夹
$ mkdir a/dir2
$ getfacl a/dir2
# file: a/dir2
# owner: root
# group: root
user::rwx
user:user2:r-x
group::r-x
mask::r-x
other::r--
default:user::rwx
default:user:user2:r-x
default:group::r-x
default:mask::r-x
default:other::r--
$ touch a/file2
$ getfacl a/file2
# file: a/file2
# owner: root
# group: root
user::rw-
user:user2:r-x #effective:r--
group::r-x #effective:r--
mask::r--
other::r--
可以看到,文件夹可以完美继承default权限,但是文件的话,执行权限会无法继承,提示有效的权限是`r--`
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/18345441
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!