我使用服务帐户httpd运行Apache。 (Linux机箱)
我做了一个用户proj1,并创build了虚拟目录myproj。 然后,我用下面的方式把这个目录变成了
chown -R proj1:proj1 myproj
我使用ftplogin为proj1 ,可以创build目录和php代码。 我无法弄清楚的问题是如何告诉Apache和PHP,它可以创build/写入proj1的目录(例如mkdir())。
我更喜欢用755创build所有的目录。有没有办法将proj1添加到虚拟目录的附加服务帐户?
PS PHP安全模式已closures,并具有对此服务器的root访问权限
关于你的问题有几点要提到,所以我一次一个地解决它们。 首先澄清一点:
Apache以用户httpd身份运行
这意味着在Apache下运行的所有东西都将以用户httpd的身份完成。 具体来说,如果你运行PHP作为一个模块下的Apache(即mod_php)它将作为httpd运行。
你有一个系统用户:proj1,你已经改变了文件的所有权给这个用户。
由于您通过FTP以此用户身份login,因此您将拥有此用户的权限 – 您上传的文件归“proj1”所有。 (据推测 – 还有其他的设置可能,但这个问题似乎暗示了这一点)。
您的权限是755:
你不应该需要这些权限 – 644应该是足够的 – 一个好的设置不需要PHP文件是可执行的,并且删除该权限会增加安全性。
现在,对你的问题:
您希望由PHP创build的目录和文件由proj1拥有,并且PHP可以修改proj1拥有的文件。
要发生这种情况,PHP必须以proj1运行。 注意 – 这并不要求Apache以proj1运行。 或者:
使用FastCGI – Apache的mod_fastcgi和php-fpm
使用Suexec mod_php,mod_fastcgi或mod_fcgi
SuexecUserGroup proj1 proj1
将apache添加到proj1组。 Apache将继续以httpd身份运行 – 但能够读取必要的文件,因为它是组的一部分(只要组为读取权限)。 PHP将作为proj1运行(应具有读取,写入权限),从而解决您的写入问题。 此外,您可以稍后添加更多的虚拟主机,每个虚拟主机具有不同的权限,通过向php-fpm或使用Suexec的不同用户添加更多池。
(作为个人喜好,我喜欢php-fpm)。