学习Linux命令'setfacl'gydF4y2Ba

控制对文件和文件夹的访问gydF4y2Ba

Setfacl实用程序集gydF4y2Ba访问控制列表gydF4y2Ba(acl)文件和gydF4y2Ba目录gydF4y2Ba.在gydF4y2Ba命令行gydF4y2Ba,一个命令序列后面跟着一个文件序列(文件序列后面又可以跟着另一个命令序列,等等)。gydF4y2Ba

  • 的选项gydF4y2Ba- m,gydF4y2Ba而且gydF4y2Ba- xgydF4y2Ba期望在命令行上使用ACL。多个ACL以“,”分隔。的选项gydF4y2Ba- m,gydF4y2Ba而且gydF4y2Ba- xgydF4y2Ba从文件或标准输入读取ACL。ACL表项的格式请参见ACL表项。gydF4y2Ba
  • 的gydF4y2Ba——设置gydF4y2Ba而且gydF4y2Ba——设置文件gydF4y2Baoptions用于设置文件或目录的ACL。原来的ACL被替换。该操作的ACL表项必须包含权限。gydF4y2Ba
  • 的gydF4y2Ba- m(修改)gydF4y2Ba而且gydF4y2Ba- m(——modify-file)gydF4y2Baoptions可以修改ACLgydF4y2Ba文件gydF4y2Ba或目录。该操作的ACL表项必须包含权限。gydF4y2Ba
  • 的gydF4y2Ba- x(——删除)gydF4y2Ba而且gydF4y2Ba- x(——remove-file)gydF4y2Baoptions删除ACL表项。的ACL表项gydF4y2Ba烫发gydF4y2Ba除非POSIXLY_CORRECT被定义,否则字段将被接受为参数。gydF4y2Ba

从文件中读取时使用gydF4y2Ba- m,gydF4y2Ba而且gydF4y2Ba- xgydF4y2Ba选项,setfacl接受输出gydF4y2BagetfaclgydF4y2Ba产生。每行最多有一个ACL表项。在#号之后,直到行尾的所有内容都被视为注释。gydF4y2Ba

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

使用SetfaclgydF4y2Ba

首先,试着为你的文件夹设置一个基本列表gydF4y2Ba主目录gydF4y2Ba.既然这是你第一次尝试,那就做一个新的来玩。这样,你就不会冒着被锁在重要文件之外的风险。gydF4y2Ba

mkdir ~ / acl-testgydF4y2Ba

接下来,使用setfacl授予系统上的另一个用户对文件夹的访问权。Setfacl使用gydF4y2Ba- mgydF4y2Ba标志,以修改文件的访问控制列表。这通常意味着添加一个用户或组。gydF4y2Ba

Setfacl -m u:username:rwx ~/acl-test/gydF4y2Ba

的gydF4y2BaugydF4y2Ba在第一个冒号告诉命令之前,您谈论的是用户名。的gydF4y2Ba特权gydF4y2Ba在第二个许可之后gydF4y2BargydF4y2Ba含铅,gydF4y2BawgydF4y2BaRite和egydF4y2BaxgydF4y2Baecute权限。gydF4y2Ba

通过指定,同样适用于组gydF4y2BaggydF4y2Ba而不是gydF4y2BaugydF4y2Ba在第一个冒号之前。gydF4y2Ba

Setfacl -m g:groupname:rwx ~/acl-test/gydF4y2Ba

它的工作原理与前面的示例相同,只是它向整个组授予权限。gydF4y2Ba

的gydF4y2Ba- xgydF4y2BaFlag的工作原理正好相反gydF4y2Ba- mgydF4y2Ba.它将撤销对指定用户或组的访问权。gydF4y2Ba

Setfacl -x u:username:w ~/acl-test/gydF4y2Ba

该命令撤销用户对目录的写访问。gydF4y2Ba

您也可以直接修改当前所有用户的权限。这包括文件的所有者和被授予权限的任何其他用户。这是一种快捷方式,使用现有命令,但省略了用户名。gydF4y2Ba

Setfacl -m u::rx ~/acl-test/gydF4y2Ba

这将授予所有现有用户读和执行权限,但删除写权限。gydF4y2Ba

这同样适用于gydF4y2Ba- xgydF4y2Ba标记和删除权限。gydF4y2Ba

Setfacl -x u::w ~/acl-test/gydF4y2Ba

这与前面的例子本质上是一样的,只是颠倒过来了。gydF4y2Ba

