在设置一个包含多个应该相互隔离的站点的托管环境时,我做了一个明显的步骤,即配置 PHP,使其以与每个网站相关联的用户而不是 Apache 用户身份运行,但有什么方法吗确保一个站点无法以 Apache 用户的身份运行以其他语言(例如 Python)编写的脚本?我见过像符号链接攻击这样聪明的攻击,它使用 .htaccess 规则和符号链接来欺骗 Apache 以明文形式提供来自其他网站的 PHP 文件(这与问题无关,只是一个例子),因为我不是很熟悉 PHP 以外的服务器端语言的设置,我不知道要检查和/或禁止什么,例如通过 Apache conf 文件以确保用其他语言编写的脚本可以'
例如,即使 PHP 设置为以网站用户身份运行,如果网站被黑客入侵,黑客是否可以创建一个 .htaccess 文件,该文件将 .abc 文件设置为作为 Perl 脚本运行,并且服务器上的配置不正确,那么那些以 Apache 用户身份运行?
解决这个问题的最佳方法是什么?
因此,您主要担心的是,一个帐户遭到入侵不会对其他帐户造成任何不利影响。
PHP 和文件权限
如果 PHP 被配置为每个域的不同用户运行,那么您的目录应该设置为它没有对自己域之外的任何内容的写访问权。然后使用 PHP(或通过 PHP 调用的任何其他命令)它不会对服务器的其余部分造成任何损害。
最佳实践是让脚本归 user1 所有,但 PHP 在 user2 下运行。对于客户访问,应为 user1 配置 FTP。用户 2 应仅在真正需要的地方(缓存目录、生成缩略图、通过 PHP 上传文件)被授予对特定目录的写入权限。
但是很多人开始安装 Wordpress 和其他 CMS,不知道该做什么并授予对所有内容的写访问权(然后编写糟糕的 CMS 插件可能会危及该域的所有 php 脚本)。即使没有 PHP 进程的写入权限,Wordpress 和其他 CMS 现在也支持安装/升级(他们只是要求 FTP 登录并自动使用它)。
另一个最佳实践是阻止对 user2 具有写入权限的目录的直接 Web 访问。文件上传应该由您的脚本检查,并且只有在有效的情况下,才移动到可从外部访问的目录(否则有人可以上传 PHP 脚本而不是 JPG 图像,并可能欺骗您的网络服务器执行它)。
阿帕奇
使用 Apache 的
AllowOverride None
指令禁用该.htaccess
文件的使用,这样攻击者就无法配置其他 CGI 脚本的运行。Apache 应该只有对所服务文件的读取权限(包含密码的 PHP 配置文件不需要 Apache 的读取权限)。禁用后,.htaccess
用户无法更改 Apache 配置。使用
Options -FollowSymLinks
(或-SymLinksIfOwnerMatch
)防止符号链接“攻击”。安装
mod_security
以监视可疑活动并阻止 SQL 注入等黑客攻击。编辑:如果
.htaccess
需要,您需要决定您的主机将支持哪些选项并仅启用这些选项。常用的安全选项示例包括(在 中列出AllowOverride
):Deny from all
指令用于拒绝对部分目录的访问)FollowSymLinks
,但它似乎也适用于这个);除了使用 mod_rewrite 之外,如果目标文件/目录与符号链接本身是同一用户的所有者,Apache 只会遵循符号链接。从阅读http://httpd.apache.org/docs/2.4/misc/security_tips.html看来,如果正确使用 suexec,那么作为 Apache 用户执行的 CGI 脚本不应该是一个问题,因为它们会被执行在由 suexec 指令定义的用户下。