| 网站首页 | 测试咨讯 | 新手入门 | 专注性能 | 测试技术 | 测试管理 | 测试工具 | 开发社区 | 工具下载 | 资料下载 | 测试论坛 | 

[CNTester联盟群]交流群:34446273/21968356/64461572 白盒群:18400216 自动化群:2706508 性能群:4498858 外包群:59649884 管理群(需有管理经验):64442523

新手入门
 入门指南
 经验之谈
测试咨讯
 行业新闻
 网站动态
 人才就业
 CNTester基金
 标准规范
专注性能
 性能测试知识
 性能测试工具
 程序设计性能
 数据库性能
 Web应用服务器性能
 操作系统性能
 服务器与网络性能
测试技术
 用例设计
 性能测试
 自动化测试
 Web测试
 面向对象测试
 综合技术
 阶段性测试
 行业类测试
测试管理
 项目管理
 项目案例
 质量管理
 软件过程
测试工具
 Mercury系列
 Rational系列
 测试管理工具
 性能测试工具
 功能测试工具
 单元测试工具
 其它测试工具
开发社区
 Java技术
 DotNet技术
 C技术
 数据库技术
 操作系统
 服务器与中间件
工具下载
 测试工具
 开发工具
 企业工程
 网络通信
 媒体桌面
 游戏娱乐
 其他工具
资料下载
 测试资料
 程序设计
 数据库
 操作系统
 应用服务器
 电子期刊
 其他资料
 
 
您现在的位置: 中国测试员网站 >> 开发社区 >> 服务器与中间件 >> 文章正文
  Tomcat系统安全管理与权限管理           ★★★ 【字体:
Tomcat系统安全管理与权限管理
作者:未知    文章来源:未知    点击数:    更新时间:2007-10-18    

1. Tomcat系统安全管理
1.1 背景知识
Java的SecurityManager允许浏览器在它可执行的范围内运行,这样可以 防止不可靠的程序读写用户在局部文件系统里的文件,或者未经授权进行网络连接,等等。同样, SecurityManager可用来防止不可靠的程序在你的浏览器上运行,在运行Tomcat时,使用 SecurityManager可以保护你的服务器不受到类似于木马的servlets, JSPs, JSP beans 和标签库(tag libraries)的影响,或者发生错误。
试想某个被允许在你的网站上发表JSPs的人不慎包括了以下的语句在他们的JSP里:
<% System.exit(1); %>
每次Tomcat运行该JSP都会导致Tomcat中断。使用Java SecurityManager 如同多了一层防护,可以让服务器更加安全可靠。
警告--虽然Tomcat 5 的程序通过了安全检查,最重要的程序包都已被 保护,新的安全机制也已实施,但在允许用户发表网络程序,JSPs, servlets, beans, 或 标签库(tag libraries)之前,你还是有必要确保 SecurityManager 的各项配置符合你的要求。 当然,有SecurityManager绝对比没有它要安全的多。
1.2 许可 Permissions
Java的Permission类是用来定义Tomcat载入的类所拥有的权限。Java本身包括了一些 Permission类,你也可以在你的网络应用中加入你自己的Permission类。 这两种技术在Tomcat 5里都被应用。
1.2.1 标准许可
这里将简单总结标准系统中适用于Tomcat的SecurityManager 和 Permission 类。 更多信息请参看 http://java.sun.com/security/

  java.util.PropertyPermission - 控制读/写Java虚拟器的属性,如java.home 。
  java.lang.RuntimePermission - 控制使用一些系统/运行时(System/Runtime)的功能,如exit() 和 exec()。它也控制包(package)的访问/定义。
  java.io.FilePermission - 控制对文件和目录的读/写/执行操作。
  java.net.SocketPermission - 控制使用网路sockets连接。
  java.net.NetPermission - 控制使用multicast网路连接。
  java.lang.reflect.ReflectPermission - 控制使用reflection来对类进行检视。
  java.security.SecurityPermission - 控制对安全方法的访问。
  java.security.AllPermission - 给予所有访问权限,就如你运行一个没有SecurityManager的Tomcat 。