Setfacl还允许将访问控制列表从一个文件复制到另一个文件。确保您的用户拥有测试文件夹的完全访问权限,并创建两个新文件来使用。gydF4y2Ba

联系~ / acl-test / {1,2} . txt的文件gydF4y2Ba

现在,修改第一个文件的权限。gydF4y2Ba

Setfacl -m u:username:rx ~/acl-text/file1.txtgydF4y2Ba

现在,您可以将getfacl(用于检索当前ACL信息的命令)的结果输送到setfacl中。gydF4y2Ba

Getfacl ~/acl-test/file1.txt | setfacl——set-file=- ~/acl-text/file2.txtgydF4y2Ba

第二个填充将具有与第一个填充相同的权限。gydF4y2Ba

最后,可以删除该命令创建的所有扩展ACL表项。这将使文件保留它最初拥有的用户和组权限。为此,使用-b标志。gydF4y2Ba

Setfacl -b ~/acl-test/gydF4y2Ba

这些是setfacl最常见的用法。如果您想深入了解,本指南的下一部分将对该命令进行完整的技术分析。gydF4y2Ba

Setfacl的技术故障gydF4y2Ba

setfaclgydF4y2Ba[-bkndRLPvh] [{- m | - x} acl_spec] [{- m | - x} acl_file]文件…gydF4y2Ba

setfaclgydF4y2Ba——恢复=文件gydF4y2Ba

权限gydF4y2Ba

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

选项gydF4y2Ba

- b,删除所有gydF4y2Ba

  • 删除所有扩展ACL表项。所有者、组和其他ACL的基本表项将被保留。gydF4y2Ba

- k, remove-defaultgydF4y2Ba

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

- n, no-maskgydF4y2Ba

  • 不要重新计算有效的权限掩码。setfacl的默认行为是重新计算ACL掩码条目,除非显式地给出了掩码条目。掩码表项设置为所属组的所有权限以及所有命名用户和组表项的并集。(这些正是受掩码条目影响的条目)。gydF4y2Ba

——面具gydF4y2Ba

  • 即使显式地给出了ACL掩码条目,也要重新计算有效的权限掩码。(见gydF4y2Ba- ngydF4y2Ba选择。)gydF4y2Ba

- d,默认gydF4y2Ba

  • 所有操作适用于gydF4y2Ba默认的gydF4y2BaACL。输入集中的普通ACL被提升为默认ACL。缺省ACL将被丢弃。(如果发生这种情况,将发出警告)。gydF4y2Ba

——恢复=文件gydF4y2Ba

  • 恢复由' getfacl -R'或类似方法创建的权限备份。通过该机制可以恢复完整目录子树的所有权限。如果输入包含所有者注释或组注释,并且setfacl由root用户运行,则所有文件的所有者和所属组也将被恢复。该选项不能与'——test'以外的其他选项混合使用。gydF4y2Ba

——测试gydF4y2Ba

  • 测试模式。而不是更改任何文件的acl,结果acl被列出。gydF4y2Ba

- r,递归gydF4y2Ba

  • 递归地对所有文件和目录应用操作。该选项不能与“——restore”混合使用。gydF4y2Ba

- l,逻辑gydF4y2Ba

  • 逻辑行走,遵循符号链接。默认行为是遵循符号链接参数并跳过子目录中遇到的符号链接。该选项不能与“——restore”混合使用。gydF4y2Ba

- p,物理gydF4y2Ba

  • 体力行走,跳过一切gydF4y2Ba符号链接gydF4y2Ba.这也跳过了符号链接参数。该选项不能与“——restore”混合使用。gydF4y2Ba

——版本gydF4y2Ba

  • 打印setfacl版本并退出。gydF4y2Ba

——帮助gydF4y2Ba

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

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

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

ACL条目gydF4y2Ba

setfacl实用程序识别以下ACL条目格式:gydF4y2Ba

[d [efault]:] [u (ser):]gydF4y2BauidgydF4y2Ba[:gydF4y2Ba烫发gydF4y2Ba]gydF4y2Ba

  • 命名用户的权限。文件所有者的权限gydF4y2BauidgydF4y2Ba是空的。gydF4y2Ba

[d [efault]:] g(拍卖):gydF4y2BagidgydF4y2Ba[:gydF4y2Ba烫发gydF4y2Ba]gydF4y2Ba

  • 命名组的权限。所属组的权限gydF4y2BagidgydF4y2Ba是空的。gydF4y2Ba

