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

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

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

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

原理:所讨论的目录是应用程序的“入口漏斗”。组中的用户将文件放在目录中,应用程序(在同一组中的另一个用户 ID 下运行)获取并处理它们。问题是,目录中放置的每个文件的所有者都是将其放置在那里的用户,权限默认为“rw-r--r--”;我想将其更改为“rw-rw----”。执行接收的应用程序无法明确执行此操作,因为应用程序运行的用户 ID 不拥有所讨论的文件,并且默认权限不允许应用程序对文件进行 chmod 操作!显然,用户可以在将文件放入那里后执行 chmod - 但我希望让用户的“放下”尽可能简单。(这些人不懂 Linux,他们只是将文件从他们的 Windows 桌面拖放到(Samba)网络共享 - 即他们甚至不知道他们正在与 Linux 系统交互。)

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

请指教...谢谢!

答案1

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

man 5 acl

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

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

  2. 修改与文件权限位相对应的访问 ACL 条目,使得它们不包含模式参数指定的权限中未包含的权限。

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

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

/dev/mapper/star-home /home ext3  defaults,acl 0 2

重新挂载Sambamount.cifs手册页)通过重新启动来恢复文件系统,或者使用:

mount -o remount,acl /home

确保您拥有setfaclgetfacl公用设施。

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

$ setfacl -m d:user:george:rwx,d:group:sales-g:rwx,d:group:marketing-g:rwx projections

请参阅链接的教程以了解更多信息。

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

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

答案2

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

答案3

我能想到四种可能的方法:

  • umask,您不想使用
  • 程序包装器,它设置应用程序的 umask,而不是用户的
  • cron,正如@Peter Eisentraut 所描述的;find $HOME/intake -type f -exec chmod 660 {} \;,不同的系统对此有性能改进(例如选项-exec+
  • 基于目录的设置,这需要一点 shell 编程才能完成,但基本上,shell 在设置提示符或调用 cd 时,如果该目录中存在点文件(或可能是祖先目录),则会更改 umask;对于 bash 来说,这PROMPT_COMMAND='test -s $PWD/.umask && umask $(cat $PWD/.umask)'";$PROMPT_COMMAND"是最简单的。

相关内容