我被要求在我们部门的networking服务器上build立一个共享的networking空间,这个空间可以被多人访问,并且可能正在运行CGI或PHP脚本。 维护Web空间的人可能会决定使用它来提交文件,这意味着他们需要访问由脚本创build的任何文件。 我们在Scientific Linux 6上运行Apache。
由于多个人需要对Web空间进行写入访问,因此我们的标准方法是创build一个所有相关人员所属的组,然后将Web空间中的目录的权限设置为g+ws 。 suexec对分组可写的文件不满意,拒绝运行它们。
我们如何设置它,并确保任何脚本运行在不同于主要apache帐户的帐户下(并且不同于不在 web空间组中的任何用户)? 对于问责制(和其他)的原因,我宁愿不必build立一个共享的帐户,各种人将不得不用来维持这个networking空间。
对于更多的上下文,下面是我们目前的设置:我们有主目录在NFS上并且根据需要自动安装的用户。 大多数人只是使用通过mod_userdir访问他们的个人网站空间。 过去,我们通过在NFS服务器上创build额外的自动挂载目录来实现对共享web空间的多个请求,这些自动挂载目录与特定帐户无关,但其中的组拥有权设置为便于多个帐户访问。 到目前为止,这些共享空间只包含静态内容(并且我们相信所涉及的人员不会从中运行脚本),所以我们从来不必为这些空间解决任何与suexec有关的问题。
编辑 :请注意,用户可能需要访问由脚本创build的文件。
为了确保在这种情况下的问责制,并为发布的内容提供正确的所有权和许可,我使用了本文中描述的工作stream的稍微修改版本。
这是我已经实现,请注意,大部分件是可replace的:
#!/bin/sh sudo /usr/local/sbin/publisher-hub2live exit 0
未经授权的用户不能直接访问该脚本:
# ls -lrt /usr/local/sbin/publisher-hub2live -rwx------. 1 root root 400 Oct 12 2012 /usr/local/sbin/publisher-hub2live
因此,发难:
Defaults:git !requiretty git Host_Alias = (root) NOPASSWD: /usr/local/sbin/publisher-hub2live
将gitreplace为存储库的实际所有者。
发布者脚本的内容在这里工作“魔术”(简化版本):
#!/bin/sh echo echo "**** Pulling changes into Live [Hub's post-update hook]" echo cd /path/to/live/repo || exit umask 0022 unset GIT_DIR git pull hub master chown -R root:root /path/to/live/repo find /path/to/live/repo/ -type d | xargs chmod u=rwx,go+rx find /path/to/live/repo/ -type f | xargs chmod u=rw,go+r restorecon -v -R /path/to/live/repo exec git update-server-info exit 0
您的需求可能与拥有者,组,DAC和MAC权限有所不同,但工作stream程相同。