设置安全共享主机(Apache,PHP,MySQL)

所以我正在build立一个与Apache,PHP,MySQL共享的主机,最大的问题是如何处理PHP,因为有一百万个选项可以安全地configuration它。

计划是:

  • MySQL的Chroot(内置支持chroot
  • Chroot for Apache(mod_security)
  • 每个用户执行他们的PHP脚本作为他们自己的用户(见下文)
  • 设置open_basedir
  • 禁用所有“邪恶的”php函数(allow_url_fopen,system,exec等等)

我看着suexecsuphp,但他们似乎很慢;

http://blog.stuartherbert.com/php/2007/12/18/using-suexec-to-secure-a-shared-server/ http://blog.stuartherbert.com/php/2008/01/18/使用-suphp到安全-A-共享服务器/

所以我看了更多,发现了一些其他的解决scheme:

  • apache2-mpm-itk + mod_php(?)
  • mod_fcgid + php-fpm
  • mod_fastcgi + php-fpm

我尝试了一个简单的设置与mod_fastcgi + php-fpm,它似乎工作,运行正确的用户等,但目录旅游的保护仍然是open_basedir(?)

一个解决scheme可能是使用php-fpm的chroot选项,但是会导致很多其他问题

  • 域名parsing器不起作用
  • 发送邮件不起作用

提示?

fpm项目做了很好的工作,可以很容易地部署共享主机解决scheme,即使是对用户进行chroot(但是,有一些可以通过symlinking解决的问题,在网上有很多关于它的教程)。

涉及php5-fpm的解决scheme需要mod_fastcgi,并允许主机使用每个用户的configuration(memory_limit,max_execution_time …只是一个例子),从我所能看到的,它是相当稳定的;)
关于解决和使用电子邮件的问题,他们很容易解决添加库到chrooted环境和需要的可执行文件(例如sendmail)。

我发现和解决的问题是关于通过php-fpm传递给php脚本的错误variables(在chroot之后,php-fpm应该删除外部目录,传递给脚本的只有chroot …但它不会和其他东西必须照顾,就像mod_fastcgi和php-fpm之间的代理)。
我已经设法解决这个问题,使用php-fpm和apache之间的fcgi代理来自动纠正这些variables,因为在我编写的时候,php-fpm并不能解决这个问题。

自从这个问题被问及和回应以来,CloudLinux已经真正成为共享主机空间中的主streamLinux发行版。 它基于RHEL / CentOS作为其上游,但有一些修改。 这里有一些细节:

  • 它提供了一个叫做CageFS的东西来处理chroot。
  • 对于运行PHP,它提供了一个名为mod_lsapi的东西,这是一种运行PHP的方式,具有很好的性能,类似于你使用mod_php的方式(也就是说能够在.htaccess文件中使用php_flag和php_value,并且可以执行操作码caching在一个好方法)。 它能够在用户之间实现良好的特权隔离。
  • 它还提供内核级修改以防止符号链接攻击。