代码之家  ›  专栏  ›  技术社区  ›  Adam Gent

在Linux上,人们使用一个Java Web应用程序或使用IPTABLE并作为非根运行?

  •  5
  • Adam Gent  · 技术社区  · 14 年前

    当您运行Java Servlet容器时,您希望在端口80上同时为静态和动态内容提供服务,您有一个经典问题:是否将服务器运行为:

    1. 如果可以的话,希望能进一个监狱(还没开始工作)
    2. 作为非根用户,然后使用iptables将端口80转发到容器正在运行的其他端口(>1024)
    3. 两者:作为非根用户,IPTABLE和Chelot监狱。

    opt的问题。1是chrooting的复杂性,也是运行root的安全问题,opt的问题。2.每个Linux发行版都有一种不同的方法来持久化iptable。选项3当然可能是个主意,但很难设置。

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

    人们认为什么是最好的不区分地区的解决方案,是否有资源展示如何做到这一点?

    编辑:我不想在servlet容器前面运行Apache,因为站点大部分是动态的,总内存占用量很重要(托管成本)。

    5 回复  |  直到 7 年前
        1
  •  5
  •   jmanning2k    14 年前

    以非根目录运行并使用标准Web服务器( apache )或者一个轻量级的(例如 lighttpd nginx )在端口80上重定向到您的实例。

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

        2
  •  3
  •   Andrzej Doyle    14 年前

    退房 authbind 这是专门为允许非根用户控制访问特权端口而设计的。

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

        3
  •  2
  •   pierce    14 年前

    我在端口8080上使用Jetty,并使用

    iptables-t nat-i预路由-p tcp--dport 80-j重定向--到端口8080

        4
  •  0
  •   Maxwell    7 年前

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

        5
  •  -2
  •   irreputable    14 年前

    为什么不简单地作为根运行它呢?会发生什么坏事?

    我从来没有听说过Java Servlet容器被黑客攻击,黑客可以破解JVM并获得对OS的访问。

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

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

    如果该用户是根用户,还会造成什么样的破坏?操作系统是一次性的,只需将其擦拭干净并重新安装即可。