使用 PHP-FPM 和 SFTP 保护 PHP 环境

使用 PHP-FPM 和 SFTP 保护 PHP 环境

我想在 Debian 服务器上为少数不受信任的 PHP 网站设置安全环境。目前所有内容都在同一个 Apache2 上运行,使用 mod_php5 和 vsftpd 进行管理文件访问,因此还有改进的空间。

这个想法是使用 nginx 而不是 apache,通过 OpenSSH 而不是 vsftpd 进行 SFTP 和 chrooted(在 sshd_config 中),每个网站的单个用户都有自己的 PHP 进程池。所有这些用户和 nginx 都属于同一组。

现在理论上我可以为所有 PHP 脚本设置 700 个权限,为 nginx 必须提供的静态文件设置 750 个权限。理论上,如果一个网站被攻破,其他所有用户的数据都是安全的,对吗?

是否有更好的解决方案,可以减少每个网站的设置时间和内存需求?

干杯

答案1

在 php-fpm 配置中使用 chroot 指令,应该可以保证足够的安全性;然后,只要正确配置 Apache,允许用户只停留在 chrooted ftp(或 scp)内就足够了(不要让符号链接欺骗他!:P)。
然后,将所有内容 chrooted,应该就足够了:您甚至不需要在文件上设置 che 权限,因为它们无法从另一个 chrooted 环境中读取。:)
其他解决方案,让您避免消耗内存是可能的……只需使用 varnish 或类似的东西进行缓存(顺便说一句,我知道对于不受信任的用户来说配置起来并不容易)。

答案2

考虑到你对 nginx 所需的待办事项配置,我刚刚遇到了一个很棒的bash 脚本设计用于Debian和 Ubuntu 可以自动执行大多数需要执行的任务,以实现与您描述的类似的设置场景。

bash 脚本会自动在 nginx 上创建新的虚拟主机(服务器块),并允许您运行多个 PHP 池。PHP-FPM 处理从主池派生的所有进程,并让每个池以不同的用户和/或组身份运行。通过在 chroot 环境中运行并覆盖每个池的默认 php.ini 值,可以进一步隔离每个池。

请访问开发者的网站进行查看:

http://www.sebdangerfield.me.uk/2012/05/nginx-and-php-fpm-bash-script-for-creating-new-vhosts-under-separate-fpm-pools/

该脚本还做了什么:

  • 为网站创建新的系统用户
  • 使用基本模板为 nginx 创建新的 vhost 配置文件
  • 创建一个新的 PHP-FPM 池,并将 uid 和 gid 设置为新系统用户的 uid 和 gid
  • 在新用户主目录中为网站创建新目录
  • 重新加载 Nginx 以允许检测到新的 vhost
  • 重新启动 PHP-FPM 以生成新的 PHP 工作池

我希望它能帮助您优化设置时间。

相关内容