将另一个服务帐户添加到Apache

我使用服务帐户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运行。

  • 如果您尝试读取文件并且用户httpd无法访问该文件 – 您将获得权限被拒绝的错误。
  • 如果你尝试创build一个文件,它将被创build为用户httpd(如果该用户没有写权限,访问将被拒绝)。
  • 你不能让多个用户同时运行Apache(应该没有必要)。

你有一个系统用户:proj1,你已经改变了文件的所有权给这个用户。

由于您通过FTP以此用户身份login,因此您将拥有此用户的权限 – 您上传的文件归“proj1”所有。 (据推测 – 还有其他的设置可能,但这个问题似乎暗示了这一点)。

您的权限是755:

  • 用户:读取,写入,执行
  • 组:读取,执行
  • 其他:读,执行

你不应该需要这些权限 – 644应该是足够的 – 一个好的设置不需要PHP文件是可执行的,并且删除该权限会增加安全性。

现在,对你的问题:

您希望由PHP创build的目录和文件由proj1拥有,并且PHP可以修改proj1拥有的文件。

要发生这种情况,PHP必须以proj1运行。 注意 – 这并不要求Apache以proj1运行。 或者:

  1. 使用FastCGI – Apache的mod_fastcgi和php-fpm

    • 设置一个指定所有者为proj1和组为proj1的池。
  2. 使用Suexec mod_php,mod_fastcgi或mod_fcgi

    • configuration所选模块(根据需要添加mod_suexec,FastCgiSuexec等)。 到您的VirtualHost,添加:
        SuexecUserGroup proj1 proj1 

将apache添加到proj1组。 Apache将继续以httpd身份运行 – 但能够读取必要的文件,因为它是组的一部分(只要组为读取权限)。 PHP将作为proj1运行(应具有读取,写入权限),从而解决您的写入问题。 此外,您可以稍后添加更多的虚拟主机,每个虚拟主机具有不同的权限,通过向php-fpm或使用Suexec的不同用户添加更多池。

(作为个人喜好,我喜欢php-fpm)。