多站点托pipe安全性 – 确保没有脚本可以作为Apache用户运行,而只能作为每个网站的用户运行

在设置一个应该彼此隔离的多个站点的托pipe环境时,我做了一个很明显的步骤,即configurationPHP,使其作为与每个站点相关联的用户运行,而不是像Apache用户那样运行,但有没有某种方式为了确保一个站点不能像Apache用户那样运行用其他语言(例如Python)编写的脚本? 我已经看到了像符号链接攻击这样的聪明攻击,它使用.htaccess规则和符号链接来欺骗Apache从其他网站以明文方式提供PHP文件(这与问题无关,只是一个例子),而且因为我不熟悉PHP以外的服务器端语言的设置,我不知道要通过Apache conf文件来检查和/或禁止什么,以确保以其他语言编写的脚本不能作为Apache用户。

例如,尽pipePHP设置为以网站用户身份运行,但如果网站遭到黑客入侵,黑客是否可以创build一个.htaccess文件,将.abc文件设置为以Perl脚本运行,如果服务器上的configuration不正确那么那些作为Apache用户运行?

什么是最好的方法来解决这个问题?

所以你主要担心的是,被盗用的帐户不能对其他帐户做任何坏事。

PHP和文件权限

如果将PHPconfiguration为针对每个域以不同的用户身份运行,则应设置您的目录,使其不具有对自己域之外的任何内容的写入权限。 然后使用PHP(或通过PHP调用的任何其他命令),它不能对服务器的其余部分造成任何伤害。

最佳做法是让脚本由user1拥有,但PHP在user2下运行。 对于客户访问,应该为user1configurationFTP。 用户2应该被授予写访问权限,只有真正需要的特定目录(caching目录,生成缩略图,通过PHP上传文件)。

但是很多人开始安装Wordpress和其他的CMS,不知道该怎么做,并给所有的东西写入权限(然后写得不好的CMS插件可以危及该域的所有PHP脚本)。 WordPress和其他CMS现在支持安装/升级,即使没有写入权限的PHP进程(他们只是要求FTPlogin,并自动使用它)。

另一个最佳做法是阻止对user2具有写权限的目录进行直接Web访问。 file upload应该由你的脚本检查,只有在有效的情况下,才能移动到外部可访问的目录(否则有人可以上传PHP脚本而不是JPG图像,并可能欺骗你的Web服务器执行它)。

阿帕奇

使用Apache的AllowOverride None指令来禁用.htaccess文件的使用,以便攻击者不能configuration其他CGI脚本的运行。 Apache应该只能读取所服务的文件(包含密码的PHPconfiguration文件不需要读取Apache的权限)。 禁用.htaccess ,用户无法更改Apacheconfiguration。

使用Options -FollowSymLinks (或-SymLinksIfOwnerMatch )来防止符号链接“攻击”。

安装mod_security来监视可疑活动并阻止像SQL注入这样的黑客攻击。

编辑 :如果需要.htaccess ,你需要决定你的主机将支持哪些选项,并只启用这些选项。 常用的安全选项包括(在AllowOverride列出):

  • AuthConfig – 启用基本HTTPauthentication
  • ErrorDocument – 为404响应定义自己的URL而不是默认值(因为您只定义了URL,只能使用已经可访问的内容,所以没有风险)
  • 索引 – 如果你想启用简单的目录列表
  • 限制 – 通过IP地址限制访问(通常由Deny from all指令来拒绝访问部分目录)
  • RewriteEngine,RewriteOptions,RewriteBase,RewriteCond,RewriteRule – for mod_rewrite
  • SymLinksIfOwnerMatch – 需要mod_rewrite(它的文档声明它需要FollowSymLinks ,但它似乎也适用于这个); 除了使用mod_rewrite之外,如果目标文件/目录由符号链接本身拥有相同的用户,则Apache将只遵循符号链接。