我有一个名为“members”的目录,其下有文件夹/文件。如何以递归方式将所有当前文件夹/文件以及将来在此创建的文件夹/文件设置为默认具有 775 权限,并分别属于所有者/组 nobody/admin?我启用了 ACL 并已安装,但似乎无法让 setfacl 命令正确执行此操作。有什么想法可以实现此操作吗?
答案1
我确实找到了一些可以满足我要求的东西,在这里分享,以便遇到此问题的任何人都可以尝试此解决方案:
sudo setfacl -Rdm g:groupnamehere:rwx /base/path/members/
sudo setfacl -Rm g:groupnamehere:rwx /base/path/members/
R是递归的,这意味着该目录下的所有内容都将应用该规则。
d是默认的,这意味着对于该目录下创建的所有未来项目,都默认应用这些规则。
米需要添加/修改规则。
第一个命令用于新项目(因此是 d),第二个命令用于文件夹下的旧/现有项目。希望这能帮助到某些人,因为这些东西有点复杂,而且不太直观。
答案2
按照您接受的答案...
您可以将这些命令组合在一起,如下所示:
sudo setfacl -Rm d:g:groupnamehere:rwx,g:groupnamehere:rwx /base/path/members/
答案3
Linux 上的 setfacl 具有用于操作默认权限的-d
选项-k
,这可能就是您正在寻找的(有关更多信息,请参阅 man)。
答案4
根据适当授权用户的要求,可以很容易地递归设置简单的 UNIX 权限、目录和文件的权限。但无法自动实施此操作。
您可以告诉用户使用 umask 0002 的设置,这有助于在 0775 处创建新文件(取决于应用程序)。但这不是强制执行的。
我的理解是,ACL 在 UNIX/Linux 系统上不会被继承。它们是根据需要设置的。
至于文件/目录所有权,你在这里几乎没有什么运气。
至于文件/目录组所有权,通过设置目录 set-gid 位(即 DIRECTORIES 上的 g+s),这确实会导致组所有权被继承。
在这种情况下,我所做的是执行定期的 root cron 脚本,将此类目录中不符合要求的权限/所有权重置为标准。
另一个(不推荐)方法是在处理这些文件时使用相同的用户 ID。这可以通过用户以自己的 UID 登录系统,然后使用 sudo 或 su 以该 ID 运行来实现。这仍然不是 100% 的,尤其是涉及 ACL 和权限位时。