![如何防止我的服务器上一个被黑客入侵的网站危害其他网站?](https://linux22.com/image/716171/%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%E6%88%91%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E4%B8%80%E4%B8%AA%E8%A2%AB%E9%BB%91%E5%AE%A2%E5%85%A5%E4%BE%B5%E7%9A%84%E7%BD%91%E7%AB%99%E5%8D%B1%E5%AE%B3%E5%85%B6%E4%BB%96%E7%BD%91%E7%AB%99%EF%BC%9F.png)
我是一名软件安全助教,运行着一个设计上存在漏洞的服务器。
这是一台 nginx 服务器,它开放了 40 个端口。每个端口都服务于一个 Web 应用程序,而所有 Web 应用程序都很容易受到黑客攻击。如果一个 Web 应用程序被攻陷,攻击者将获得 www-data 用户的权限,然后攻击者将能够攻陷其他 39 个 Web 应用程序。有什么方法可以防止这种情况发生?我不希望攻击者获得访问权限超过单个被黑客入侵的网络应用程序。
服务器上的硬件限制使得 Docker 变得不可行,更不用说虚拟机了。
答案1
如果一个 Web 应用程序被攻陷,攻击者将获得 www-data 用户的权限,然后攻击者将能够攻陷其他 39 个 Web 应用程序。有什么方法可以防止这种情况发生吗?
是的。不要这样做。绝对没有理由以单个用户身份运行不相关的应用程序。典型的类 Unix 系统上有超过 65,000 个可用用户 ID,您应该利用它们。如何做到这一点取决于特定的应用程序及其使用的技术,最好在单独的问题中提出。
答案2
这听起来像是应用程序的一个独特情况,但我想问一下开发人员:如果应用程序是 PHP 应用程序,为什么他们不能使用它$_SERVER['SERVER_PORT']
来获取当前应用程序的当前端口,并相应地封锁数据?这可以作为检查添加到 PHP 程序的顶部,如果发现任何不正常的情况,只需exit();
做一些明确禁止不良行为的事情即可。如何做到这一点取决于应用程序。