首页

配置tomcat安全管理器SecurityManager(防止别人植入恶意脚本控制你的应用)

标签:securityManager,安全模式启动,Tomcat莫名关闭,漏洞,脚本     发布时间:2016-07-19   

一、前言

对于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
@b@