我被要求在我们的部门set服务器上建立一个共享的set空间,它可以被多个人访问,并且可能运行CGI或PHP脚本。维护use空间的人可能会决定将其用于提交文件,这意味着他们需要访问脚本创建的任何文件。我们正在科学Linux 6上运行Apache。
由于多个人需要对set空间进行写入访问,我们的标准方法是创建一个所有相关人员都属于的组,然后将set空间中的目录的权限设置为g+ws。suexec对这些文件具有组可写性很不满意,并且拒绝运行它们。
我们如何设置它并确保任何脚本都运行在与主要apache帐户不同的帐户下(并且与不属于we空间组的任何用户不同)?出于问责(和其他原因),我不希望做一个共享的帐户,不同的人将不得不使用它来维护这个网络空间。
为了获得更多的上下文,下面是我们当前设置的方式:我们有一些用户的主目录位于NFS上,并根据需要自动生成目录。大多数人只是使用通过mod_userdir访问的个人网络空间。过去,我们通过在NFS服务器上创建额外的自动目录来满足几个共享We空间的请求,这些目录不绑定到特定的帐户,但组所有权的设置是为了方便多个帐户的访问。到目前为止,这些共享空间只包含静态内容(我们相信相关人员不会从它们运行脚本),因此我们以前从未针对这类空间处理过任何与suexec相关的问题。
编辑:注意,用户可能需要访问脚本创建的文件。
发布于 2013-05-06 16:58:26
为了确保在这种情况下的问责制,并为发布的内容提供正确的所有权和权限,我使用了这文章中描述的工作流的稍微修改的版本。
这就是我实现的方法,请注意,大部分部件是可替换的:
#!/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用存储库的实际所有者替换git。
发布脚本的内容在这里使用“魔术”(简化版本):
#!/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权限方面,您的需求可能不同,但是工作流是相同的。
https://serverfault.com/questions/505370
复制相似问题