SecurityManager在tomcat中的使用(翻译)

本文详细介绍了如何利用JavaSecurityManager增强Tomcat服务器安全性,通过设置安全策略文件来控制权限,防止恶意Servlet、JSP导致的系统崩溃,并讨论了标准权限类和自定义权限类的应用。同时,阐述了如何启动带有SecurityManager的Tomcat,以及其配置步骤。

原文: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类的总结:

  • java.util.PropertyPermission - Controls read/write access to JVM properties such as java.home.
  • java.lang.RuntimePermission - Controls use of some System/Runtime functions like exit() and exec(). Also control the package access/definition.
  • java.io.FilePermission - Controls read/write/execute access to files and directories.
  • java.net.SocketPermission - Controls use of network sockets.
  • java.net.NetPermission - Controls use of multicast network connections.
  • java.lang.reflect.ReflectPermission - Controls use of reflection to do class introspection.
  • java.security.SecurityPermission - Controls access to Security methods.
  • java.security.AllPermission - Allows access to all permissions, just as if you were running Tomcat without a SecurityManager.
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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值