Java 管理扩展 (JMX) 安全性

可在分布式环境中保护受管 Bean (MBean) 调用。

有关可用的 MBean 的更多信息,请参阅 使用受管 Bean (MBean) 进行管理

在分布式部署拓扑中,MBean 直接驻留在目录服务器和容器服务器上。 通常,分布式拓扑中的 JMX 安全性遵循 Java 管理扩展 (JMX) 规范中指定的 JMX 安全性规范。 它由以下三个部分组成:
  1. 认证:需要在连接器服务器中认证远程客户机。
  2. 访问控制:MBean 访问控制限制 MBean 信息的访问者及 MBean 操作的执行者。
  3. 安全传输:JMX 客户机与服务器之间的传输可使用 TLS/SSL 进行保护。

认证

JMX 为连接器服务器提供认证远程客户机的方法。 对于 RMI 连接器,认证是通过在创建连接器服务器时提供实现 JMXAuthenticator 接口的对象完成的。 因此, eXtreme Scale 实现此 JMXAuthenticator 接口以使用 ObjectGrid 认证程序插件来认证远程客户机。 请参阅 Java SE 安全性教程-步骤 2 ,以获取有关 eXtreme Scale 如何认证客户机的详细信息。

JMX 客户机遵循 JMX API 来提供在连接至连接器服务器时要使用的凭证。 JMX 框架将该凭证传递至连接器服务器,然后调用 JMXAuthenticator 实现以进行认证。 如上所述,JMXAuthenticator 实现然后将认证委派给 ObjectGrid Authenticator 实现执行。

查看以下示例,此示例描述如何使用凭证连接至连接器服务器:

javax.management.remote.JMXServiceURL jmxUrl = new JMXServiceURL(
        "service:jmx:rmi:///jndi/rmi://localhost:1099/objectgrid/MBeanServer");

    environment.put(JMXConnector.CREDENTIALS, new UserPasswordCredential("admin", "xxxxxx"));

    // Create the JMXCconnectorServer
    JMXConnector cntor = JMXConnectorFactory.newJMXConnector(jmxUrl, null);

    // Connect and invoke an operation on the remote MBeanServer
    cntor.connect(environment);

在上一示例中,提供了 UserPasswordCredential 对象,其用户标识设置为 admin,密码设置为 xxxxx。 此 UserPasswordCredential 对象是在环境映射中设置的,该映射在 JMXConnector.connect(Map) 方法中使用。 然后此 UserPasswordCredential 对象被 JMX 框架传递至服务器,最终传递至 ObjectGrid 认证框架以进行认证。

客户机编程模型严格遵循 JMX 规范。

访问控制

JMX MBean Server 可能有权访问敏感信息,并可能能够执行敏感操作。 JMX 提供了必要的访问控制,此访问控制确定哪些客户机可以访问该信息以及谁可以执行这些操作。 通过定义用于控制对 MBean Server 及其操作的访问的许可权,在标准 Java 安全模型上构建访问控制。

对于 JMX 操作访问控制或授权, eXtreme Scale 依赖于 JMX 实现提供的 JAAS 支持。 在执行程序过程中的任何位置,所执行线程当前都有一组许可权。 如果这类线程调用 JMX 规范操作,那么这些许可权又称为持有许可权。 执行 JMX 操作时,系统会执行安全性检查以检查持有许可权是否隐含所需许可权。

MBean 策略定义遵循 Java 策略格式。 例如,以下策略授予所有签署者和所有代码库检索 PlacementServiceMBean 的服务器 JMX 地址的权限。 但是,仅限于 com.ibm.websphere.objectgrid 域的签署者和代码库。

grant {
    permission javax.management.MBeanPermission
        "com.ibm.websphere.objectgrid.management.PlacementServiceMBean#retrieveServerJMXAddress 
					[com.ibm.websphere.objectgrid:*,type=PlacementService]",
        "invoke";
}

您可以使用以下策略示例来完成基于远程客户机标识的授权。 此策略授予的 MBean 许可权与以上示例相同,只是仅授予 X500Principal 名称如下的用户:CN=Administrator,OU=software,O=IBM,L=Rochester,ST=MN,C=US

grant principal javax.security.auth.x500.X500Principal "CN=Administrator,OU=software,O=IBM,
				L=Rochester,ST=MN,C=US" {permission javax.management.MBeanPermission
        "com.ibm.websphere.objectgrid.management.PlacementServiceMBean#retrieveServerJMXAddress 
				[com.ibm.websphere.objectgrid:*,type=PlacementService]",
        "invoke";
}

仅当打开安全管理器时,才会检查 Java 策略。 启动目录服务器和容器服务器时指定 -Djava.security.manager JVM 参数以强制实施 MBean 操作访问控制。

安全传输

JMX 客户机与服务器之间的传输可使用 TLS/SSL 进行保护。 如果目录服务器或容器服务器的 transportType 设置为 SSL_Required 或 SSL_Supported,那么必须使用 SSL 以连接到 JMX 服务器。

要使用 SSL,您需要在 MBean 客户机上使用 -D 系统属性配置信任库、信任库类型和信任库密码:
  1. -Djavax.net.ssl.trustStore=TRUST_STORE_LOCATION
  2. -Djavax.net.ssl.trustStorePassword=TRUST_STORE_PASSWORD
  3. -Djavax.net.ssl.trustStoreType=TRUST_STORE_TYPE
如果在 java_home/jre/lib/security/java.security 文件中使用 com.ibm.websphere.ssl.protocol.SSLSocketFactory 作为 SSL 套接字工厂,请使用以下属性:
  1. -Dcom.ibm.ssl.trustStore=TRUST_STORE_LOCATION
  2. -Dcom.ibm.ssl.trustStorePassword=TRUST_STORE_PASSWORD
  3. -Dcom.ibm.ssl.trustStoreType=TRUST_STORE_TYPE
要在独立配置中启用传输层安全性/安全套接字层 (TLS/SSL) 后获取此信息,必须在设置了 JMX 服务端口的情况下启动目录服务器和容器服务器。 使用下列其中一种方法来设置 JMX 服务端口:
  • startOgServerstartXsServer 脚本上使用 -JMXServicePort 选项。
  • 如果您使用嵌入式服务器,请在 ServerProperties 接口中调用 setJMXServicePort 方法来设置 JMX 服务端口。
目录服务器上 JMX 服务端口的缺省值是 1099。 必须为配置中的每个 JVM 使用不同端口号。 如果要使用 JMX/RMI,即使要使用缺省端口值,也请显式指定 -JMXServicePort 选项和端口号。

当您希望从目录服务器显示容器服务器信息时,必须设置 JMX 服务端口。 例如,当您使用 xscmd -c showMapSizes 命令时,该端口是必需的。

设置 JMX 接口端口以避免创建临时端口。 使用下列其中一种方法来设置 JMX 连接器端口。
  • startOgServerstartXsServer 脚本上使用 -JMXConnectorPort 选项。
  • 如果您使用嵌入式服务器,请在 ServerProperties 接口中调用 setJMVConnectorPort 方法。