1.2.2 Tomcat 中可修改的许可
Tomcat利用一个叫做org.apache.naming.JndiPermission 许可类。它用来控制以JNDI命名的文件资源的可读权限。该许可的名称是以JNDI来表达, 没有命令。在给予许可时,"*"的结尾可以用来以wild card方式映射JNDI命名 的文件资源。例如,你可以在你的政策(policy)文件加入以下一行:
permission org.apache.naming.JndiPermission "jndi://localhost/examples/*";
一个象这样的许可(Permission)会在部署网络程序时被自动产生,允许它读取它自己的静态资源, 但不允许它使用文件访问权来读取其它文件(除非你明确地给出访问那些文件的许可).
并且, Tomcat 总是自动产生以下文件许可:
permission java.io.FilePermission "** your application context**", "read";
这里**your application context**代表那个拥有你的应用程序的文件夹(或者是WAR文件)。
1.3 改变 Tomcat 中的 SecurityManager
1.3.1 政策文件的格式
由Java SecurityManager实现的安全政策被配置存放在 $CATALINA_HOME/conf/catalina.policy 文件里。这个文件完全替代了 JDK系统目录里的java.policy文件。这个catalina.policy 文件可以手动修改, 或者使用Java 1.2 及其后版本的 policytool 程序修改。
catalina.policy 文件中的条文使用了标准的java.policy 文件格式,如下:
// Example policy file entry
grant [signedBy &lt;signer&gt;,] [codeBase &lt;code source&gt;] {
permission &lt;class&gt; [&lt;name&gt; [, &lt;action list&gt;]];
};
 
其中signedBy 和 codeBase是选择项。 注释行是以"//"开始,直到该行结束。codeBase是URL的格式,文件的URL中可用如 ${java.home}和${catalina.home}等属性(这些属性会被扩展到由环境变量 JAVA_HOME 和 CATALINA_HOME为他们定义的目录路径)。
1.3.2 缺省政策文件
缺省$CATALINA_HOME/conf/catalina.policy 文件看起来象这样:  
// =================================================================
// catalina.corepolicy - Security Policy Permissions for Tomcat 5
//
// This file contains a default set of security policies to be enforced (by the
// JVM) when Catalina is executed with the "-security" option.  In addition
// to the permissions granted here, the following additional permissions are
// granted to the codebase specific to each web application:
//
// * Read access to the document root directory
//
// $Id: security-manager-howto.xml 301460 2003-01-15 03:40:45Z glenn $
// =============================================================
// ========== SYSTEM CODE PERMISSIONS ===============
// ========== 系统源码许可控制 ===============
// These permissions apply to javac
// 下面的许可适用于javac
grant codeBase "file:${java.home}/lib/-" {
        permission java.security.AllPermission;
};
// These permissions apply to all shared system extensions
// 下面的许可适用于java的扩展
grant codeBase "file:${java.home}/jre/lib/ext/-" {
        permission java.security.AllPermission;
};
// These permissions apply to javac when ${java.home] points at $JAVA_HOME/jre
// 下面的许可适用于当${java.home] 是 $JAVA_HOME/jre时的 javac
grant codeBase "file:${java.home}/../lib/-" {
        permission java.security.AllPermission;
};
// These permissions apply to all shared system extensions when
// 下面的许可适用于java的扩展
// ${java.home} points at $JAVA_HOME/jre
grant codeBase "file:${java.home}/lib/ext/-" {
        permission java.security.AllPermission;
};
// ========== CATALINA CODE PERMISSIONS ===============
// ========== CATALINA的源码许可控制 =============

