【问题标题】:Use Tomcat with Java SecurityManager?将 Tomcat 与 Java SecurityManager 一起使用?
【发布时间】:2010-11-19 14:55:15
【问题描述】:

我正在编写一个应该在 Ubuntu 上的 Tomcat 上运行的 Web 应用程序。在 Ubuntu 上,Tomcat 默认配置为与 Java SecurityManager 一起运行。除了我自己的 Web 应用程序之外,只会有一些与我自己相关的知名第三方 Web 应用程序,例如 BIRT 报告引擎。

如果其中一个 Web 应用程序出现故障或受到威胁,它可能会在没有伤害的情况下关闭所有其他应用程序,因为它们都属于同一个。我不会发生的是,受感染的网络应用程序会损害系统本身,例如调用 rm -r /

我是否需要使用 java 安全管理器来实现这一点?还是只需要保护一个 Web 应用程序免受另一个 Web 应用程序的影响?我真的很想避免为我打算使用的所有第 3 方 Web 应用程序创建 .policy 文件。

【问题讨论】:

    标签: java security tomcat securitymanager


    【解决方案1】:

    理论上是的。但是我听说人们在尝试使用安全管理器“锁定”服务器端代码时会遇到一堆问题。应用程序的设计经常没有考虑到这一点,并且您会花费大量时间调试 SecurityExceptions,直到您正确设置所有权限。

    编辑:

    我建议运行两个 Tomcat 实例更简单,以避免一个应用程序执行某些会导致单个 Tomcat 中的所有内容崩溃的问题。 (例如,填满堆、泄漏文件描述符或...调用 System.exit()。)

    如果您仍然担心应用程序“突破”Java 并执行相当于“rm /*”的操作,那么您可以在单独的“chroot jail”或虚拟主机中运行每个 Tomcat 实例。或者您可以简单地从受限用户帐户运行 Tomcat,并确保该帐户无法访问/更新不应访问的文件。

    【讨论】:

      【解决方案2】:

      避免“rm -r /”不需要安全管理员。如果运行 Tomcat 进程的用户具有有限的访问权限(即没有对 / 或任何其他重要区域的写访问权限)就足够了。

      【讨论】:

        【解决方案3】:

        SecurityManager 只是您可以应用于 Tomcat 的另一层安全性,并且根据您的应用程序,要正确处理可能非常困难且耗时。正如您已经指出的那样,为第三方应用程序和库实现这一点可能更加困难。

        在我看来,任何细节的配置都是你应该考虑的最后一件事。

        这里已经说了很多,但如果我是你,我会按照以下步骤操作:

        1. 使用 jsvc 在具有尽可能少的权限的帐户下运行 Tomcat(按照惯例,帐户名为“tomcat”、“tomcat6”等)。如果你已经安装了 Ubuntu 包,它安装的 init 脚本已经完成了这项工作,所以如果你通过这个脚本启动 tomcat,你就会被覆盖。 有关 jsvc 的更多信息,请参阅http://tomcat.apache.org/tomcat-6.0-doc/setup.html
        2. 使用 chroot 运行 jsvc。将您使用 chroot 指定的虚拟文件系统中的内容限制为仅 Tomcat 需要的内容。
        3. 保护您的 Tomcat、数据库和操作系统配置。信息安全中心对此有很好的基线指导 - http://cisecurity.org/en-us/?route=downloads.multiform
        4. 应用程序安全。这是最重要的,但是 1.、2. 和 3. 通过比较很容易实现,我建议您在此之前执行这些(或者更好,并行)。确保应用程序的所有输入在使用前都经过验证。使用类似 OWASP 的 Enterprise Security API 作为起点 - http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API。您所做的一切都是您的应用程序安全工作的故障保险。如果您的应用程序不安全,运行它的机器可能会因为您采取的其他步骤(低权限帐户、chroot、安全配置等)而保持安全,但应用程序管理的数据将受到损害。
        5. 安全管理器。一旦您对自己拥有良好的应用程序安全基准感到满意,请务必考虑为您正在进行的应用程序安全工作添加安全策略。

        您可以做的其他事情包括在机器上运行像 Snort 这样的 IDS 来检测一些入侵尝试,运行像 swatch 这样的文件观察器来检测意外的文件修改(尤其是对配置文件),以及运行各种日志分析器来尝试检测任何其他企图入侵。

        任何安全工作都需要权衡取舍。您永远无法完全保护您的应用程序,并且总会有进一步努力不值得的时候。对于大多数人来说,完整的安全管理器配置属于这一类。

        “我是否需要使用java安全管理器来实现这个[危害系统本身]?”

        没有。有更简单的方法(低权限帐户、chroot、安全配置等)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-05
          • 2011-01-20
          • 2011-04-16
          • 2021-06-08
          • 2015-02-22
          • 1970-01-01
          • 1970-01-01
          • 2013-08-21
          相关资源
          最近更新 更多