在共享网站托管或在不同 PHP 应用程序之间共享 PHP 环境的服务器上,我通常会实施一项安全策略,使用 PHPopen_basedir
将每个用户限制在其自己的目录中(以及其他 PHP 指令disable_functions
)。我还看到 SF 上有很多帖子讨论使用此功能的好处。
然而,现在我在 Debian 软件包文件中偶然发现了这条通知,其中README.Debian.security
明确指出他们不提供以下安全支持(其中包括):
* Vulnerabilities involving any kind of open_basedir violation, as
this feature is not considered a security model either by us or by
PHP upstream.
所以我想知道,这份声明是否只是为了免除任何责任,还是有更根本的原因?
具体来说,您如何确保多个不同用户使用的 PHP 服务器的安全,open_basedir
同时又不增加维护工作量?或者您只是建议永远不要使用共享主机,正如 PHP 开发人员在其安全说明?
答案1
免责声明的原因似乎是有方法可以打破 open_basedir 规则。我仍然会在共享主机上使用它,但不要指望它是你唯一的安全措施。此外,让每个虚拟主机由不同的用户拥有,并在该用户帐户下为该主机上的脚本运行 apache 进程。
不过,对于您比较笼统的问题,我确实认为共享主机的时代即将结束。虚拟主机技术已经发展到共享主机几乎无用的地步。
答案2
有一篇关于以前 open_basedir 绕过的好文章可以在以下网址找到:https://www.bencteux.fr/posts/open_basedir/
此外,使用 open_basedir 效率不高。它要求 PHP 根据提供的路径列表检查每个文件系统访问。open_basedir 还会禁用 realpath 缓存,这会进一步降低文件系统访问速度。因此,根据您的应用程序和配置的路径数量,您可能会遇到严重的性能下降。
关于如何保护具有多个用户的设置的问题:答案是 PHP-FPM。为每个分配给其自己操作系统用户的用户运行一个 FPM 池。然后使用经典的所有权/文件权限机制来确保用户不能跨越其指定的边界(即主目录)。