java - 在 Linux 上,人们是 chroot Java Web 应用程序还是使用 IPTables 并以非 root 身份运行?

标签 java linux security webserver chroot

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

  1. 如果可以的话,希望以 root 身份进入 chroot jail (还没有开始工作)
  2. 作为非 root 用户,然后使用 IPTables 将端口 80 转发到容器正在运行的其他端口 (>1024)
  3. 两者:作为非 root 用户、IPTables 和 chroot jail。

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

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

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

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

最佳答案

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

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

关于java - 在 Linux 上,人们是 chroot Java Web 应用程序还是使用 IPTables 并以非 root 身份运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3063351/

相关文章:

java - CheckStyle Eclipse 插件无法正确显示标签

javascript - 在 JSON 和安全性中注入(inject) javascript

docker - 如何使用 docker-credential-pass 登录私有(private)注册表?

linux - 在perl中拆分和过滤linux命令的输出

spring-boot - 为什么启用 csrf 时会出现 401 错误?

java - 一种调度算法

java - 从 oracle 11.2 运行 java 程序或服务

java - Netbeans 在 java.lang.NoClassDefFoundError 中报告 "Insufficient memory to compile"结果

mysql - 创建 sql 转储并将其保存到远程

c - 为什么在未设置 DBUS_SESSION_BUS_ADDRESS 时 g_file_copy 返回 Operation not supported