了解Linux命令setfacl

Setfacl实用程序设置文件和目录的访问控制列表(ACL)。 在命令行中 ,一系列命令之后是一系列文件(接下来可以跟着另一个命令序列......)。

选项-m-x在命令行上需要一个ACL。 多个ACL条目由逗号字符(`,')分隔。 选项-M-X从文件或标准输入读取ACL。 ACL条目格式在ACL ENTRIES部分中描述。

--set--set-file选项设置文件或目录的ACL。 之前的ACL被替换。 此操作的ACL条目必须包含权限。

-m(--modify)-M(--modify-file)选项修改文件或目录的ACL。 此操作的ACL条目必须包含权限。

-x( -- remove -X(-- remove -file)选项删除ACL enries。 除非定义了POSIXLY_CORRECT,否则只有不带perms字段的ACL条目才被接受为参数。

当使用-M-X选项从文件读取时,setfacl接受getfacl产生的输出。 每行至多有一个ACL条目。 在磅符号(`#')之后,直到行尾的所有内容都被视为注释。

如果在不支持ACL的文件系统上使用setfacl,setfacl将在文件模式权限位上运行。 如果ACL不能完全符合权限位,setfacl会修改文件模式权限位以尽可能接近地反映ACL,将错误消息写入标准错误,并返回退出状态大于0的状态。

概要

setfacl [-bkndRLPvh] [{-m | -x} acl_spec] [{-M | -X} acl_file]文件...

setfacl --restore =文件

PERMISSIONS

具有CAP_FOWNER能力的文件所有者和进程被授予修改文件ACL的权利。 这与访问文件模式所需的权限类似。 (在当前的Linux系统上,root是唯一具有CAP_FOWNER功能的用户。)

OPTIONS

-b,--remove-all

删除所有扩展ACL条目。 所有者,组和其他人的基本ACL条目将被保留。

-k,--remove-default

删除默认ACL。 如果不存在默认ACL,则不会发出警告。

-n,--no-mask

不要重新计算有效的权利掩码。 setfacl的默认行为是重新计算ACL掩码条目,除非明确指定掩码条目。 掩码条目设置为拥有组的所有权限的联合,以及所有已命名的用户和组条目。 (这些正是受掩码条目影响的条目)。

- 面具

即使明确给出ACL掩码条目,也要重新计算有效的权限掩码。 (请参阅-n选项。)

-d, - 默认

所有操作都适用于默认ACL。 输入集中的常规ACL条目将被提升为默认ACL条目。 输入集中的默认ACL条目将被丢弃。 (如果发生这种情况,会发出警告)。

--restore =文件

恢复由`getfacl -R'或类似命令创建的权限备份。 使用此机制恢复完整目录子树的所有权限。 如果输入包含所有者注释或组注释,并且setfacl由root运行,则所有文件的所有者和拥有组也将被恢复。 除了`--test'外,该选项不能与其他选项混合使用。

- 测试

测试模式。 列出所产生的ACL,而不是更改任何文件的ACL。

-R, - 递归

递归地将操作应用于所有文件和目录。 这个选项不能和`--restore'混合使用。

-L, - 逻辑

逻辑走,遵循符号链接。 默认行为是遵循符号链接参数,并跳过子目录中遇到的符号链接。 这个选项不能和`--restore'混合使用。

-P, - 物理

物理漫步,跳过所有符号链接。 这也跳过了符号链接参数。 这个选项不能和`--restore'混合使用。

- 版

打印setfacl的版本并退出。

- 帮帮我

打印帮助解释命令行选项。

命令行选项结束。 所有剩余的参数都被解释为文件名,即使它们以破折号开头。

如果文件名参数是单个破折号,则setfacl从标准输入读取文件列表。

ACL入口

setfacl实用程序可识别以下ACL条目格式(为清楚起见,插入了空格):

[d [efault]:] [u [ser]:] uid [: perms ]

指定用户的权限。 如果uid为空,则文件所有者的权限。

[d [efault]:] g [group]: gid [: perms ]

已命名组的权限。 如果gid为空,则拥有组的权限。

[d [efault]:] m [问] [:] [: 烫发 ]

有效的权利掩码

[d [efault]:] o [ther] [:] [: perms ]

其他人的权限。

分隔符和非分隔符之间的空格被忽略。

正确的ACL条目包括权限在修改和设置操作中使用。 (选项-m-M ,-- set--set-file )。 不带perms字段的条目用于删除条目(选项-x-X )。

对于uidgid,您可以指定一个名称或一个数字。

perms字段是指示权限的字符的组合:read (r) ,write (w) ,execute (x) ,仅当文件是目录或已经具有某用户(X)的执行权限时才执行。 或者, perms字段可以是八进制数字(0-7)。

自动创建的条目

最初,文件和目录仅包含所有者,组和其他人的三个基本ACL条目。 有一些规则需要满足才能使ACL有效:

*

三个基本条目不能被删除。 每个这些基本条目类型必须有一个条目。

*

无论何时ACL包含命名用户条目或命名组对象,它还必须包含有效的权限掩码。

*

无论何时ACL包含任何默认ACL条目,三个默认ACL基本条目(默认所有者,默认组和默认其他)也必须存在。

*

每当默认ACL包含命名用户条目或命名组对象时,它还必须包含默认有效权限掩码。

为了帮助用户确保这些规则,setfacl在以下条件下从现有条目创建条目:

*

如果ACL包含已命名的用户或已命名的组条​​目,并且不存在掩码条目,则会创建包含与组条目相同权限的掩码条目。 除非给出-n选项,否则将对掩码条目的权限进行进一步调整,以包含受掩码条目影响的所有权限的联合。 (请参阅-n选项说明)。

*

如果创建了默认ACL条目,并且默认ACL中不包含所有者,拥有组或其他条目,则会将ACL拥有者,拥有组或其他条目的副本添加到默认ACL中。

*

如果默认ACL包含已命名的用户条目或已命名的组条​​目,并且不存在任何掩码条目,则会添加包含与默认默认ACL的组条目相同权限的掩码条目。 除非给出-n选项,否则掩码条目的权限将进一步调整为包含受掩码条目影响的所有权限的联合。 (请参阅-n选项说明)。

例子

授予额外的用户读取权限

setfacl -mu:lisa:r文件

撤销所有组和所有指定用户的写入权限(使用有效权限掩码)

setfacl -mm :: rx文件

从文件的ACL中删除已命名的组条​​目

setfacl -xg:员工档案

将一个文件的ACL复制到另一个文件

getfacl file1 | setfacl --set-file = - file2

将访问ACL复制到默认ACL中

getfacl -a dir | setfacl -d -M- dir

符合POSIX 1003.1e标准草案17

如果定义了环境变量POSIXLY_CORRECT,setfacl的默认行为将如下更改:所有非标准选项都被禁用。 ``default:''前缀被禁用。 -x-X选项也接受权限字段(并忽略它们)。

也可以看看

umask (1),