如何为移动或复制到目录的文件设置默认权限?

Rob*_*Rob 9 linux chmod umask

我的问题类似于如何在 linux 中为所有新创建的文件设置默认文件权限- 但在重要方面有所不同:

我希望在(或复制到或移动到)某个目录中创建的所有文件继承一组不同于系统默认值的默认权限。

基本原理:有问题的目录是应用程序的“进料斗”。组中的用户将文件放在目录中,应用程序(在同一组中的另一个用户 ID 下运行)获取并处理它们。问题是放置在目录中的每个文件的所有者都是放置它的用户,权限默认为“rw-r--r--”;我想把它改成“rw-rw----”。执行摄入的应用程序无法明确执行此操作,因为运行该应用程序的用户 ID 不拥有相关文件,并且默认权限不允许应用程序对文件进行 chmod!显然,用户可以在将文件放在那里后执行 chmod - 但我希望用户的“放置”尽可能简单。(这些人不了解 linux,

umask 似乎太强大了:我不想为这些用户在任何地方创建的每个文件设置默认权限 - 只是那些在(或放置在)这个目录中的文件。

请指教……谢谢!

Den*_*son 6

您可以使用 ACL(访问控制列表)为目录中的文件设置默认权限。

来自man 5 acl

如果默认 ACL 与目录关联,则创建文件对象的函数的 mode 参数和目录的默认 ACL 用于确定新对象的 ACL:

  1. 新对象继承包含目录的默认 ACL 作为其访问 ACL。

  2. 修改与文件权限位对应的访问 ACL 条目,以便它们不包含不包含在 mode 参数指定的权限中的权限。

设置(相应地更改设备、目录等):

编辑您的/etc/fstab文件并添加acl挂载选项。

/dev/mapper/star-home /home ext3  defaults,acl 0 2
Run Code Online (Sandbox Code Playgroud)

重新挂载桑巴mount.cifs手册页)文件系统通过重新启动或使用:

mount -o remount,acl /home
Run Code Online (Sandbox Code Playgroud)

确保您拥有setfaclgetfacl实用程序。

在目录上设置默认 ACL(您可能还需要在现有文件上设置 ACL):

$ setfacl -m d:user:george:rwx,d:group:sales-g:rwx,d:group:marketing-g:rwx projections
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅链接的教程。

来源:教程第 1部分第 2 部分

参考:Linux 上的 POSIX 访问控制列表


Pet*_*aut 1

我可以提供一个解决方法:创建一个单独的“放置”目录,在那里运行一个单独的迷你作业来修复权限,然后将文件移动到应用程序的数据目录中。您可以使用 incron 来实现这一点,这样几乎不会有明显的时间延迟。