启用 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. CICS Explorer® SDK 中创建一个插件项目,并选择提供的 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 概要文件。中描述了如何设置 Java 2 安全策略。
    4. 通过添加示例 1 中所显示的行来编辑 Java 2 安全策略以将许可权授予 JDBC 驱动程序。在以下指定某个目录来取代 db2xxx,其中所有 DB2 库均在该目录中。许可权适用于此级别下的所有目录和文件。这样可支持您使用 JDBC 和 SQLJ。
    5. 通过添加示例 2 中所显示的行来编辑 Java 2 安全策略以授予读许可权。如果您不添加读许可权,那么运行 Java 程序会生成 AccessControlExceptions 和不可预测的结果。您可以将 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 会确定该类的代码源,并在向该类授予适当的许可权之前参考安全策略。