ACL 设置语法的说明
提供以下两种基本的 ACL 格式:
-
普通 ACL-只包含传统的 UNIX user、group 和 owner 条目。
使用以下命令语法设置普通 ACL。
chmod [options] A[index]{+|=}owner@ |group@ |everyone@: \
access-permissions/...[:inheritance-flags]:deny | allow file
chmod [options] A-owner@, group@, everyone@: \
access-permissions/...[:inheritance-flags]:deny | allow file ...
chmod [options] A[index]- file
-
非普通 ACL-不仅包含 owner、group 和 everyone 条目,还包含其他条目,或者包含一组继承标志,或者是其中的条目以非传统顺序排列。
使用以下命令语法设置非普通 ACL。
chmod [options] A[index]{+|=}user|group:name: \
access-permissions/...[:inheritance-flags]:deny | allow file
chmod [options] A-user|group:name: \
access-permissions/...[:inheritance-flags]:deny | allow file ...
chmod [options] A[index]- file
以下列表说明了设置普通和非普通 ACL 的命令所使用的选项。
- owner@, group@, everyone@
-
标识用于普通 ACL 语法的 ACL-entry-type。有关 ACL-entry-type 的说明,请参见Table 7–1。
- user|group:ACL-entry-ID(username 或 groupname)
-
标识用于显式 ACL 语法的 ACL-entry-type。用户和组的 ACL-entry-type 还必须包含 ACL-entry-ID、username 或 groupname。有关 ACL-entry-type 的说明,请参见Table 7–1。
- access-permissions/.../
-
标识授予或拒绝的访问权限。有关 ACL 访问特权的说明,请参见Table 7–2。
- inheritance-flags
-
标识一组可选的 ACL 继承标志。有关 ACL 继承标志的说明,请参见Table 7–4。
- deny |allow
-
标识授予还是拒绝访问权限。
在以下示例中,owner@、group@ 或 everyone@ 不存在 ACL-entry-ID 值。
group@:write_data/append_data/execute:deny
由于 ACL 中包括特定用户 (ACL-entry-type),因此以下示例中包括 ACL-entry-ID。
0:user:joe:list_directory/read_data/execute:allow
显示的 ACL 项类似于以下内容:
2:group@:write_data/append_data/execute:deny
本示例中指定的2 或索引 ID 用于标识较大 ACL 中的 ACL 项,较大的 ACL 中可能包含对应于所有者、特定 UID、组和各用户的多个项。可以使用 chmod 命令指定索引 ID,以标识 ACL 要修改的部分。例如,可将索引 ID 3 标识为 chmod 命令中的 A3,与以下内容类似:
chmod A3=user:venkman:read_acl:allow filename
下表说明了 ACL 项类型,即所有者、组和其他用户的 ACL 表示形式。
表 7-1 ACL 项类型
|
|
owner@
|
指定授予对象所有者的访问权限。
|
group@
|
指定授予对象所属组的访问权限。
|
everyone@
|
指定向不与其他任何 ACL 项匹配的任何用户或组授予的访问权限。
|
user
|
通过用户名指定向对象的其他用户授予的访问权限。必须包括 ACL-entry-ID,其中包含 username 或 userID。如果该值不是有效的数字 UID 或 username,则该 ACL 项的类型无效。
|
group
|
通过组名指定向对象的其他组授予的访问权限。必须包括 ACL-entry-ID,其中包含 groupname 或 groupID。如果该值不是有效的数字 UID 或 groupname,则该 ACL 项的类型无效。
|
|
下表介绍了 ACL 访问特权。
表 7-2 ACL 访问特权
|
|
|
add_file
|
w
|
向目录中添加新文件的权限。
|
add_subdirectory
|
p
|
在目录中创建子目录的权限。
|
append_data
|
p
|
当前未实现。
|
delete
|
d
|
|
delete_child
|
D
|
删除目录中的文件或目录的权限。有关特定的 delete_child 权限行为的更多信息,请参见 Table 7–3。
|
execute
|
x
|
执行文件或搜索目录内容的权限。
|
list_directory
|
r
|
列出目录内容的权限。
|
read_acl
|
c
|
读取 ACL 的权限 (ls)。
|
read_attributes
|
a
|
读取文件的基本属性(非 ACL)的权限。将基本属性视为 stat 级别属性。允许此访问掩码位意味着该实体可以执行 ls(1) 和 stat(2)。
|
read_data
|
r
|
读取文件内容的权限。
|
read_xattr
|
R
|
读取文件的扩展属性或在文件的扩展属性目录中执行查找的权限。
|
synchronize
|
s
|
当前未实现。
|
write_xattr
|
W
|
创建扩展属性或向扩展属性目录进行写入的权限。
向用户授予此权限意味着用户可为文件创建扩展属性目录。属性文件的权限可以控制用户对属性的访问。
|
write_data
|
w
|
修改或替换文件内容的权限。
|
write_attributes
|
A
|
将与文件或目录关联的时间更改为任意值的权限。
|
write_acl
|
C
|
编写 ACL 的权限或使用 chmod 命令修改 ACL 的能力。
|
write_owner
|
o
|
更改文件的所有者或组的权限,或者对文件执行 chown 或 chgrp 命令的能力。
获取文件所有权的权限或将文件的组所有权更改为由用户所属组的权限。如果要将文件或组的所有权更改为任意用户或组,则需要 PRIV_FILE_CHOWN 特权。
|
|
下表提供了有关 ACL delete 和 delete_child 行为的其他详细信息。
表 7-3 ACL delete 和 delete_child 权限行为
|
|
|
ACL 允许 delete
|
ACL 拒绝 delete
|
未指定 delete 权限
|
ACL 允许 delete_child
|
允许
|
允许
|
允许
|
ACL 拒绝 delete_child
|
允许
|
拒绝
|
拒绝
|
ACL 仅允许 write 和 execute
|
允许
|
允许
|
允许
|
ACL 拒绝 write 和 execute
|
允许
|
拒绝
|
拒绝
|
|
ZFS ACL 集合
可以在 ACL 集合中应用以下 ACL 组合,而不需要分别设置各个权限。有以下 ACL 集合可用。
|
|
full_set
|
所有权限
|
modify_set
|
除 write_acl 和 write_owner 外的所有权限
|
read_set
|
read_data、read_attributes、read_xattr 和 read_acl
|
write_set
|
write_data、append_data、write_attributes 和 write_xattr
|
|
这些 ACL 集合是预定义的,不能修改。