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


9

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

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

原理:问题目录是应用程序的“进料斗”。分组中的用户将文件放置在目录中,并且该应用程序(在同一组中的另一个用户ID下运行)将这些文件进行处理。问题在于放置在目录中的每个文件的所有者都是放置在目录中的用户,并且权限默认为“ rw-r--r--”;我想将其更改为“ rw-rw ----”。进行摄取的应用程序无法明确地执行此操作,因为在其下运行的用户ID并不拥有该文件,并且默认权限不允许该应用程序对文件进行chmod!显然,用户可以在将文件放在此处之后执行chmod,但是我想让用户的“放置”尽可能简单。(这些人不懂Linux,

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

请指教...谢谢!

Answers:


5

您可以使用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

重新挂载桑巴mount.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访问控制列表


我不认为将其添加aclmount命令中后,应该将其添加为命令中的选项/etc/fstab。这将是多余的,当您mount在答案中运行命令时,您将获得如下输出:(/dev/vda1 on / type ext4 (rw,errors=remount-ro,acl,acl)请参见acl,acl最后)。如果我没有记错,请更正它。
its_me 2014年

1

我可以提供一种解决方法:创建一个单独的“放置”目录,在其中运行一个单独的minijob来修复权限,然后将文件移动到应用程序的数据目录中。您可以使用incron来实现,因此几乎没有明显的时间延迟。


1

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

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