我有一台 Centos6 64 位服务器、Apache/2.2.15、PHP5.3.3、一个 IP 和四个基于名称的虚拟主机以及 SSL/SNI,用于除了 http 之外还提供 https。所有这些主机都分配给了不同的 Linux 用户。我拥有服务器的 root 访问权限,所有这些用户都是我自己的,其他人没有服务器的 shell 访问权限。服务器使用 suPHP 和 SuExec 以这些用户(而不是 apache 用户)的身份运行 cgi 进程。
现在我意识到与 mod_php 相比,suPHP 非常慢。最初我选择了 suPHP,因为之前这 4 个帐户都在不同的共享服务器上,将它们转移到一个服务器并维护这些 Linux 用户相当容易。
但是因为服务器是我自己的,所以我认为我不需要 suPHP,并且我正在考虑仅使用 DSO(mod_php)。
我正在考虑以下工作流程:
1) 将 Apache 用户更改为我的 Linux 用户之一,例如 user1。2
) 将其他用户文件的所有权更改为 user1。每个用户在 /home/user1、/home/user2 等中都有自己的文档根目录 (public_html)。3
) 由于某些进程消耗太多资源并且需要运行命令行,因此所有用户都拥有对此服务器的不同无密码访问权限(shell_exec("ssh user1@localhost 'someprogam'")
等shell_exec("ssh user2@localhost 'someprogram'")
)。在此转移之后,只有 apache 用户(即 user1)需要像 ssh 访问 localhost 一样进行此操作,因此可以删除其他 ssh 内容。提示! 顺便说一句,这是覆盖共享(或任何其他)服务器上的 php 资源限制的好方法。通常,您会通过 ssh 连接到远程服务器,但为什么不也连接到本地服务器呢?在移动化大型图像时尤其有用。此技术基于以下事实:通过 ssh,程序将作为 shell 程序运行(相对于 CGI),并且 shell 没有那么多内存和执行时间限制。
完成这些步骤后,apache 用户(即 user1)将对 /home 及其下的所有目录拥有 rwx 访问权限。
这个工作流程可以吗?我认为没有安全风险(无论是外部还是内部),因为服务器上的所有用户和站点都是我自己的,而且我找不到任何理由说明为什么在这种情况下 DSO(mod_php)比 suPHP 更不安全。
这种转移需要改变几十行代码,但我认为加速效果非常显著,因此这个过程是有意义的。
答案1
也许可以考虑转而使用 PHP FastCGI,您可以获得 mod-php5 的所有速度优势,同时可以保持用户权限分离。