我在 Debian 上使用 Apache Web 服务器,处理 12 个不同的网站。两天前我遭受了一次攻击,一名黑客通过 ftp 向其中的一个网站上传了一个 php shell。
我对这个 shell 的看法是“呸,这只能访问 www/ 文件夹,他不能返回”,但问题是,用这个 shell 他甚至可以访问 / 文件夹并查看他想要的所有文件夹文档(mailq、用户、所有网站文件……),他可以浏览我的所有 vps,查看所有文档及其内容(而不是修改它们!),而无需修改它们。
这几天我一直在思考这个问题,我怀疑是 www-data 权限问题或者类似的问题,但找不到任何解决方案。
那么,如果我在 site1.com 上导航(在我的 vps 上),我该如何做才能使用只能访问该目录的用户呢?
换句话说,如果黑客再次上传 php shell,我希望他不要查看 /var/www/site1.com/www/ 后面的其余文档
多谢你们!
答案1
你所要求的是个好主意,但在实践中实施起来却非常困难。
实际上,没有办法阻止攻击者查看 Web 服务器可以访问的文件……因为攻击是通过 Web 服务器发起的,所以如果不完全禁止访问文件,就无法阻止访问。您可以通过确保只有特定组才能访问系统上的其他敏感数据来保护这些数据……例如,确保只有“mail”组才能访问我们的 mailq。这意味着 (a) 创建必要的组,(b) 设置必要的文件/目录权限,以及 (c) 确保任何守护进程都使用正确的凭据运行。
如果你正在寻找更强大的解决方案,你可以使用某种轻量级虚拟化解决方案(例如 Linux 容器,http://lxc.sourceforge.net/) 为每个站点创建虚拟专用服务器,但这会耗费更多时间和资源。
您可以将每个网站作为单独的用户 ID 运行。这有点棘手;最简单的方法是在特定端口上为每个站点运行一个 Apache 实例,然后使用 Apache 的代理模块从端口 80 上的主服务器委托访问。由于此解决方案涉及每个站点一个 Apache 实例,因此它也会产生资源影响。有些模块可让您在单个 Apache 实例中完成此操作,请参阅http://blog.andreaolivato.net/open-source/running-apache2-virtualhost-with-different-users.html举个例子。
答案2
我建议使用 chroot 环境mod_security
。这样,任何对 Apache 守护进程(或 Apache 以 chroot 用户身份运行)的攻击都只会暴露 chroot 树,而不会暴露整个服务器本身。
文档在这里:http://www.modsecurity.org/documentation/apache-internal-chroot.html