在多用户系统中维护Linux文件所有者和组信息

我有一个在Linux上运行的Web应用程序(使用CentOS 6),使用通用的非root用户名,比如app1。 我将文件夹/ home / app1下的所有文件与该用户/组相关联(使用chown -R app1:app1),以便可以根据需要提供网页并写入日志。 当涉及到更新,虽然我想弄清楚如何处理权限,以便我不需要经常在/ home / app1目录上运行chown命令。 需要使用唯一的IDlogin到服务器,因此如果devguy1login并复制更新,他现在写入的文件将拥有devguy1作为所有者和组,并且app1将无法读取新文件。 Devguy1是app1组的一部分,所以他们可以更新应用程序,但反之亦然。 我发现有一种方法可以使用cp -p来复制文件,这样可以保留权限,但是我们通常使用Beyond Compare将更新从Dev服务器移动到没有该选项的生产环境中。 是否有父文件夹上的设置,可以使文件保持的App1所有者/组信息或有一种方式,当一个新的用户被创build,我可以添加到他们的组的app1?

在/ home / app1下的所有目录中设置setuid和setgid位:

find /home/app1 -type d -exec chmod ug+s '{}' + 

(请参阅man find以了解find命令, man chmod以了解setuid和setgid位)。当在任何现有目录中创build新文件和目录时,将导致保留用户和组所有者。

我相信有些情况下仍然会忽略suid和sgid位,比如保存到SMB共享,​​或者使用cp -p完整地复制权限。 但大多数情况下,它应该工作。

另一个select,这是不是你要求严格的是使用posix ACL设施。

下面是一个例子,我用这个例子来维护基于本地组的结构的权限以及拥有的userid:

 # Do this once or occasionally, but only cosmetic chown -R network:network /local/network setfacl -R -m user:network:rwx /local/network setfacl -R -dm user:network:rwx /local/network setfacl -R -m group:it-neteng-users:rwx /local/network setfacl -R -dm group:it-neteng-users:rwx /local/network 

在非常古老的内核上,可能需要使用'acl'选项来挂载文件系统才能使用,但是对于任何现代合理的东西,这都不是必需的。

在你的情况下,你可能想使用acl'ing来授予web服务器perms来读取文件,那么所有权实际上并不重要。