5

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

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

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

4

3 回答 3

3

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

编辑:

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

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

于 2009-08-14T11:28:57.010 回答
1

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

于 2009-08-14T11:36:41.597 回答
1

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、安全配置等)

于 2010-04-22T13:29:59.563 回答