Linux:强制不同的目录/文件权限集

使用CentOS 4.6:

场景:我有一个以root身份运行的dameon,它可以在目录/ some /目录中不断创build文件和文件夹。 由于这些文件是由root创build的,所以这些文件夹和文件的权限是由root的umask决定的,默认的文件是644,文件夹是755。

我有一个应用程序,通过桑巴访问这些文件,需要能够复制和删除文件。 应用程序正在使用的samba用户名被映射到一个用户,让他们说'app_user'由于权限而无法删除这些文件。 我已经将“app_user”添加到组“app_group”

这是我想要做的事情:

我希望有一些方法来configuration目录/ some /目录,以便创build的所有文件和文件夹都属于组“app_group”,并具有该组的写入权限。

我没有select使用不同的用户名运行dameon,我不想用umask搞乱root。 我宁愿不涉及运行脚本来更改权限的解决scheme。 我只想让我的应用程序能够复制和删除这些文件。

谢谢

我会去POSIX ACL。 我是他们的忠实粉丝,我不觉得他们都很难使用。 唯一觉得你真的需要确定的是你的备份软件可以恢复它们。

步骤应该是:

1)编辑fstab并将“,acl”添加到要使用ACLS的分区的选项

2)运行以下命令以使用新的acl选项重新挂载分区

mount <relevant_partion> -oremount 

3)运行以下命令将默认的acl应用到该目录及其子目录:

 setfacl -R -dm u:app_user:755 /some/directory 

4)运行以下命令来检查默认的acl已经出现:

 getfacl /some/directory 

进一步testing在/ some /目录下创build一个文件和一个目录,并确保它们以acl结尾,在dir的情况下,默认为acl。 所以它里面创build的文件也会得到acl

我想你可以尝试使用POSIX ACL来获得你所需要的。 search有关默认ACL的文档,这基本上是将应用于在默认ACL处于活动状态的目录下创build的对象的ACL。
应用一个默认的ACL允许你的应用程序用户做目录上的文件的东西,它应该工作,除非有一些关于默认的ACL和根创build的文件的限制(我不记得是否有),所以试试看如果它工作。

要使用ACL,您需要您的文件系统来支持它,有时也需要在挂载时启用( -o acl on fstab上的mount或acl选项)。 我认为SAMBA还需要一些额外的configuration来识别ACL,但我知道它(我们在工作中使用它)。

编辑 :也一定要阅读所有的ACL文件,这不是一个微不足道的事情使用。

chgrp app_group /some/directory; chmod g+s /some/directory chgrp app_group /some/directory; chmod g+s /some/directory将安排文件和目录来获取目录的组所有权。 除此之外,我会用另一个umaskumask 775; exec my-daemon )来启动另一个脚本。 (虽然这不会传播setgid位)。

其他可能性包括更改守护进程执行的组(因为没有标准的sg命令,我将使用Perl或Python包装来执行此操作)或使用POSIX ACL( setfacl )。 使用后者可能需要在某些Linux发行版中使用acl选项装入相关文件系统。

您可以使用几个选项:

  • 在运行该命令之前,使用umask 002或其他适当的值更改umask。 这可以在运行守护进程的脚本中完成,以便它不会更改根目录默认值。
  • 还可以在脚本中使用newgrp将组更改为与app_user使用的组相同的组,或者将另一组app_userapp_user和root共享。 您可能必须将root和/或app_user添加到您select的组。

  • 为只有app_user才能访问的目录创build一个samba共享。 使用force user rootforce group root来启用访问来删除文件。

  • 启用POSIX ACL并创build一个允许app_user适当访问这些文件的ACL。

您可以select合并这些选项中的一部分。