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

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

使用CentOS 4.6:

场景:我有一个以 root 身份运行的守护进程,该守护进程不断在目录 /some/directory 中创建文件和文件夹。由于文件是由 root 创建的,因此这些文件夹和文件的权限由 root 的 umask 决定,文件的默认值为 644,文件夹的默认值为 755。

我有一个通过 samba 访问这些文件的应用程序,需要能够复制和删除这些文件。应用程序使用的 samba 用户名映射到一个用户,比如说“app_user”,由于权限原因,该用户无法删除这些文件。我已将“app_user”添加到组“app_group”

这就是我想要做的:

我希望有某种方法来配置目录 /some/directory,以便创建的所有文件和文件夹都归组“app_group”所有并对该组具有写权限。

我没有选择以不同的用户名运行守护进程,也不想弄乱 root 的 umask。我更喜欢不涉及运行脚本来更改权限的解决方案。我只希望我的应用程序能够复制和删除这些文件。

谢谢

答案1

我会选择 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 

进一步的测试在 /some/directory 中创建一个文件和一个目录,并确保它们最终具有 acl,并且对于目录,使用默认 acl。因此,在其中创建的文件也将获得 acl

答案2

我认为你可以尝试使用POSIX ACL以获取所需的内容。搜索有关默认 ACL这基本上就是将应用于默认 ACL 处于活动状态的目录下创建的对象的 ACL。
应用默认 ACL允许您的应用程序用户对目录中的文件执行操作并且它应该可以工作,除非对默认 ACL 和 root 创建的文件有一些限制(我不记得是否有),所以尝试一下,看看它是否有效。

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

编辑:另外,请务必阅读所有 ACL 文档,这不是一件容易的事情。

答案3

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

答案4

您有以下几种选择:

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

  • 为该目录创建仅app_user可访问的 Samba 共享。使用force user rootforce group root启用访问权限以删除文件。

  • app_user启用 POSIX ACL 并创建允许适当访问文件的ACL 。

您可以选择组合其中一些选项。

相关内容