Sun Java System Web Server 7.0 管理员指南

第 8 章 管理用户和组

本章介绍如何添加、删除和编辑可以访问 Sun Java System Web Server 的用户和组。

访问用户和组的信息

使用 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 的目录服务。


了解标识名 (Distinguished Name, DN)

用户是 LDAP 数据库中的个人,如公司的员工。组是共享某个通用属性的两个或多个用户。组织单位是公司内部的一个分支。

企业中的每个用户和组都通过标识名 (Distinguished Name, DN) 属性来表示。DN 属性是一个文本字符串,其中包含关联的用户、组或对象的标识信息。每当您更改用户或组目录条目时,就需要使用 DN。例如,每次为应用程序(如邮件或发布)创建或修改目录条目、设置访问控制以及设置用户帐户时,均需要指定 DN 信息。

Sun Java System Web Server 7.0

上图显示了一个 DN 表示样例。以下示例显示了 Sun Microsystems 公司某个员工的典型 DN:

uid=doe,e=doe@sun.com,cn=John Doe,o=Sun Microsystems Inc.,c=US

该示例中每个等号前面的缩写的含义如下:

DN 可能包括多种名称/值对。它们用于在支持 LDAP 的目录中标识证书主题和条目。

使用 LDIF

如果您当前没有目录,或者要在现有目录中添加一个新的子树,则可以使用 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 处理模块使用。

服务器支持以下验证数据库:

  1. LDAP-用户数据存储在 LDAP 目录服务器(如 Sun Java System Directory Server)中。

  2. 文件-用户数据存储在磁盘文件中。对于不提供(或不需要)集中用户管理的开发或小型部署,此 auth-db 尤其方便。文件 auth-db 支持若干不同的文件格式:

    1. keyfile-keyfile 格式用于存储用户(以及每个用户的可选组成员)列表。密码存储为单向(不可恢复)散列。这是默认格式。

    2. digestfile-digestfile 与 keyfile 非常类似,也支持 HTTP 摘要验证方法。

    3. htaccess-这是一种传统格式,不应将其用于新的安装或添加新用户。

  3. PAM-PAM 是受 Sun Java System Web Server 7.0 支持的新 auth-db。PAM auth-db 将验证委派给 Solaris PAM 堆栈,从而使 Web 服务器系统上的现有 Solaris 用户也可对 Web 服务器进行验证。


    注 –

    仅在 Solaris 9 和 10(或更高版本)中支持 PAM auth-db,并且必须以超级用户身份运行 Web 服务器实例。


创建验证数据库

要通过管理控制台创建验证数据库,请单击配置 > 配置名称 > 访问控制 > 验证数据库 > 新建按钮。检查管理控制台内联帮助,了解有关字段说明。根据选定的验证数据库,这些字段将有所变化。例如,对于基于 PAM 的验证数据库,仅需要提供验证数据库的名称。

创建验证数据库必需的选项枚举如下:

LDAP 

  • 验证数据库的名称

  • 主机名

  • 端口

  • 基 DN

密钥文件 

  • 验证数据库的名称

  • 文件路径

摘要文件 

  • 验证数据库的名称

  • 文件路径

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 类型的用户帐户、组列表、访问权限、组织单位以及用户和组的其他特定信息。

Procedure添加用户

  1. 选择配置。

    从配置列表中选择相应的配置。单击“配置”选项卡以获取列表。

  2. 单击“访问控制”>“用户”选项卡。

  3. 单击“新建”按钮。

  4. 添加用户信息。

    输入用户 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)


Procedure添加组

  1. 选择配置。

    从配置列表中选择相应的配置。单击“配置”选项卡以获取列表。

  2. 单击“访问控制”>“组”选项卡。

  3. 单击“新建”按钮。

  4. 输入组名。

  5. 从“将用户添加到组”部分中搜索现有用户并将其添加到组中。


    注 –

    在验证数据库(如 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)


