一、前言
对于Java安全管理器SecurityManager大家可能平时使用的比较少,但是对于应用系统安全访问控制并不陌生 - 用户访问安全、资源安全权限控制等,tomcat使用了org.apache.naming.JndiPermission的自定义权限类,否则用户只需要写一个关闭jvm虚拟机jsp运行(示例代码如下),tomcat的服务系统就被关闭了
<% System.exit(1); %>
二、步骤配置
1.安全策略文件配置 - 可以用默认策略
你也可以在$CATALINA_BASE/conf/catalina.policy路径下自定义配置安全管理器的策略,替换JDK目录中的java.policy文件,配置案例参考
grant [signedBy <signer>,] [codeBase <code source>] {@b@ permission <class> [<name> [, <action list>]];@b@};@b@@b@示例如下@b@@b@grant { @b@//对系统和用户目录“读”的权限@b@permission java.util.PropertyPermission "user.dir", "read";@b@permission java.util.PropertyPermission "user.home", "read";@b@permission java.util.PropertyPermission "java.home", "read";@b@permission java.util.PropertyPermission "java.class.path", "read";@b@permission java.util.PropertyPermission "user.name", "read"; @b@//对线程和线程组的操作权限@b@permission java.lang.RuntimePermission "modifyThread";@b@permission java.lang.RuntimePermission "modifyThreadGroup";@b@//操作Socket端口的各种权限@b@permission java.net.SocketPermission "-", "listen";@b@permission java.net.SocketPermission "-", "accept";@b@permission java.net.SocketPermission "-", "connect";@b@permission java.net.SocketPermission "-", "read";@b@permission java.net.SocketPermission "-", "write";@b@//读写文件的权限@b@permission java.io.FilePermission "-", "read";@b@permission java.io.FilePermission "-", "write";@b@//退出系统的权限,例如System.exit(0)@b@permission java.lang.RuntimePermission "exitVM";@b@};
2.使用SecurityManager启动Tomcat
$CATALINA_HOME%/bin/catalina.sh start -security (Unix)@b@%CATALINA_HOME%/bin/catalina start -security (Windows)
三、Java policy配置
方法一:默认加载的策略文件的位置,我们可以从${JDK_HOME}/jre/lib/security目录下的java.security文件进行修改
# The default is to have a single system-wide policy file,@b@@b@# and a policy file in the user's home directory.@b@@b@policy.url.1=file:${java.home}/lib/security/java.policy@b@@b@policy.url.2=file:${user.home}/.java.policy
方法二: 在启动的时候指定其他位置的策略文件
java -Djava.security.manager -Djava.security.policy=../lib/security/java.policy main