本章介绍如何添加、删除和编辑可访问服务器的用户和组。
使用 Administration Server 可以访问应用程序数据,例如用户帐户、组列表、访问权限 (ACL)、组织单位以及用户和组的其他特定信息。
用户和组信息以文本格式存储在平面文件中或支持轻量目录访问协议 (Lightweight Directory Access Protocol, LDAP) 的目录服务器(如 Sun Java System Directory Server)中。LDAP 是一种运行在 TCP/IP 上的开放式目录访问协议,它可以扩展到全局规模,甚至上百万个条目。
通过目录服务器(如 Sun Java System Directory Server),可以从单个应用程序管理所有用户信息。您还可以配置目录服务器,以便允许用户从多个易于访问的网络位置检索目录信息。
在 Web Server 7.0 中,可以配置三种不同类型的目录服务来验证并授权用户和组。如果没有配置其他目录服务,新创建的目录服务的值将被设置为 default,而不管其类型为何。
创建目录服务时,将使用目录服务详细信息更新 server.xml 文件。
Web Server 7.0 支持的各种目录服务类型包括:
LDAP-在基于 LDAP 的目录服务器中存储用户和组信息。
密钥文件-密钥文件是一个文本文件,其中包含散列格式的用户密码以及该用户所属的组的列表。存储在密钥文件中的用户和组仅供 file 领域用来进行授权和验证,而与系统用户和组无关。
仅当要使用 HTTP 基本验证时才能使用密钥文件格式。
摘要文件-基于加密的用户名和密码存储用户和组信息。
摘要文件格式用于支持使用 HTTP 摘要验证。但是,这种文件格式也支持基本验证,因此可以用于两种验证方法。
如果要设置分布式管理,默认的目录服务必须是基于 LDAP 的目录服务。
用户是 LDAP 数据库中的个人,如公司的员工。组是共享某个通用属性的两个或多个用户。组织单位是公司内部的一个分支。
企业中的每个用户和组都通过标识名 (Distinguished Name, DN) 属性来表示。DN 属性是一个文本字符串,其中包含关联的用户、组或对象的标识信息。每当您更改用户或组目录条目时,就需要使用 DN。例如,每次为应用程序(如邮件或发布)创建或修改目录条目、设置访问控制以及设置用户帐户时,均需要指定 DN 信息。
上图显示了一个 DN 表示样例。以下示例显示了 Sun Microsystems 公司某个员工的典型 DN:
uid=doe,e=doe@sun.com,cn=John Doe,o=Sun Microsystems Inc.,c=US
该示例中每个等号前面的缩写的含义如下:
uid:用户 ID
e: 电子邮件地址
cn: 用户的通用名称
o: 组织
c: 国家/地区
DN 可能包括多种名称/值对。它们用于在支持 LDAP 的目录中标识证书主题和条目。
如果您当前没有目录,或者要在现有目录中添加一个新的子树,则可以使用 Directory Server 的 Administration Server LDIF 导入功能。此功能将接受一个包含 LDIF 的文件并尝试由 LDIF 条目生成一个目录或新子树。您还可以使用 Directory Server 的 LDIF 导出功能将当前目录导出到 LDIF。此功能将创建一个 LDIF 格式的文件,用来表示您的目录。可以使用 ldapmodify 命令和相应的 LDIF 更新语句来添加或编辑条目。
要使用 LDIF 在数据库中添加条目,请先在某个 LDIF 文件中定义条目,然后从 Directory Server 导入该 LDIF 文件。
验证数据库,也称为 auth-db,是指已知用户的数据库,同时也代表一种对照该数据库验证客户机请求的机制。服务器可以同时配置多个 auth-db 条目,并且这些条目的类型可以相同。auth-db 用户数据库由 ACL 处理模块使用。
服务器支持以下验证数据库:
LDAP-用户数据存储在 LDAP 目录服务器(如 Sun Java System Directory Server)中。
文件-用户数据存储在磁盘文件中。对于不提供(或不需要)集中用户管理的开发或小型部署,此 auth-db 尤其方便。文件 auth-db 支持若干不同的文件格式:
keyfile-keyfile 格式用于存储用户(以及每个用户的可选组成员)列表。密码存储为单向(不可恢复)散列。这是默认格式。
digestfile-digestfile 与 keyfile 非常类似,也支持 HTTP 摘要验证方法。
htaccess-这是一种传统格式,不应将其用于新的安装或添加新用户。
PAM-PAM 是 Web Server 支持的新 auth-db。PAM auth-db 将验证委托给 Solaris PAM 堆栈,这样,Web 服务器系统上的现有 Solaris 用户也能在 Web 服务器上进行验证。
仅在 Solaris 9 和 10(或更高版本)中支持 PAM auth-db,并且必须以超级用户身份运行 Web 服务器实例。
要通过管理控制台创建验证数据库,请单击配置 > 配置名称 > 访问控制 > 验证数据库 > 新建按钮。检查管理控制台内联帮助,了解有关字段说明。根据选定的验证数据库,这些字段将有所变化。例如,对于基于 PAM 的验证数据库,仅需要提供验证数据库的名称。
创建验证数据库必需的选项枚举如下:
LDAP |
|
密钥文件 |
|
摘要文件 |
|
PAM |
|
要通过 CLI 创建验证数据库,请执行以下命令:
wadm> create-authdb --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --url=ldap://ldapserver.com:20002/dc=xxx,dc=sun,dc=com LDAP1 |
请参见 CLI 参考 create-authdb(1)。
在上例中,为验证数据库指定了一个 URL。在此 URL 方案中,指定了验证数据库的类型。例如,ldap://ds.example.come/dc=example,dc=com 将某个 LDAP 目录服务器配置为验证数据库。
使用 Administration Server,可以编辑 LDAP 和文件 auth-db 类型的用户帐户、组列表、访问权限、组织单位以及用户和组的其他特定信息。
选择配置。
从配置列表中选择相应的配置。单击“配置”选项卡以获取列表。
单击“访问控制”>“用户”选项卡。
单击“新建”按钮。
添加用户信息。
输入用户 ID 和密码。(可选)输入用户所属的组。用户 ID 必须是唯一的。如果是基于 LDAP 的验证数据库,则 Administration Server 通过从搜索基(基 DN)开始向下搜索整个目录来查看该用户 ID 是否正在使用,以确保用户 ID 的唯一性。但是请注意,如果您使用 Directory Server ldapmodify 命令行实用程序(如果可用)创建用户,则不能确保用户 ID 的唯一性。
使用 CLI
要通过 CLI 创建用户,请执行以下命令:
wadm> create-user --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --authdb=KEYFILE1 --full-name=keyfile-config1-u1 keyfile-config1-u1 |
请参见 CLI 参考 create-user(1)。
选择配置。
从配置列表中选择相应的配置。单击“配置”选项卡以获取列表。
单击“访问控制”>“组”选项卡。
单击“新建”按钮。
输入组名。
从“将用户添加到组”部分中搜索现有用户并将其添加到组中。
在验证数据库(如 keyfile 或 digestfile)中创建组至少需要指定一个用户。
使用 CLI
要通过 CLI 创建组,请执行以下命令:
wadm> create-group --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --authdb=LDAP1 group1 |
请参见 CLI 参考 create-group(1)。
选择配置。
从配置列表中选择相应的配置。单击“配置”选项卡以获取列表。
单击“访问控制”>“用户”选项卡。
选择您需要从中删除用户的验证数据库。
在“搜索用户”文本框中输入用户 ID,然后单击“搜索”按钮。
从“用户 ID”列中选择相应的用户,然后单击“删除”按钮。
如果删除用户后组中不包含任何成员,从 keyfile/digestfile 验证数据库中删除用户也将删除关联的组。出现这种情况是因为 keyfile/digestfile 验证数据库不允许组中不包含任何成员。
使用 CLI
要通过 CLI 删除用户,请执行以下命令:
wadm> delete-user --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config config1 --authdb KEYFILE1 user1 |
请参见 CLI 参考 delete-user(1)。
选择配置。
从配置列表中选择相应的配置。单击“配置”选项卡以获取列表。
单击“访问控制”>“组”选项卡。
选择您需要从中删除组的验证数据库。
在“搜索用户”文本框中输入组名称,然后单击“搜索”按钮。
从“组名称”列中选择相应的组,然后单击“删除”按钮。
删除组并不会删除该组中包含的用户。您必须手动删除用户或重新指定组。
使用 CLI
要通过 CLI 删除组,请执行以下命令:
wadm> delete-group --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config config1 --authdb LDAP1 group1 |
请参见 CLI 参考 delete-group(1)。
组是 LDAP 数据库中用于描述一组对象的对象。Web Server 7.0 组由共享某个通用属性的用户组成。例如,对象集可以是您公司市场部的一些员工。这些员工可能属于一个名为 Marketing 的组。
对于 LDAP 服务,定义组的成员资格的方法有两种: 静态和动态。静态组可显式枚举其成员对象。静态组是一个 CN,其中包含 uniqueMembers 和/或 memberURLs 和/或 memberCertDescriptions。对于静态组,其成员并不共享某个通用属性,但 CN=<Groupname> 属性除外。
动态组允许您使用一个 LDAP URL 来定义一组仅适用于组成员的规则。对于动态组,其成员共享某个通用属性或一组在 memberURL 过滤器中定义的属性。例如,如果您需要一个包含 Sales 中所有员工的组,并且这些员工已经位于 LDAP 数据库中的
"ou=Sales,o=Airius.com" 之下,则可以使用以下 memberurl 定义一个动态组:
ldap:///ou=Sales,o=Airius.com??sub?(uid=*)
随后,该组将包含 "ou=Sales,o=sun" 点下的树中具有 uid 属性的所有对象,即所有 Sales 成员。
对于静态组和动态组,如果您使用 memberCertDescription,则其成员可以通过证书共享某个通用属性。请注意,这仅在 ACL 使用 SSL 方法时才适用。
创建新组后,您可以向其中添加用户或成员。
对于 LDAP 服务,您可以通过 Administration Server 在任意数量的用户的 DN 中指定相同的组属性来创建静态组。静态组不会改变,除非您向其中添加用户或从中删除用户。
使用 Administration Server 表单创建新静态组时,请考虑以下指导原则:
静态组可以包含其他静态或动态组。
可以选择为新组添加说明。
如果您的目录定义了任何组织单位,则可以使用“将新组添加到”列表指定要放置新组的位置。默认位置为目录的根节点(最顶端的条目)。
动态组具有一个 groupOfURLs 对象类 objectclass,可以没有也可以具有多个 memberURL 属性,其中每个属性都是一个描述一组对象的 LDAP URL。
对于 LDAP 服务,如果您希望基于任何属性自动将用户分组,或者希望将 ACL 应用于包含匹配 DN 的特定组,则 Web Server 允许您创建动态组。例如,您可以创建一个组,该组将自动包括任何包含属性 department=marketing 的 DN。如果您对 department=marketing 应用搜索过滤器,搜索将返回一个组,其中包含具有属性 department=marketing 的所有 DN。然后,您可以从基于此过滤器的搜索结果中定义一个动态组。随后,您可以为所获得的动态组定义一个 ACL。
Web Server 在 LDAP 服务器模式中以 objectclass = groupOfURLs 的方式实现动态组。groupOfURLS 类可以有多个 memberURL 属性,每个属性都包含一个 LDAP URL,用于枚举目录中的一组对象。组的成员是这些对象集的总和。例如,下面的组只包含一个成员 URL:
ldap:///o=mcom.com??sub?(department=marketing)
此示例介绍了一个集合,该集合包含所在部门为 "marketing" 的 "o=mcom.com" 下的所有对象。LDAP URL 可以包含搜索基 DN、范围和过滤器,但不能包含主机名和端口。这意味着您只能引用同一个 LDAP 服务器上的对象。LDAP URL 支持所有范围。
DN 会自动包含在内,因而不需要您向组中添加每个 DN。组是动态变化的,因为每次 ACL 验证需要查找组时,Web Server 都会执行一次 LDAP 服务器搜索。ACL 文件中使用的用户和组名与 LDAP 数据库中的对象的 cn 属性相对应。
Web Server 使用 cn (commonName) 属性作为 ACL 的组名。
在 dbswitch.conf 配置文件(将 ACL 数据库名称与实际的 LDAP 数据库 URL 相关联)和 ACL 文件(定义要用于每个 ACL 的数据库)中,同时定义了从 ACL 到 LDAP 数据库的映射。例如,如果要将基本访问权限授予名为 "staff" 的组中的成员,ACL 代码将查找对象类为 groupOf<anything> 且将 CN 设置为 "staff" 的对象。该对象可通过两种方法来定义组成员,即显式枚举成员 DN(与静态组的 groupOfUniqueNames 操作相同),或指定 LDAP URL(例如,groupOfURLs)。
组对象可以同时包含 objectclass = groupOfUniqueMembers 和 objectclass = groupOfURL;因此,"uniqueMember" 和 "memberURL" 属性都是有效的。组成员是其静态和动态成员的总和。
使用动态组对服务器的性能有所影响。如果您正在测试组成员,而该 DN 不是静态组的成员,则 Web Server 将检查数据库的基 DN 中的所有动态组。要完成此任务,Web Server 需要检查每个 memberURL 是否匹配,方法是对照用户 DN 检查其基 DN 和范围,然后使用用户 DN 作为基 DN 并使用 memberURL 的过滤器来执行基搜索。这一过程将产生大量的单个搜索操作。
使用 Administration Server 创建新动态组时,请考虑以下指导原则:
动态组不能包含其他组。
使用以下格式输入组的 LDAP URL(没有主机和端口信息,因为这些参数将被忽略):
ldap:///<basedn>?<attributes>?<scope>?<(filter)>
下表说明了必需的参数:
请注意,<attributes>、<scope> 和 <(filter)> 参数是根据它们在 URL 中的位置来标识的。因此,即使不想指定任何属性,也需要使用问号来表明不限制该字段。
可以选择为新组添加说明。
如果您的目录定义了任何组织单位,则可以使用“将新组添加到”列表指定要放置新组的位置。默认位置为目录的根节点(最顶端的条目)。