向 Apache 添加另一个服务账户

向 Apache 添加另一个服务账户

我正在使用服务账户运行 Apachehttpd.(Linux 系统)

我创建了一个用户项目1并创建了虚拟目录 myproj。然后我使用以下命令更改了该目录的所有权:

chown -R proj1:proj1 myproj

我以以下身份登录项目1使用 ftp 并可以创建目录和 php 代码。我无法弄清楚的问题是如何告诉 Apache 和 PHP 可以创建/写入 proj1 的目录(例如 mkdir() )。

我希望所有目录都使用 755 创建。有没有办法添加项目1成为虚拟目录的附加服务帐户?

PS PHP 安全模式已关闭并且对该服务器具有 root 访问权限

答案1

关于你的问题,有几点需要提及,所以我一次解决一个问题。首先澄清一下:

Apache 以用户 httpd 身份运行

这意味着在 apache 下运行的所有操作都将以用户 httpd 的身份完成。具体来说,如果您在 apache 下将 PHP 作为模块(即 mod_php)运行,它将以 httpd 的身份运行。

  • 如果您尝试读取一个文件但用户 httpd 无权访问该文件 - 您将收到权限被拒绝错误。
  • 如果您尝试创建一个文件,它将以用户 httpd 的身份创建(如果该用户没有写权限,则访问将被拒绝)。
  • 您不能让 apache 以多个用户身份同时运行(并且没有必要)。

您有一个系统用户:proj1,并且您已将文件所有权更改为该用户。

由于您是通过 FTP 以此用户身份登录的,因此您将拥有此用户的权限 - 您上传的文件归“proj1”所有。(大概 - 还有其他可能的设置,但问题似乎建议使用这个)。

您的权限是755:

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

您不需要这些权限 - 644 就足够了 - 良好的设置不需要 PHP 文件可执行,并且删除该权限可以提高安全性。

现在,谈谈你的问题:

您希望 PHP 创建的目录和文件归 proj1 所有,并且 PHP 能够修改 proj1 拥有的文件。

要实现这一点,PHP 必须以 proj1 的身份运行。注意 - 这并不要求 Apache 以 proj1 的身份运行。以下任一方式均可:

  1. 使用 FastCGI - Apache 的 mod_fastcgi 与 php-fpm

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

    • 配置所选模块(根据需要添加 mod_suexec、FastCgiSuexec 等)。在您的 VirtualHost 中添加:
      SuexecUserGroup proj1 proj1

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

(就个人偏好而言,我更喜欢 php-fpm)。

相关内容