文件ACL-控制
介绍
ACL (Access Control List) 是一种在 Linux 系统中用于扩展文件和目录权限的机制. ACL 提供了更细粒度的权限控制, 允许对特定文件或目录中的个别用户或用户组设置特定的权限.
如, 给 user1 可读写权限, user2 只读权限, user3 没有任何权限.
主要是三个命令:
- getfacl (Get File ACL), 用于获取文件或目录的 ACL
- setfacl (Set File ACL), 用于设置文件或目录的 ACL
- chacl (Change ACL), 用于修改文件或目录的 ACL
getfacl 的使用
语法:
1 |
|
常用选项:
-a
,--access
, 显示文件的访问控制列表-d
,--default
, 显示默认的访问控制列表-c
,--omit-header
, 不显示注释表头-e
,--all-effective
, 显示所有有效权限-E
,--no-effective
, 显示无效权限
对于文件或目录(不包括目录下的文件):
1 |
|
输出如:
1 |
|
- 前三行为注释表头
user::rwx
为一条 ACL Entries, 表示对所有者的权限设置.group::r-x
是对所属组的权限设置.other::r-x
是对其他用户的权限设置.
若要作用域目录下的全部文件:
1 |
|
递归作用于所有子目录:
1 |
|
setfacl 的使用
可以从命令行指定文件列表, 也可以从文件或 stdin 处获取文件列表.
文件列表用 ,
(逗号) 分隔.
可以设置, 也可以修改 ACL.
设置时, 需要满足 ACL Entries 的格式.
语法:
1 |
|
必须选用的选项解释:
-m
,--modify
, 表示修改或添加 acl-M
,--modify-file
, 从文件中读取 acl 规则-x
,--remove
, 移除指定用户或用户组的 acl 条目-X
,--remove-file
, 从文件中读取要移除的条目
其他常用选项有:
-b
,--remove-all
, 删除所有 acl 设定-k
,--remove-default
, 删除默认的 acl 设定-R
,--recursive
, 递归设置 acl-d
,--directory
, 设置目录的 acl
ACL Entries 的格式
如为 user 设置一个 entry:
1 |
|
也就是可以写为:
1 |
|
或:
1 |
|
(注意这里的 u
, user
是关键字, 而不是具体名字)
注意这里 uid :perms
之间的空白符其实可以忽略.
uid
可以直接写用户名.
perms
也可以为字符或数字的格式.
同理设置 group, mask 和 other:
1 |
|
(同样注意 g
, group
, m
, mask
, o
, other
这些是关键字)
默认的 ACL Entries
一般文件和目录会有三个 base ACL entries 作用于 owner, group 和 others:
1 |
|
ACL Entries 起作用需要满足的条件
- base entries 不能被移除. user, group, 和 other 都至少需要设置一条
- 当 entries 中有 named user entries 或 named group entries 时, 需要加上合适的 mask
示例
有几个参数需要注意:
-s
(--set
),-m
(--modify
), 和-x
(--remove
) 都从命令行获取文件列表.-S
(--set-file
),-M
(--modify-file
), 和-X
(--remove-file
) 从文件或 stdin 获取文件列表
1 |
|
给指定用户添加 acl
1 |
|
从文件读取要添加的 acl
1 |
|
acl_rules.txt
的文件内容可以为:
1 |
|
chacl 使用
语法:
1 |
|
常用选项有:
-b
, 同时修改文件权限和默认目录权限-d
, 设置目录的默认权限-R
, 只删除文件的权限-D
, 只删除目录的权限-B
, 删除所有权限-I
, 列出所有文件和目录的权限-r
, 递归设置
示例
1 |
|
也可以用来获取 ACL:
1 |
|
文件ACL-控制
http://example.com/2023/11/05/文件ACL-控制/