php - 在安全隔离的 LAMP 上运行多个站点

标签 php linux security apache lamp

我一直在管理几个 LAMP 服务器,每个服务器上有 2-5 个站点。 这些基本上由同一用户/客户端拥有,因此除了通过易受攻击的守护程序或脚本进行攻击外,不存在安全问题。 我正在构建自己的服务器并想开始托管多个站点。 我首先关心的是……隔离。 我怎样才能避免 c99 脚本破坏所有虚拟主机? 另外,我是否应该阻止 c99 能够写入/读取其他站点的目录? (很容易从另一个站点“cat”一个config.php,然后进入mysql数据库) 我的服务器是一个VPS,512M可爆到1G。在免费的托管管理器中,有没有适合我的 VPS 的小型托管管理器? (这可能与我想要的安全方法兼容) 目前我不打算托管超过 10 个站点,但我不会接受客户端/黑客可以导航到不需要的目录,或者更糟糕的是,运行恶意脚本。 FTP管理就好了。我不想让 SSH 隔离变得复杂。

在这种情况下,最佳做法是什么?基本上,托管公司如何做才能睡得好? :)

非常感谢! 大卫

最佳答案

您应该在 Apache 配置中为每个虚拟主机使用 PHP 指令 open_basedir,方法是添加以下行:

<VirtualHost x.x.x.x:80>
ServeName www.example.com
DocumentRoot /path/to/your/virtualroot
...
... usual stuff ...
...
php_admin_value open_basedir /path/to/your/virtualroot:/some/other/path
</VirtualHost>

这将限制您的所有 PHP 进程仅访问文件系统上的这个(或这些)路径。 在其他位置打开文件将被禁止,即使是通过 chdir() 或使用符号链接(symbolic link)也是如此。

自 PHP5.3.0 起,您还可以在运行时使用 ini_set() 提供此指令,但恕我直言,最好直接在您的 vhosts.conf 文件中应用此指令。

PHP Manual

关于php - 在安全隔离的 LAMP 上运行多个站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1600039/

相关文章:

PHP 获取整个字符串而不是 URL 中的单个参数

php - Laravel 通过遍历数组进行路由

c++ - 在 Linux 上使用 C++ 中的 SMTP 发送邮件

linux - 如何将包含空格的变量分配给 KSH 中的另一个变量

Java PBE 加密字符串长度与输入相同

android - 如何限制 Android Intents 或增加安全性

php - 通过sql导入/导出magento类别

php - 使用时间戳限制错误登录尝试的次数

linux - 服务套接字会在核心转储之前或之后关闭吗?

javascript - 允许用户安全地将 HTML 保存到数据库吗?