// These permissions apply to the launcher code
// 以下许可适用于启动Tomcat的程序
grant codeBase "file:${catalina.home}/bin/commons-launcher.jar" {
        permission java.security.AllPermission;
};
// These permissions apply to the server startup code
// 以下许可适用于启动服务器的程序
grant codeBase "file:${catalina.home}/bin/bootstrap.jar" {
        permission java.security.AllPermission;
};
// These permissions apply to the servlet API classes
// and those that are shared across all class loaders
// located in the "common" directory
// 以下许可适用于 Servlet 的 API 和 common目录里的程序
grant codeBase "file:${catalina.home}/common/-" {
        permission java.security.AllPermission;
};
// These permissions apply to the container's core code, plus any additional
// libraries installed in the "server" directory
// 下面的许可适用于Tomcat的核心和 server 目录里的程序
grant codeBase "file:${catalina.home}/server/-" {
        permission java.security.AllPermission;
};
// ========== WEB APPLICATION PERMISSIONS ============
// ========== WEB 应用的许可 ===========
// These permissions are granted by default to all web applications
// In addition, a web application will be given a read FilePermission
// and JndiPermission for all files and directories in its document root.
// 缺省情况下,所有WEB 应用拥有下面这些许可,另外还有 它们本身文件夹里的 "read" FilePermission
// 和JndiPermission。
grant {
        // Required for JNDI lookup of named JDBC DataSource's and
        // javamail named MimePart DataSource used to send mail
        permission java.util.PropertyPermission "java.home", "read";
        permission java.util.PropertyPermission "java.naming.*", "read";
        permission java.util.PropertyPermission "javax.sql.*", "read";
        // OS Specific properties to allow read access
  permission java.util.PropertyPermission "os.name", "read";
  permission java.util.PropertyPermission "os.version", "read";
  permission java.util.PropertyPermission "os.arch", "read";
  permission java.util.PropertyPermission "file.separator", "read";
  permission java.util.PropertyPermission "path.separator", "read";
  permission java.util.PropertyPermission "line.separator", "read";
        // JVM properties to allow read access
        permission java.util.PropertyPermission "java.version", "read";
        permission java.util.PropertyPermission "java.vendor", "read";
        permission java.util.PropertyPermission "java.vendor.url", "read";
        permission java.util.PropertyPermission "java.class.version", "read";
  permission java.util.PropertyPermission "java.specification.version", "read";
  permission java.util.PropertyPermission "java.specification.vendor", "read";
  permission java.util.PropertyPermission "java.specification.name", "read";
  permission java.util.PropertyPermission "java.vm.specification.version", "read";
  permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
  permission java.util.PropertyPermission "java.vm.specification.name", "read";
  permission java.util.PropertyPermission "java.vm.version", "read";
  permission java.util.PropertyPermission "java.vm.vendor", "read";
  permission java.util.PropertyPermission "java.vm.name", "read";
        // Required for getting BeanInfo
        permission java.lang.RuntimePermission "accessClassInPackage.sun.beans.*";
        // Required for OpenJMX
        permission java.lang.RuntimePermission "getAttribute";
  // Allow read of JAXP compliant XML parser debug
  permission java.util.PropertyPermission "jaxp.debug", "read";
};
// 你还可以给某个特定的WEB应用赋予其它许可。
// You can assign additional permissions to particular web applications by
// adding additional "grant" entries here, based on the code base for that
// application, /WEB-INF/classes/, or /WEB-INF/lib/ jar files.
//
// Different permissions can be granted to JSP pages, classes loaded from
// the /WEB-INF/classes/ directory, all jar files in the /WEB-INF/lib/
// directory, or even to individual jar files in the /WEB-INF/lib/ directory.
//
// For instance, assume that the standard "examples" application
// included a JDBC driver that needed to establish a network connection to the
// corresponding database and used the scrape taglib to get the weather from
// the NOAA web server.  You might create a "grant" entries like this:
//
// The permissi

[1] [2] [3] [4] 下一页

文章录入:root    责任编辑:root 
  • 上一个文章:

  • 下一个文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
    最新热点 最新推荐 相关文章
    · 面向对象设计与编程核心技术
    · Tomcat系统安全管理与权限管理
    · 雅虎公司C#笔试题
    · 利用Java事件处理机制实现录制、回放功能
    · apache+tomcat+mysql负载均衡和集群
    · Linux 指令大全
    · 应用服务器内存泄露问题诊断一例
    · 追求代码质量: 软件架构的代码质量
    · 对话 UNIX
    · 关于一些算法问题与朋友的讨论
    · 对话 UNIX
    · nmon 性能:分析 AIX 和 Linux 性能的免费
    · 追求代码质量: 谨防紧密耦合!
    · 应用服务器内存泄露问题诊断一例
    · Linux 指令大全
    · C 编程最佳实践
    · LPI 证书 101 考试准备,第2部分 [正则表
    · LPI 证书 101 考试准备,第1 部分 [使用L
    · Linux 究竟是什么?
    · 利用Java事件处理机制实现录制、回放功能
    Jboss安全性配置
    apache+tomcat+mysql负载均衡
    集群与jetspeed
     
     
     
    ======> [CNTester联盟群]交流群:34446273/21968356/64461572 白盒群:18400216 自动化群:2706508 性能群:4498858 外包群:59649884 管理群(需有管理经验):64442523
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | 

    Copyright@2007 by CNTester.com 中国测试员网站 桂ICP备07005590

    本站为开源免费网站,非商业赢利性组织。本站文章部分从网络搜索获取,如果您认为某些侵犯了您的权益,麻烦您联系本站,我们会尽快删除相关内容,同时也希望您的谅解,我们的初衷是为了让更多人去学习这方面的知识,让行业有更好的发展。

    联系电话: 15021358905