我们在 CentOS 7 服务器上有几个 Apache VirtualHosts,PHP 有时需要创建/编辑/删除文件和/或文件夹的能力,因此权限始终是apache.apache
递归的非常重要。
部署是通过 Jenkins 完成的,作为 Jenkins 用户,我知道我可以只添加一个简单的 shell 执行chown -R apache.apache /var/www/website
,并且我会这样做,但如果我以外的其他人进行了手动部署,或者进行了任何会更改权限的操作,例如创建一个新文件或文件夹,那么可能会导致一些问题。
我曾经想过只创建一个 cron 作业来不时地 chown 整个目录,但是会有 4 个不同的 VHost,并且每个 VHost 可能都有大量文件,因此频繁执行此操作并不是最佳选择,但话又说回来,不频繁执行此操作意味着在更改权限和运行 cron 作业之间可能会出现问题。
那么,有人知道一个好的方法可以确保始终为特定目录设置所有者吗?(递归地)无论用户做什么?
我首先想到的是 Sticky Bits.. 但我认为这只适用于权限,而不适用于所有权。
然后我想到用类似的东西进入,我在谷歌上搜索了一下就找到了。我找到的任何仓库都没有这个,所以你必须手动安装它,但它基本上会在文件夹/文件发生任何变化时触发你指定的命令,所以
ls -d /var/www/foo.company.com | entr sh -c 'chown -R apache.apache /var/www/foo.company.com && echo "Chowned at $(date)" >> /var/log/entr.log'
就足够了...但我确信有一个解决方案不需要在服务器上手动安装这个二进制文件(我尽可能尝试通过 yum 管理软件包)
任何帮助,将不胜感激!
谢谢
更新
佐尔达什提到我应该将apache
用户添加到需要写权限的其他用户组(jenkins
因为这就是我进行部署的方式),然后设置组权限 ID 位(chmod 2775)。
我喜欢这种方法,但现在我遇到了一个问题。
以下是与权限相关的控制台命令/输出
[root@svr www]# chown -R apache.apache www.company.com
[root@svr www]# chmod -R 2775 www.company.com
[root@svr www]# getfacl www.company.com/
# file: www.company.com/
# owner: apache
# group: apache
# flags: -s-
user::rwx
group::rwx
other::r-x
[root@svr www]# ls -l
total 0
drwxrwsr-x. 2 apache apache 6 Apr 29 09:47 www.company.com
看起来还不错吧?但是当我尝试部署时,我遇到了权限问题...但如果我将目录改回0775,它可以工作。为什么当我设置 sgid 时它不起作用?