启用 Java 安全管理器

缺省情况下, Java™ 应用程序对 Java API 请求的活动没有安全限制。 要使用 Java 安全性防止 Java 应用程序执行潜在的不安全操作,您可以为应用程序运行所在的 JVM 启用安全管理器。

关于此任务

安全管理器会强制执行一种安全策略,该策略是一组分配给代码源的许可权(系统访问特权)。 Java 平台随附了缺省策略文件。 但是,要使 Java 应用程序在 Java 安全性处于活动状态时能够在 CICS ® 中成功运行,必须指定额外的策略文件,以授予 CICS 运行应用程序所需的许可权。

您必须为已启用安全管理器的每种 JVM 指定此额外的策略文件。 CICS 提供了一些示例,您可以使用这些示例来创建自己的策略。

注: 在 Liberty JVM 服务器中不支持启用 Java 安全管理器。
  • OSGi 安全代理程序示例会在您包含安全概要文件的项目中创建一个名为 com.ibm.cics.server.examples.security 的 OSGi 中间件束。 本概要文件适用于安装该概要文件的框架中的所有 OSGi 束。
  • example.permissions 文件包含特定于在 JVM 服务器中运行应用程序的许可权,包括一项检查,用于确保应用程序未使用 System.exit() 方法。
  • CICS 必须对部署 OSGi 捆绑软件的 zFS 中的目录具有读和执行访问权。

对于在 JVM 服务器的 OSGi 框架中运行的应用程序:

过程

  1. IBM® CICS SDK for Java 中创建插件项目,然后选择提供的 OSGi 安全代理程序示例。
  2. 在项目中,选择 example.permissions 文件以编辑安全策略的许可权。
    1. 验证是否正确指定了 CICS zFS 和 DB2® 安装目录。
    2. 根据需要添加其他许可权。
  3. 将 OSGi 捆绑软件部署到 zFS 中的合适目录,例如 /u/bundles
  4. 编辑 JVM 服务器的 JVM 概要文件,以将 OSGi 捆绑软件添加到 OSGI_BUNDLES 选项中的任何其他捆绑软件之前:
    • OSGI_BUNDLES=/u/bundles/com.ibm.cics.server.examples.security_1.0.0.jar
  5. 将以下 Java 属性添加到 JVM 概要文件以启用安全性。
    • -Djava.security.policy=all.policy
  6. 将以下 Java 环境变量添加到 JVM 概要文件以在 OSGi 框架中启用安全性:
    • org.osgi.framework.security=osgi
  7. 要允许 OSGi 框架以 Java 2 安全性启动,请添加以下策略:
    • grant { permission java.security.AllPermission; };
  8. 保存您的更改,并启用 JVMSERVER 资源,以在 JVM 服务器中安装中间件束。
  9. 可选: 激活 Java 2 安全性。
    1. 要激活 Java 2 安全策略机制,请将其添加到相应的 JVM 概要文件。 您还必须编辑 Java 2 安全策略以授予相应的许可权。
    2. 要在 Java 2 安全策略机制处于活动状态的情况下使用 Java 应用程序中的 JDBC 或 SQLJ ,请使用 IBM Data Server Driver for JDBC and SQLJ。
    3. 要激活 Java 2 安全策略机制,请编辑 JVM 概要文件。
    4. 通过添加示例 1 中显示的行, 编辑 Java 2 安全策略以授予对 JDBC 驱动程序的许可权。 代替 db2xxx,指定所有 Db2 库所在的目录。 许可权适用于此级别下的所有目录和文件。 这样可支持您使用 JDBC 和 SQLJ。
    5. 编辑 Java 2 安全策略以授予读许可权,方法是添加示例 2 中显示的行。 如果不添加读许可权,那么运行 Java 程序会产生 AccessControl异常和不可预测的结果。 可以将 JDBC 和 SQLJ 与 Java 2 安全策略配合使用。
    示例 1:
    grant codeBase "file:/usr/lpp/db2xxx/-" {
      permission java.security.AllPermission;
    };   
    示例 2:
    grant {
    
    // allows anyone to read properties
    permission java.util.PropertyPermission "*", "read";
    
    };

结果

调用 Java 应用程序时, JVM 会确定该类的代码源,并在授予该类相应许可权之前咨询安全策略。