使用Java SecurityManager和Tomcat?

5
我正在编写一个 Web 应用程序,它应该在 Ubuntu 上的 Tomcat 上运行。在 Ubuntu 上,Tomcat 默认配置为使用 Java SecurityManager 运行。除了我的自己的 Web 应用程序外,还会有一些与我自己相关的众所周知的第三方 Web 应用程序,例如 BIRT 报告引擎。
如果其中一个 Web 应用程序失败或被攻击,可能会将所有其他应用程序都拖垮,因为它们都是相互关联的。我不想发生的事情是,受损的 Web 应用程序影响系统本身,比如调用 rm -r /。
我是否需要使用 Java SecurityManager 才能实现这一点?或者仅需要保护一个 Web 应用程序免受其他应用程序的影响?我真的很希望避免为我打算使用的所有第三方 Web 应用程序创建 .policy 文件所需的工作量。
3个回答

3
理论上是可以的。但我听说人们在尝试使用安全管理器锁定服务器端代码时会遇到很多问题。应用程序通常没有考虑到这一点,你需要花费大量时间调试SecurityExceptions,直到你正确设置了所有权限。
编辑:
我建议运行两个Tomcat实例,以避免一个应用程序做出某些操作导致整个Tomcat崩溃的问题。(例如,填满堆栈,泄漏文件描述符或...调用System.exit()。)
如果你仍然担心应用程序“突破”Java并执行类似于“rm /*”这样的操作,那么你可以在单独的“chroot jail”或虚拟主机中运行每个Tomcat实例。或者你可以简单地从受限制的用户帐户运行Tomcat,并确保该帐户无法访问/更新不应访问/更新的文件。

1

SecurityManager 是您可以应用于 Tomcat 的另一层安全保护,根据您的应用程序而言,可能非常困难和耗时。正如您已经注意到的那样,为第三方应用程序和库获取正确的设置可能会更加困难。

在我看来,详细配置这个是您应该考虑的最后一件事情。

这里已经说了很多关于这个的内容,但如果我是您,我会按照以下步骤进行:

  1. 使用具有最少权限的帐户(按照惯例命名为“tomcat”、“tomcat6”等)在jsvc下运行Tomcat。如果您已安装Ubuntu软件包,则安装的init脚本已经执行此操作,因此如果通过此脚本启动Tomcat,则已经覆盖了此步骤。 有关jsvc的更多信息,请参见http://tomcat.apache.org/tomcat-6.0-doc/setup.html
  2. 使用chroot运行jsvc。将指定虚拟文件系统中的内容限制为Tomcat所需的内容。
  3. 保护Tomcat、数据库和操作系统配置。信息安全中心提供了良好的基线指南 - http://cisecurity.org/en-us/?route=downloads.multiform
  4. 应用程序安全。这是最重要的,但与1、2、3相比,这些步骤容易实现,建议您先完成这些步骤(或者更好的是并行完成)。确保在使用输入之前验证应用程序的所有输入。可以使用OWASP的企业安全API作为起点 - http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API。您所做的其他所有工作都是应用程序安全努力的故障转移措施。如果您的应用程序不安全,则由于您采取的其他步骤(低特权帐户、chroot、安全配置等),运行应用程序的计算机可能仍然是安全的,但应用程序管理的数据将被泄露。
  5. 安全管理器。一旦您确信已经具备了良好的应用程序安全基线,请考虑为持续的应用程序安全努力添加安全策略。

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

任何安全措施都需要权衡。你永远无法完全保护你的应用程序,总会有一个点,进一步的努力就不值得了。对于大多数人来说,完整的安全管理器配置属于这个范畴。

"我需要使用Java安全管理器来实现这个目标[破坏系统本身]吗?"

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接