5

当您运行想要在端口 80 上同时提供静态和动态内容的 Java Servlet 容器时,您会遇到一个经典问题,即是否将服务器运行为:

  1. 如果可以的话,希望成为一个 chroot 监狱的根(还没有得到这个工作)
  2. 作为非 root 用户,然后使用 IPTables 将端口 80 转发到容器正在运行的其他端口(>1024)
  3. 两者:作为非 root 用户,IPTables 和 chroot 监狱。

选择的问题。1是chrooting的复杂性,仍然是运行root的安全问题。opt的问题。2 是每个 Linux 发行版都有不同的 IPTables 持久化方式。选项 3 当然可能是想法,但很难设置。

最后,每个发行版在守护程序脚本中都有令人讨厌的差异。

人们认为最好的发行版不可知解决方案是什么,是否有资源可以展示如何做到这一点?

编辑:我宁愿不在 servlet 容器前运行 Apache,因为该站点主要是动态的,并且总内存占用很重要(托管成本)。

4

5 回答 5

5

以非 root 身份运行,并在端口 80 上使用标准网络服务器 ( apache ) 或轻量级网络服务器(例如lighttpdnginx)重定向到您的实例。

这样做的好处是标准 Web 服务器可以提供静态内容,从而减少 Web 应用程序的负载。您甚至可以让它反向代理并缓存 Web 应用程序流量。

于 2010-06-17T16:03:21.803 回答
3

查看authbind,它专门设计用于允许非 root 用户控制对特权端口的访问。

这样,您可以有效地将您的 Tomcat 用户的权限升级为您想要的根权限(打开特权端口),而不会给您的 webapp 进程不必要的权限来造成严重破坏。

于 2010-06-17T20:31:00.097 回答
2

我在端口 8080 上使用码头并重定向

iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

于 2010-06-19T01:22:35.877 回答
0

最近在 Struts2 中发现的漏洞 - https://www.imperva.com/blog/2017/03/cve-2017-5638-new-remote-code-execution-rce-vulnerability-in-apache-struts-2/ -清楚地表明以 root 身份运行是危险的。

于 2017-03-23T08:24:14.427 回答
-2

为什么不简单地以 root 身份运行它?会发生什么坏事?

我从未听说过 java servlet 容器被黑客入侵,黑客可以突破 JVM 并获得对操作系统的访问权限。

假设发生了这种情况。黑客阅读了 JVM 代码,发现了一个漏洞。他通过您的 servlet 容器侵入您的系统,并以运行 servlet 容器的用户身份登录。

那你就完蛋了。该用户可以访问服务器上最有价值和唯一有价值的东西。用户是普通用户并不重要。

如果该用户是root用户,还能造成什么更大的损害?操作系统是一次性的,只需将其擦干净并重新安装即可。

于 2010-06-17T20:42:28.927 回答