原文:http://www.thinksaas.cn/group/topic/298514/
1.背景
Java SecurityManager可以让web浏览器在它自己的沙箱中运行applet,从而防止不可信代码访问本地文件系统中的文件、连接applet加载主机之外的主机,等等。同样,SecurityManager可以阻止你的浏览器运行不安全的applet;运行tomcat的时候,使用SecurityManager可以保护你的机器不受恶意Servlet、JSP,甚至是疏忽的错误的影响。
想象一下一个有权限发布JSP页面的人员,由于输出在他们的JSP页面中包括了下面这句:
<% System.exit(1); %>
Tomcat每次执行这个JSP,tomcat都会退出。使用Java SecurityManager是系统管理员保证服务器安全、可靠地另外一种防线。
无论如何,运行SecurityManger比不运行要好很多。
2.Permissions
Permission类用来定义tomcat加载的类应该有什么权限。JDK有很多标准的Permission类,并且你可以创建自己的Permission类。Tomcat两种技术都有使用。
标准Permissions
这里只是适用于tomcat的标准SecurityManager Permission类的总结:
|
Tomcat自定义Permissions
Tomcat使用了 org.apache.naming.JndiPermission的自定义权限类。该权限控制基于JNDI命名的资源的访问。权限的名称是JNDI名,无动作。可以使用结尾的*来进行模糊匹配,例如
permission org.apache.naming.JndiPermission "jndi://localhost/examples/*";
每个部署的Web应用都会动态生成这样的权限实体,以允许读取自己的静态资源,而不允许读取其他的文件(除非显示赋予这些文件的权限)。
而且,Tocat总是动态创建下面的文件权限:
permission java.io.FilePermission"** your application context**","read";
permission java.io.FilePermission
"** application working directory**","read,write";
permission java.io.FilePermission
"** application working directory**/-","read,write,delete";
这里的**your application context”等同于应用程序部署的目录(或WAR文件),**application working directory**是Servlet规范要求的临时目录。
3.使用SecurityManager配置Tomcat
策略文件格式
Java SecurityManager实现的安全策略文件配置在$CATALINA_BASE/conf/catalina.policy。该文件完全替换JDK目录中的java.policy文件。catalina.policy文件可以手动编辑,也可以使用Java 1.2及以上自带的policytool工具。
catalina.policy文件中的实体使用标准java.policy文件的格式,如下:
// Example policy file entry
grant [signedBy <signer>,] [codeBase <code source>] {
permission <class> [<name> [, <action list>]];
};
signedBy和codeBase实体在赋予权限的时候是可选的。注释以//开头并至行尾。codeBase以URL的格式,文件URL可以使用${java.home}和${catalina.home} 属性(将来会扩展到JAVA_HOME,CATALINA_HOME以及CATALINA_BASE环境变量)。
4.使用SecurityManager启动Tomcat
$CATALINA_HOME/bin/catalina.sh start -security (Unix)
%CATALINA_HOME%bincatalina start -security (Windows)
一旦你配置了catalina.policy文件,Tomcat可以使用”-security”选项启动SecurityManager。