[d[efault]:] m[ask][:] [:]gydF4y2Ba烫发gydF4y2Ba]gydF4y2Ba

  • 有效权限掩码gydF4y2Ba

[d[efault]:] o[ther][:] [:]gydF4y2Ba烫发gydF4y2Ba]gydF4y2Ba

  • 他人权限gydF4y2Ba

分隔符字符和非分隔符字符之间的空白将被忽略。gydF4y2Ba

在修改和设置操作中使用正确的ACL表项,包括权限。(选项gydF4y2Ba- mgydF4y2Ba,gydF4y2Ba- mgydF4y2Ba,gydF4y2Ba——设置gydF4y2Ba而且gydF4y2Ba——设置文件gydF4y2Ba).不包含gydF4y2Ba烫发gydF4y2Ba字段用于gydF4y2Ba删除gydF4y2Ba项的个数(选项)gydF4y2Ba- xgydF4y2Ba而且gydF4y2Ba- xgydF4y2Ba).gydF4y2Ba

为gydF4y2BauidgydF4y2Ba而且gydF4y2BagidgydF4y2Ba可以指定名称或数字。gydF4y2Ba

的gydF4y2Ba烫发gydF4y2Ba字段是表示权限的字符组合:readgydF4y2Ba(右)gydF4y2Ba,写gydF4y2Ba(w)gydF4y2Ba、执行gydF4y2Ba(x)gydF4y2Ba,仅当文件是目录或已具有某些用户的执行权限时才执行gydF4y2Ba(X)gydF4y2Ba.或者,gydF4y2Ba烫发gydF4y2Ba字段为八进制数字(0-7)。gydF4y2Ba

自动创建表项gydF4y2Ba

最初,文件和目录只包含所有者、组和其他的三个基本ACL条目。为了使ACL有效,需要满足一些规则:gydF4y2Ba

  • 这三个基项不能被移除。这些基本项类型中的每一种都必须恰好有一个项。gydF4y2Ba
  • 当ACL包含命名用户项或命名组对象时,它还必须包含有效的权限掩码。gydF4y2Ba
  • 当ACL中包含任何Default ACL表项时,三个Default ACL基表项(Default owner、Default group和Default others)也必须存在。gydF4y2Ba
  • 每当默认ACL包含命名用户项或命名组对象时,它还必须包含默认的有效权限掩码。gydF4y2Ba

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

  • 如果ACL中包含命名用户或命名组表项,且不存在掩码表项,则创建与组表项具有相同权限的掩码表项。除非gydF4y2Ba- ngydF4y2Ba选项时,掩码项的权限将进一步调整为包括受该掩码项影响的所有权限的并集。(见gydF4y2Ba- ngydF4y2Ba选项描述)。gydF4y2Ba
  • 如果创建了Default ACL表项,且Default ACL中不包含所有者、所属组和others表项,则会在Default ACL中添加该ACL所有者、所属组和others表项的副本。gydF4y2Ba
  • 如果Default ACL中包含命名用户表项或命名组表项,且不存在掩码表项,则添加与缺省Default ACL的组表项具有相同权限的掩码表项。除非gydF4y2Ba- ngydF4y2Ba选项时,掩码项的权限将进一步调整为包括受该掩码项影响的所有权限的并集。(见gydF4y2Ba- ngydF4y2Ba选项描述)。gydF4y2Ba

例子gydF4y2Ba

  • 授予额外的用户读访问权限gydF4y2Ba
  • Setfacl -m u:lisa:r文件gydF4y2Ba
  • 撤销所有组和所有指定用户的写访问权限(使用有效权限掩码)gydF4y2Ba
  • Setfacl -m m::rx文件gydF4y2Ba
  • 从文件的ACL中删除命名组条目gydF4y2Ba
  • Setfacl -x g:员工文件gydF4y2Ba
  • 将一个文件的ACL复制到另一个文件gydF4y2Ba
  • Getfacl file1 | setfacl——set-file=- file2gydF4y2Ba
  • 将访问ACL复制到默认ACL中gydF4y2Ba
  • setfacl -d - m - dir |gydF4y2Ba

符合Posix 1003.1e标准草案17gydF4y2Ba

如果定义了环境变量posixly_right,则setfacl的默认行为如下:禁用所有非标准选项。“default:”前缀被禁用。的gydF4y2Ba- xgydF4y2Ba而且gydF4y2Ba- xgydF4y2Ba选项还接受权限字段(并忽略它们)。gydF4y2Ba

这个页面有用吗?gydF4y2Ba