setfacl
在类似Unix的操作系统上,setfacl命令设置文件访问控制列表。
查看英文版
1 setfacl 运行系统环境
2 setfacl 描述
3 setfacl 语法
4 setfacl 例子
setfacl 运行系统环境
Unix&Linux
setfacl 描述
该setfacl的工具集的访问控制列表(ACL)的文件和目录。在命令行上,一系列命令后面是一系列文件(依次是其他文件序列,依此类推)。
选项-m和-x期望在命令行上使用ACL。多个ACL条目用逗号(“ , ”)分隔。选项-M和-X从文件或标准输入读取ACL 。ACL条目格式在下面的“ ACL条目”部分中进行了描述。
该--set和--set-file选项设置一个文件或目录的访问控制列表。先前的ACL被替换。此操作的ACL条目必须包含权限。
该-m(--modify)和-M(--modify-file)选项修改文件或目录的访问控制列表。此操作的ACL条目必须包含权限。
在-x(--remove)和-X(--remove-file)选项中删除ACL条目。删除不存在的条目不是错误。除非定义了POSIXLY_CORRECT环境变量,否则只有不具有perms字段的ACL条目才能被接受为参数。
使用-M和-X选项从文件读取时,setfacl接受getfacl产生的输出。每行最多有一个ACL条目。在井号(“ # ”)之后,直到行尾的所有内容都被视为注释。
如果在不支持ACL的文件系统上使用setfacl,则setfacl会在文件模式权限bit上运行。如果ACL不能完全适合权限位,则setfacl修改文件模式权限位以尽可能接近ACL,将错误消息写入标准错误,并以大于0的退出状态返回。
授予文件所有者和具有CAP_FOWNER能力的进程修改文件ACL的权限,类似于访问文件模式所需的权限。
在当前的Linux系统上,root是唯一具有CAP_FOWNER功能的用户,因此,如果您不是文件的所有者,则您必须是超级用户才能使用setfacl。
查看英文版
setfacl 语法
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
setfacl --restore=file
选件
-b,--remove-all | 删除所有扩展的ACL条目。所有者,组和其他所有者的基本ACL条目将保留。 |
-k,--remove-default | 删除默认ACL。如果不存在默认ACL,则不会发出警告。 |
-n,-- no-mask | 不要重新计算有效的权限掩码。setfacl的默认行为是重新计算ACL掩码条目,除非明确给出了掩码条目。掩码条目设置为拥有组的所有权限以及所有命名的用户和组条目的并集。(这些正是受掩码条目影响的条目)。 |
--mask | 即使已明确给出ACL掩码条目,也要重新计算有效权限掩码。(请参阅-n选项。) |
-d,--default | 所有操作均适用于默认ACL。输入集中的常规ACL条目将提升为默认ACL条目。输入集中的默认ACL条目将被丢弃。(如果发生这种情况,将发出警告)。 |
--restore =file | 恢复由“ getfacl -R ”或类似文件创建的权限备份。使用此机制可以还原完整目录子树的所有权限。如果输入包含所有者注释或组注释,则setfacl尝试还原所有者和所有者组。如果输入包含标志注释(定义了setuid,setgid和sticky位),则setfacl相应地设置这三个位;否则,将清除它们。此选项不能与“ --test ”以外的其他选项混合使用。 |
- test | 测试模式。列出更改后的ACL而不是更改任何文件的ACL。 |
-R,--recursive | 递归地将操作应用于所有文件和目录。此选项不能与“ --restore ”混合使用。 |
-L,--logical | “逻辑漫游”:跟随目录的符号链接。默认行为是遵循符号链接参数,并跳过子目录中遇到的符号链接。仅与-R组合有效。此选项不能与“ --restore ”混合使用。 |
-P,--physical | “物理漫游”:不要遵循指向目录的符号链接。这也会跳过符号链接参数。仅与-R组合有效。此选项不能与“ --restore ”混合使用。 |
-v,-- version | 打印setfacl的版本,然后退出。 |
-h,--help | 打印说明命令行选项的帮助消息。 |
- | 双破折号表示命令行选项的结尾;所有其余参数都解释为文件名。该选项对于以破折号开头的文件名特别有用。 |
-- | 如果文件名参数是单破折号,则setfacl从标准输入中读取文件列表。 |
ACL条目
setfacl可以识别以下ACL条目格式(以下格式的空格是可选的,但为了清楚起见已将其包括在内):
[ d [ efault ] :] [ u [ser] :] uid [:perms] | 用户标识为uid的用户的权限,或者如果uid为空,则为文件所有者的权限。 |
[ d [ efault ] : ] g [roup] :gid [ :perms ] | 组ID为gid的组的权限,如果gid为空,则为所属组的权限。 |
[ d [ efault ] : ] m [ask] [:] [ :perms] | 有效的权限掩码。 |
[ d [ efault ] : ] o [ther] [:] [ :perms] | 他人的许可。 |
分隔 符和非分隔符之间的空格将被忽略。
正确的ACL条目,包括权限用于修改和设置操作(选项-m,-M,--set和--set文件)。没有perms字段的条目用于删除条目(选项-x和-X)。
对于uid和gid,您可以指定名称或数字。
该烫发场是一个指示权限字符的组合:读取(" - r"),写("w "),执行("X ”),或者“只执行,如果该文件是一个目录或已经执行权限某些用户”(大写的“ X ”)。或者,权限字段可以是八进制数字(“ 0 ”-“ 7 ”)。
自动创建的条目
最初,文件和目录仅包含所有者,组和其他所有者的三个基本ACL条目。要使ACL有效,需要满足一些规则:
- 这三个基本条目无法删除。这些基本条目类型中的每一个必须仅有一个条目。
- 每当ACL包含命名的用户条目或命名的组对象时,它也必须包含有效的权限掩码。
- 每当ACL包含任何默认ACL条目时,三个默认ACL基本条目(默认所有者,默认组和默认其他)也必须存在。
- 每当默认ACL包含命名用户条目或命名组对象时,它也必须包含默认有效权限掩码。
为了帮助用户确保这些规则,setfacl在以下条件下从现有条目创建条目:
- 如果ACL包含命名用户或命名组条目,并且不存在任何掩码条目,则会创建一个包含与组条目相同权限的掩码条目。除非给出-n选项,否则将进一步调整掩码条目的权限以包括受掩码条目影响的所有权限的并集。(请参阅-n选项说明)。
- 如果创建了默认ACL条目,并且默认ACL不包含所有者,拥有组或其他条目,则将ACL所有者,拥有组或其他条目的副本添加到默认ACL。
- 如果默认ACL包含命名的用户条目或命名的组条目,并且不存在任何掩码条目,则将添加包含与默认ACL的组条目具有相同权限的掩码条目。除非给出-n选项,否则将进一步调整掩码条目的权限以包括受掩码条目影响的所有权限的并集。(请参阅上面的-n选项说明)。
查看英文版
setfacl 例子
setfacl -m u:lisa:r file
授予用户lisa对文件file的读取访问权限。
setfacl -m m::rx file
撤消所有组和所有命名用户(使用有效权限掩码)对文件file的写访问权。
setfacl -x g:staff file
从文件file的ACL中删除组staff的组条目。
getfacl file1 | setfacl --set-file=- file2
将file1的ACL复制到file2。
getfacl --access dir | setfacl -d -M- dir
将访问ACL复制到默认ACL。
查看英文版