使用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将安排文件和目录来获取目录的组所有权。 除此之外,我会用另一个umask ( umask 775; exec my-daemon )来启动另一个脚本。 (虽然这不会传播setgid位)。
其他可能性包括更改守护进程执行的组(因为没有标准的sg命令,我将使用Perl或Python包装来执行此操作)或使用POSIX ACL( setfacl )。 使用后者可能需要在某些Linux发行版中使用acl选项装入相关文件系统。
您可以使用几个选项:
umask 002或其他适当的值更改umask。 这可以在运行守护进程的脚本中完成,以便它不会更改根目录默认值。 还可以在脚本中使用newgrp将组更改为与app_user使用的组相同的组,或者将另一组app_user为app_user和root共享。 您可能必须将root和/或app_user添加到您select的组。
为只有app_user才能访问的目录创build一个samba共享。 使用force user root或force group root来启用访问来删除文件。
启用POSIX ACL并创build一个允许app_user适当访问这些文件的ACL。
您可以select合并这些选项中的一部分。