如何设定执行Java程序的Linux安全环境-3
时间:2008-05-25 来源:sdccf
以下是一个样本 tcstart.sh,可以修改它来适合您的安装。
清单 4. 样本 tcstart.sh
#!/bin/bash
export JDK_HOME=/usr/java/jdk
export JAVA_HOME=/usr/java/jdk
#run the startup script from Tomcat installation
/home/tomcat/server/bin/startup.sh
chroot︰最大的安全性监狱
对于真正的偏执狂,还可能进一步讨论保护 Java 语言服务。当该服务提供对本地文件系统的某种形式的存取权时,这尤其有用。JVM 执行时安全性特性并不能阻止已经有权存取文件系统的应用程序存取除了使用者专用的文件之外的文件。在 Tomcat 的情况中,文件存取是它作为 HTTP 服务器使用时所固有的。它通常将为每个 Web 应用程序提供服务的文件限制为该应用程序目录中的那些文件,但 servlet 应用程序可以避开这些限制。当 Tomcat 与诸如 Apache 之类别的前端 Web 服务器共同执行时,也会发生这种情况。
透过使用 chroot,您可以阻止 Tomcat(和所有在 Tomcat 下执行的 Web 应用程序)存取为该服务器留出的空间以外的任何东西。chroot 并不以任何方式特定于 Java 应用程序,但它是为 JVM 提供的安全性加入最终包装器的简便方法。我将在这里为那些不熟悉 chroot 概念的人介绍设定它的要点。
chroot 所做的类别似于用于执行 Java 程序代码的 JVM 沙箱,但它适用于文件系统本身。chroot 执行一条指令并将您指定的位置设定成有效根目录。所执行的指令(可以是执行其它指令(包括应用程序)的 shell 指令码)只能存取所指定的有效根目录下的文件系统的一部分。文件系统的其余部分对于该指令来说完全不存在。
要对诸如 Tomcat 之类别的应用程序使用 chroot,需要将一些基本系统应用程序和链接库(包括实际的 Java JDK 安装)复制到新的虚拟根目录下。这可能会占用许多空间 ─ 也许从一百兆字节到一千兆字节或更多 ─ 这取决于您想尽多少努力来将这些应用程序和链接库减少到最小。设定它的最简单方法也最浪费空间︰祇要将整个 /bin、/lib、/usr/bin 和 /usr/lib 目录树以及 Java 安装复制到新的根目录下,使 root 使用者成为对所有文件的拥有者和唯一授权的写入者。如果想要让磁盘使用率保持到最小,可以有选择地只复制 chroot 中需要的指令(包括基本指令,如 ls、rm、echo 和 cat 等,以及实际的 Java 安装)以及那些指令使用的库(透过使用 ldd 可以找到那些库)。
接下来,您将需要建立一些额外目录作为一般系统的缩减版本。这包括 /dev,以及设备 /dev/null 和 /dev/zero;/etc 以及 /etc/passwd 和 /etc/group 文件的已编辑版本(只保留 root 和 tomcat 项),也许还有主机。如果正在多处理器系统上执行,您还需要在新的根目录下挂装 /proc 系统,因为 JVM 使用该系统来协调各个处理器。
最后,为了在设定了 chroot 后仍作为使用者 tomcat 执行,也许需要建置一个可以在虚拟根目录下执行的 su 指令版本(许多分发版的一般版本不容许这样做)。要这样做,可以从 GNU 项目获取 sh-utils 来源码并根据该来源码直接建置 su,然后将它复制到新的根目录的 /bin 目录中。
完成了所有这些设定后,可以尝试以 root 使用者身份执行(假设新的根目录位于 /home/tomcat)︰
/usr/sbin/chroot /home/tomcat /bin/su tomcat
如果设定正确,这应该让您在新的根目录下作为 tomcat 执行,而且您可以尝试使用您的指令码来启动和停止 Tomcat.在证实了所有东西都工作之后,最后一步就是将清单 3 中的 Tomcat 服务定义变更成使用 chroot 来代替 su,将 su 指令移到 tcstart.sh 指令码和 tcstop.sh 指令码。还需要确保只能由 root 使用者修改这些指令码。
希望这篇概述的解释很清楚,这个过程并不适合胆小的人﹗如果您选择走使用 chroot 这条路线,但以前没有使用过 chroot,那么您一定要参考网上的 chroot 参考数据之一,以获取详细信息。但是这确实会给您的 Java 服务器程序代码可能最好的隔离,而且在某些情况下,带来的内心的宁静值得这样做。
结束语
Linux 和 Java 技术都正在赢得商业系统的市场份额。尽管开放来源码 Linux 和特许 Java 技术之间存在着原理上的差异,但这两者在一起确实配合得很好。Linux 对于 Java 应用程序,尤其是对于服务器类别型的应用程序是一个极好的部署环境,而 Java 技术是作为企业软件开发的先进方法而建立且得到了认可。
透过正确的预防措施,在 Linux 上执行的 Java 服务器应用程序可以提供非常高的安全性程度 ─ 甚至高于本机应用程序 ─ 因为 Java 技术消除了服务器应用程序中许多弱点的常见来源。Java 技术的跨平台性质所带来的是包括企业工作人员和 Linux 立即就绪的应用程序的巨大资源集合。Java 服务器应用程序开始在日益增长的 Linux 的服务器市场份额中扮演重要角色,而且这种趋势在将来只会帮助这两种技术。
来自: 新客网(www.xker.com) 详文参考:http://www.xker.com/page/e2007/0719/27918_3.html
相关阅读 更多 +