linux / setfacl-使用指定的所有者/组将父目录中的所有当前/将来的文件/目录设置为775


42

我有一个名为“成员”的目录,在该目录下有文件夹/文件。如何递归设置所有当前的文件夹/文件以及将来在其中创建的所有文件夹/文件,默认情况下都具有775权限,分别属于所有者/组没人/管理员?我启用了ACL,已挂载,但似乎无法通过setfacl命令正确执行此操作。任何想法如何做到这一点?

Answers:


62

实际上,到目前为止,我确实找到了我想要的东西,在这里分享,以便遇到此问题的任何人都可以尝试以下解决方案:

sudo setfacl -Rdm g:groupnamehere:rwx /base/path/members/
sudo setfacl -Rm g:groupnamehere:rwx /base/path/members/

R是递归的,这意味着该目录下的所有内容都将应用规则。
d是默认值,这意味着对于在该目录下创建的所有将来项目,默认情况下具有这些规则。 需要m以添加/修改规则。

第一个命令用于新项目(因此为d),第二个命令用于文件夹下的旧项目/现有项目。希望这可以帮助某人,因为这些内容有点复杂并且不是很直观。


2
这正是我需要获得祖父母目录的所有者才能正确修改新孙子目录的内容的条件。
Joost

如果您是Rpi的唯一用户,则可以将g:groupname替换为pi:pi或仅替换为pi
SDsolar

您可以在一行中为用户,组和其他用户指定,例如-Rdm g:groupnamehere:rwx, -Rdm u:groupnamehere:rwx
user2340939

18

与您接受的答案一起...

您可以将这些命令组合为:

sudo setfacl -Rm d:g:groupnamehere:rwx,g:groupnamehere:rwx /base/path/members/

这很酷。您如何设置d:第一个而不是第一个-Rmd?我可以告诉我们第二个参数应该没有default-linux如何接受我这很奇怪。
JREAM'5

1
@JREAM:Linux的(实际上getopt_long)发送整个参数选项-m,其通过手解析通过setfacl用逗号分隔的传递的参数。它们被添加到一个链表中,该链表在实际更改ACL时最后循环通过。
Benoit Duffez

2

linux上的setfacl具有-d-k选项,用于操纵默认权限,这可能是您正在寻找的(有关更多信息,请参见man)。


1

根据适当的授权用户的需求,很容易以递归方式设置简单的UNIX权限,即目录和文件的权限。无法自动强加此功能。

您可以告诉用户使用设置的umask 0002,这有助于在0775处创建新文件(取决于应用程序)。但这不是强制性的。

我的理解是ACL不在UNIX / Linux系统上继承。它们根据需要设置。

至于文件/目录所有权,您在这里很不走运。

对于文件/目录组所有权,通过设置目录set-gid位(即DIRECTORIES上的g + s),确实会导致组所有权被继承。

在这种情况下,我要做的是执行定期的root cron脚本,该脚本将不符合要求的权限/所有权重置为此类目录中的标准。

另一个(不推荐)的过程是在处理这些文件时使用相同的用户ID。用户可以使用自己的UID登录到系统,然后使用sudo或su作为id来完成此操作。尤其对于ACL和权限位,这仍然不是100%。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.