Procedure删除用户

  1. 选择配置。

    从配置列表中选择相应的配置。单击“配置”选项卡以获取列表。

  2. 单击“访问控制”>“用户”选项卡。

  3. 选择您需要从中删除用户的验证数据库。

  4. 在“搜索用户”文本框中输入用户 ID,然后单击“搜索”按钮。

  5. 从“用户 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)


Procedure删除组

  1. 选择配置。

    从配置列表中选择相应的配置。单击“配置”选项卡以获取列表。

  2. 单击“访问控制”>“组”选项卡。

  3. 选择您需要从中删除组的验证数据库。

  4. 在“搜索用户”文本框中输入用户 ID,然后单击“搜索”按钮。

  5. 从“用户 ID”列中选择相应的用户,然后单击“删除”按钮。


    注 –

    删除组并不会删除该组中包含的用户。您必须手动删除用户或重新指定组。



    注 –

    使用 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=sun??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 如何实现动态组

Web Server 在 LDAP 服务器模式中以 objectclass = groupOfURLs 的方式实现动态组。groupOfURLS 类可以有多个 memberURL 属性,每个属性都包含一个 LDAP URL,用于枚举目录中的一组对象。组的成员是这些对象集的总和。例如,下面的组只包含一个成员 URL:

ldap:///o=mcom.com??sub?(department=marketing)

该实例描述了一个由 "o=mcom.com" 下属于 "marketing" 部门的所有对象组成的集合。LDAP URL 可以包含搜索基 DN、范围和过滤器;但是,不包含主机名和端口。这意味着您只能引用同一个 LDAP 服务器上的对象。LDAP URL 支持所有范围。

DN 会自动包含在内,因而不需要您向组中添加每个 DN。组是动态变化的,因为每次 ACL 验证需要查找组时,Sun ONE 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 = groupOfUniqueMembersobjectclass = groupOfURL;因此,"uniqueMember" 和 "memberURL" 属性都是有效的。组成员是其静态和动态成员的总和。

动态组对服务器性能的影响

使用动态组对服务器的性能有所影响。如果您正在测试组成员,而该 DN 不是静态组的成员,则 Web Server 将检查数据库的基 DN 中的所有动态组。要完成此任务,Web Server 需要检查每个 memberURL 是否匹配,方法是对照用户 DN 检查其基 DN 和范围,然后使用用户 DN 作为基 DN 并使用 memberURL 的过滤器来执行基搜索。这一过程将产生大量的单个搜索操作。

创建动态组的指导原则

使用 Administration Server 创建新动态组时,请考虑以下指导原则:

表 8–1 动态组:必需的参数

参数名 

描述 

<base_dn>

搜索基的标识名 (Distinguished Name, DN),或 LDAP 目录中开始执行搜索的起点。此参数通常被设置为目录的后缀或根,例如 "o=mcom.com"。

<attributes>

搜索将返回的属性列表。要指定多个属性,请使用逗号来分隔属性(例如,"cn,mail,telephoneNumber");如果不指定属性,将返回所有属性。请注意,检查动态组成员资格时将忽略此参数。

<scope>

搜索范围,其值可以是: 

  • base 仅检索 URL 中所指定标识名 (<base_dn>) 的相关信息。

  • one 检索 URL 中所指定标识名 (<base_dn>) 的下一级条目的相关信息。此范围不包括基条目。

  • sub 检索 URL 中所指定标识名 (<base_dn>) 下面所有级别的条目的相关信息。此范围包括基条目。

    此参数是必需的。

<(filter)>

应用于指定搜索范围内的条目的搜索过滤器。如果您使用的是 Administration Server 表单,则必须指定此属性。请注意,必须带有括号。 

此参数是必需的。 

请注意,<attributes><scope><(filter)> 参数是根据它们在 URL 中的位置来标识的。因此,即使不想指定任何属性,也需要使用问号来表明不限制该字段。