当用户尝试连接到代理时,代理将通过检查所提供的名称和密码来对用户进行验证。如果名称和密码与特定于代理的(每个代理均配置为需要查阅)用户系统信息库中的名称和密码相匹配,则允许该用户与代理建立连接。
您负责维护系统信息库中用户、用户组及用户密码的列表。各个代理实例可以使用不同的用户系统信息库。本节将说明如何创建、填充和管理系统信息库。
系统信息库可以是以下类型之一:
Message QueueTM 附带的平面文件系统信息库
此类型的用户系统信息库非常易于使用。您可以使用用户管理器实用程序 (imqusermgr) 来填充和管理系统信息库。要启用验证,您需要用每个用户的名称和密码以及用户组的名称填充用户系统信息库。
有关设置和管理用户系统信息库的详细信息,请参见使用平面文件用户系统信息库
LDAP 服务器
这可以是现有的或新的 LDAP 目录服务器,这种服务器使用 LDAP v2 或 v3 协议。它并不像平面文件系统信息库那样易于使用,但它的可伸缩性更好,因此更适用于生产环境。
如果您目前使用的是 LDAP 用户系统信息库,请使用 LDAP 供应商提供的工具来填充和管理用户系统信息库。有关详细信息,请参见使用 LDAP 服务器管理用户系统信息库。
Message Queue 提供了一个平面文件用户系统信息库和一个命令行工具,即用户管理器实用程序 (imqusermgr),您可以使用它来填充和管理平面文件用户系统信息库。以下各节介绍平面文件用户系统信息库以及如何使用用户管理器实用程序来填充和管理该系统信息库。
平面文件用户系统信息库是特定于实例的。默认的用户系统信息库(名为 passwd)是为启动的每个代理实例自动创建的。此用户系统信息库所在的目录由与该系统信息库相关联的代理实例的名称标识(请参见附录 A, Message QueueTM 数据在特定平台上的位置):
…/instances/instanceName/etc/passwd
创建的系统信息库具有两个条目。表 7–1 中的每一行显示一个条目。
表 7–1 用户系统信息库中的初始条目
用户名 |
密码 |
组 |
状态 |
---|---|---|---|
admin |
admin |
admin |
处于活动状态 |
guest |
guest |
anonymous |
处于活动状态 |
这些初始条目使 Message Queue 代理安装后即可使用,不需要管理员的干预:
利用初始 admin 用户条目,您可以通过 imqcmd 命令使用默认的 admin 用户名和密码管理代理实例。您应更新此初始条目以更改密码(请参见更改默认的管理员密码)。
以下各节说明如何填充和管理平面文件用户系统信息库。
使用 Message Queue 用户管理器实用程序 (imqusermgr),您可以编辑或填充平面文件用户系统信息库。本节介绍了用户管理器实用程序。下文说明如何使用 imqusermgr 子命令完成特定任务。
有关 imqusermgr 命令的完整参考信息,请参见第 13 章,命令行参考。
使用用户管理器之前,请谨记以下事项:
如果特定于代理的用户系统信息库不存在,您必须启动相应的代理实例来创建此系统信息库。
必须在安装了代理的主机上运行 imqusermgr 命令。
您必须具有写入系统信息库的适当权限:即,在 Solaris 和 Linux 上,您的身份必须是 root 用户或首次创建代理实例的用户。
以下各节中的示例采用默认代理实例。
imqusermgr 命令包含子命令 add、delete、list 和 update。
add 子命令将用户和关联的密码添加到指定的(或默认的)代理实例系统信息库中,并可以选择指定用户所属的组。 该子命令语法如下所示:
add [-i instanceName] -u userName -p passwd [-g group] [ -s]
delete 子命令从指定的(或默认的)代理实例系统信息库中删除指定用户。 该子命令语法如下所示:
delete [-i instanceName] -u userName [ -s] [-f]
list 子命令显示有关指定的(或默认的)代理实例系统信息库中指定用户或所有用户的信息。 该子命令语法如下所示:
list [ -i instanceName] [-u userName]
update 子命令更新指定的(或默认的)代理实例系统信息库中指定用户的密码和/或状态。该子命令语法如下所示:
update [ -i instanceName] -u userName -p passwd [ -a state] [-s] [ -f]
update [-i instanceName] -u userName -a state [-p passwd] [-s] [-f]
表 7–2 列出了 imqusermgr 命令的选项。
表 7–2 imqusermgr 选项
选项 |
描述 |
---|---|
-a activeState |
指定用户是否处于活动状态 (true/false)。true 表示处于活动状态。这是默认值。 |
-f |
执行操作,无需用户确认。 |
-h |
显示用法帮助。不执行命令行上的其他选项。 |
-i instanceName |
指定命令要应用到的代理实例名。如果未指定,则采用默认实例名 imqbroker。 |
-p passwd |
指定用户密码。 |
-g group |
指定用户组。有效值包括 admin、user 和 anonymous。 |
-s |
设置无提示模式。 |
-u userName |
指定用户名。 |
-v |
显示版本信息。不执行命令行上的其他选项。 |
在代理实例的用户系统信息库中添加用户条目时,可以指定以下三个预定义组之一: admin、user 或 anonymous。如果不指定任何组,则默认属于 user 组。应按如下方式指定组:
admin 组。用于代理管理员。默认情况下,指定到该组中的用户可以配置和管理代理。您可以为 admin 组指定多个用户。
user 组。用于普通(非管理)Message Queue 客户端用户。多数客户端用户都属于 user 组。默认情况下,该组中的用户可以生成发往所有主题和队列的消息,使用来自所有主题和队列的消息,以及浏览任意队列中的消息。
anonymous 组。用于那些不想使用代理已知的用户名(可能是因为客户端应用程序不知道要使用的实际用户名)的 Message Queue 客户端。 此帐户类似于大多数 FTP 服务器中的匿名帐户。每次只能为 anonymous 组分配一个用户。 与 user 组不同,应限定 anonymous 组的访问权限,或者在部署时删除该组中的用户。
要更改用户所属的组,必须删除该用户的条目,然后为该用户添加另一个条目并为其指定新组。
您不能重命名或删除这些系统创建的组,也不能创建新组。但是,您可以指定访问规则,以定义该组的成员可以执行的操作。有关详细信息,请参见用户授权:访问控制属性文件。
向系统信息库中添加用户时,用户的默认状态是活动的。要使用户处于非活动状态,您必须使用 update 命令。例如,以下命令将使用户 JoeD 处于非活动状态:
imqusermgr update -u JoeD -a false
处于非活动状态的用户条目将保留在系统信息库中,但不能打开新连接。当某个用户处于非活动状态时,如果您试图添加具有相同名称的另一个用户,操作将失败。必须删除处于非活动状态的用户条目,或者更改新用户的名称,或者为新用户指定一个不同的名称。这样可以防止添加重复的用户名。
用户名不能包含星号 (*)、逗号 (,)、冒号 (:) 或者换行符或回车符。
用户名或密码必须至少包含一个字符。
如果用户名或密码包含空格,必须将整个用户名或密码用引号引起来。
除了命令 shell 限定的命令行中最多可输入的字符数之外,密码或用户名的长度没有限制。
要在系统信息库中添加用户,可以使用 add 子命令。例如,以下命令向默认代理实例用户系统信息库添加用户名为 Katharine、密码为 sesame 的用户。
imqusermgr add -u Katharine -p sesame -g user
要从系统信息库中删除用户,可以使用 delete 子命令。例如,以下命令删除用户 Bob:
imqusermgr delete -u Bob
要更改用户的密码或状态,可以使用 update 子命令。例如,以下命令将 Katharine 的密码更改为 aladdin:
imqusermgr update -u Katharine -p aladdin
要列出一个或所有用户的相关信息,可以使用 list 命令。以下命令显示名为 isa 的用户的相关信息:
imqusermgr list -u isa
% imqusermgr list -u isa User repository for broker instance: imqbroker ---------------------------------- User Name Group Active State ---------------------------------- isa admin true |
以下命令列出所有用户的相关信息:
imqusermgr list
% imqusermgr list User repository for broker instance: imqbroker -------------------------------------- User Name Group Active State -------------------------------------- admin admin true guest anonymous true isa admin true testuser1 user true testuser2 user true testuser3 user true testuser4 user false testuser5 user false |
为安全起见,应该将 admin 的默认密码更改为只有您自己知道的密码。以下命令将 mybroker 代理实例的默认管理员密码 admin 更改为 grandpoobah。
imqusermgr update mybroker -u admin -p grandpoobah
要快速确认此更改是否已生效,可以在代理实例运行时运行任何命令行工具。例如,以下命令将提示您输入密码:
imqcmd list svc mybroker -u admin
输入新密码 (grandpoobah) 将会被接受;而输入旧密码则会失败。
更改密码后,使用任何 Message Queue 管理工具(包含管理控制台)时都应该提供新密码。
要使用 LDAP 服务器来管理用户系统信息库,请执行以下任务:
编辑实例配置文件
为管理员设置访问控制
要让代理使用目录服务器,请设置代理实例配置文件 config.properties 中某些属性的值。设置这些属性后,每当用户试图连接到代理实例或执行消息传送操作时,代理实例都会在 LDAP 服务器中查询有关用户和组的信息。
实例配置文件位于代理实例目录下的某个目录中。路径的格式如下:
…/instances/instanceName /props/config.properties
有关实例目录在特定操作系统中的位置的信息,请参见附录 A, Message QueueTM 数据在特定平台上的位置
通过设置以下属性,指定您使用的是 LDAP 用户系统信息库:
imq.authentication.basic.user_repository=ldap |
设置 imq.authentication.type 属性,确定密码是以 Base64 (basic) 还是 MD5 (digest) 编码的形式从客户端传递给代理。使用 LDAP 目录服务器管理用户系统信息库时,必须将验证类型设置为 basic。例如,
imq.authentication.type=basic |
还必须设置控制 LDAP 访问的代理属性。这些属性存储在代理的实例配置文件中。安全服务对这些属性进行了讨论,安全属性对这些属性进行了总结。
Message Queue 使用 JNDI API 与 LDAP 目录服务器进行通信。有关这些属性的语法及其所引用的术语的详细信息,请查阅 JNDI 文档。Message Queue 使用 Sun JNDI LDAP 提供者并使用简单验证。
Message Queue 支持 LDAP 验证故障转移:可以指定要尝试进行验证的 LDAP 目录服务器列表(请参见 imq.user.repos.ldap.server 属性的参考信息)。
有关说明如何设置 LDAP 用户系统信息库相关属性的示例,请参见代理的 config.properties 文件。
必要时,还需要编辑访问控制属性文件中的用户/组和规则。有关使用访问控制属性文件的详细信息,请参见用户授权:访问控制属性文件。
如果您希望代理在连接验证和组搜索时通过 SSL 与 LDAP 目录服务器进行通信,您需要在 LDAP 服务器中激活 SSL,然后在代理配置文件中设置以下属性:
指定 LDAP 服务器进行 SSL 通信时所使用的端口。例如:
imq.user_repository.ldap.server=myhost:7878 |
将代理属性 imq.user_repository.ldap.ssl.enabled 设置为 true。
使用多个 LDAP 目录服务器时,可以使用 ldap:// 指定每个额外的目录服务器。例如:
imq.user_repository.ldap.server = myHost:7878 ldap:// otherHost:7878 …
用空格分隔每个额外的目录服务器。对于其他与 LDAP 相关的属性,列表中的所有目录服务器必须使用相同的值。
要创建管理用户,请使用访问控制属性文件指定能够创建 ADMIN 连接的用户和组。必须在 LDAP 目录中预定义这些用户和组。
能够创建 ADMIN 连接的任何用户或组都可以执行管理命令。
将代理属性 imq.accesscontrol.enabled 设置为 true(默认值),以允许使用访问控制文件。
imq.accesscontrol.enabled 属性允许使用访问控制文件。
打开访问控制文件 accesscontrol.properties。附录 A, Message QueueTM 数据在特定平台上的位置 中列出了该文件的位置。
该文件包含一个如下所示的条目:
service connection access control##################################connection.NORMAL.allow.user=*connection.ADMIN.allow.group=admin
列出的条目是示例。请注意,admin 组存在于基于文件的用户系统信息库中,而非默认存在于 LDAP 目录中。您必须将在 LDAP 目录中定义的组的名称替换为要为其授予 Message Queue 管理员权限的组的名称。
要为用户授予 Message Queue 管理员权限,请按如下所示输入用户名:
connection.ADMIN.allow.user= userName[[,userName2] …]
要为组授予 Message Queue 管理员权限,请按如下所示输入组名称:
connection.ADMIN.allow.group= groupName[[,groupName2] …]