Sun Java System Web Proxy Server 4.0.8 管理指南

什么是访问控制?

通过访问控制,可以确定何人可访问 Proxy Server 以及他们可访问服务器的哪些部分。您可以控制对整个服务器或仅对服务器各部分(例如目录、文件、文件类型等)的访问。对收到的请求进行评估时,将根据有层次结构的一系列规则(称为访问控制条目 (Access Control Entries, ACE))来确定访问权限。Proxy Server 将查找匹配的条目以确定应当授予还是拒绝访问权限。每个 ACE 都指定了服务器是否应当继续检查分层结构中的下一个条目。该 ACE 集合称为访问控制列表 (Access Control List, ACL)。收到请求时,将检查 obj.conf 文件以查看是否引用了随后用于确定访问权限的 ACL。默认情况下,服务器具有一个 ACL 文件,其中包含多个 ACL。

根据以下各项来允许或拒绝访问:

本节包含以下主题:

用户/组的访问控制

您可以仅允许特定的用户或组访问您的服务器。用户/组访问控制要求用户提供用户名和密码,然后才能访问服务器。服务器会将客户机证书中的信息或客户机证书本身与一个目录服务器条目进行比较。

Administration Server 只使用基本验证。如果要求在 Administration Server 上进行客户机验证,必须手动编辑 obj.conf 中的 ACL 文件,将方法更改为 SSL。

用户-组验证由为服务器配置的目录服务执行。有关更多信息,请参见配置目录服务

目录服务用来实现访问控制的信息可能来自以下来源之一:

当服务器使用基于 LDAP 的外部目录服务时,对于服务器实例而言将支持以下类型的用户/组验证方法:

当服务器使用基于文件的内部目录服务时,服务器实例支持以下用户/组验证方法:

用户/组验证要求用户进行自我验证,然后才能获取访问权限。进行验证时,用户通过以下方法验证其身份:提供用户名和密码、使用客户机证书或使用摘要验证插件。使用客户机证书时需要进行加密。

默认验证

默认验证是首选方法。默认设置使用 obj.conf 文件中的默认方法;如果 obj.conf 中没有设置,则使用基本验证。如果选择 "Default",则 ACL 规则不会在 ACL 文件中指定方法。如果选择 "Default",您只需编辑 obj.conf 文件中的一行文本即可方便地更改所有 ACL 的方法。

基本验证

基本验证要求用户提供用户名和密码,才能访问服务器。基本验证是默认设置。您必须在 LDAP 数据库(例如 Sun Java System Directory Server)或某个文件中创建并存储一个用户和组的列表。您使用的目录服务器不能与您的 Proxy Server 安装在相同的服务器根目录下;您也可以使用安装在远程计算机上的目录服务器。

当用户尝试访问具有用户/组验证的资源时,系统会提示用户提供用户名和密码。根据您的服务器是否启用了加密(是否启用 SSL),服务器将收到加密或未加密的信息。


注 –

如果使用无 SSL 加密的基本验证,将以不加密的文本形式在网络中发送用户名和密码。网络包可能会被截取,并且用户名和密码可能会被盗用。基本验证与 SSL 加密和/或主机/IP 验证结合使用时效果最佳。使用摘要验证可以消除此问题。


如果验证成功,用户便可查看请求的资源。如果用户名或密码无效,系统会发出拒绝访问的消息。

您可以自定义未经授权的用户所接收的消息。有关更多信息,请参见访问被拒绝时的响应

SSL 验证

使用安全性证书,服务器可以用两种方式确认用户的身份:

如果将服务器配置为使用证书信息进行客户机验证,服务器会执行以下操作:

为控制对特定资源的访问而要求进行客户机验证和要求对与服务器的所有连接进行客户机验证是不同的。如果将服务器配置为要求对所有连接进行客户机验证,则客户机只需要提供由信任的 CA 颁发的有效证书。如果将服务器配置为使用 SSL 方法进行用户和组验证,则必须执行以下操作:

如果需要对访问控制进行客户机验证,必须针对 Proxy Server 启用 SSL 加密。有关启用 SSL 的更多信息,请参见第 5 章

要成功访问要求进行 SSL 验证的资源,客户机证书必须来自 Proxy Server 信任的 CA。如果 Proxy Server 的 certmap.conf 文件被配置为将浏览器中的客户机证书与目录服务器中的客户机证书相比较,则必须在该目录服务器中发布客户机证书。不过,certmap.conf 文件也可以配置为仅将证书中的选定信息与目录服务器条目进行比较。例如,您可以将 certmap.conf 配置为仅将浏览器证书中的用户 ID 和电子邮件地址与目录服务器条目进行比较。有关 certmap.conf 和证书映射的更多信息,请参见第 5 章。另请参见《Sun Java System Web Proxy Server 4.0.8 Configuration File Reference》

摘要验证

可以将 Proxy Server 配置为使用基于 LDAP 或文件的目录服务执行摘要验证。

摘要验证使用户能够基于用户名和密码进行验证,但不必以明文形式发送用户名和密码。浏览器使用用户密码和 Proxy Server 提供的某些信息,通过 MD5 算法创建摘要值。

当服务器使用基于 LDAP 的目录服务来执行摘要验证时,服务器端也将使用摘要验证插件来计算该摘要值,并且将该值与客户机提供的摘要值进行比较。如果这些摘要值相匹配,用户将通过验证。要进行这种验证,您的目录服务器必须有权访问明文形式的用户密码。Sun Java System Directory Server 具有一个可逆的密码插件,它使用对称的加密算法以加密形式存储数据,这些数据可在稍后被解密成原来的形式。只有目录服务器保存了数据的密钥。

对于基于 LDAP 的摘要验证,您必须启用 Proxy Server 附带的可逆密码插件和特定的摘要验证插件。要将 Proxy Server 配置为可以处理摘要验证,请在 dbswitch.conf 文件(位于 server-root/userdb/ 中)中设置数据库定义的 digestauth 属性。

以下为 dbswitch.conf 文件样例。


directory default ldap://<host_name>:<port>
default:binddn cn=Directory Manager
default:encoded bindpw ***********
default:digestauth on

或者


directory default ldap://<host_name>:<port>/
default:binddn cn=Directory Manager
default:encoded bindpw ***********
default:digestauthstate on

服务器将尝试基于指定的 ACL 方法验证 LDAP 数据库,如摘要验证所示。如果未指定 ACL 方法,当要求进行验证时,服务器将使用摘要验证或基本验证;当不要求进行验证时,服务器将使用基本验证。

下表列出了验证数据库支持以及不支持的摘要验证。

表 8–1 摘要验证的不同情况

ACL 方法 

验证数据库支持 

验证数据库不支持 

Default 

未指定 

Digest 和 Basic 

Basic 

Basic 

Basic 

Basic 

Digest 

Digest 

ERROR 

method=digest 的情况下处理 ACL 时,服务器将尝试通过执行以下操作进行验证:

安装摘要验证插件

对于使用基于 LDAP 的目录服务的摘要验证,必须安装摘要验证插件。此插件会计算服务器端的摘要值,并将该值与客户机提供的摘要值进行比较。如果这些摘要值相匹配,用户将通过验证。

如果您使用的是基于文件的验证数据库,则不需要安装摘要验证插件。

在 UNIX 上安装摘要验证插件

摘要验证插件包含一个共享库和一个 ldif 文件:

Procedure在 UNIX 上安装摘要验证插件

开始之前
  1. 要安装插件,请键入以下命令:

    % ldapmodify -D "cn=Directory Manager" -w password -a < libdigest-plugin.ldif

在 Windows 上安装摘要验证插件

为了使具有摘要验证插件的 Directory Server 能够正常启动,必须将 Proxy Server 安装中的多个 .dll 文件复制到 Sun Java System Directory Server 服务器计算机中。

Procedure在 Windows 上安装摘要验证插件

  1. 访问位于 Proxy Server 内 server-root\bin\proxy\bin 中的共享库。

  2. 将文件 nsldap32v50.dlllibspnr4.dlllibplds4.dll 复制到相应的目录中:

  3. 将这些文件粘贴到以下任一位置:

    • \Winnt\system32

      • Sun Java System Directory Server 安装目录:server-root\bin\sldap\server

将 Sun Java System Directory Server 设置为使用 DES 算法

对存储摘要密码的属性进行加密需要使用 DES 算法。

Procedure将 Directory Server 设置为使用 DES 算法

  1. 启动 Sun Java System Directory Server 控制台。

  2. 打开 Sun ONE Directory Server 5.1 SP1(或更高版本)的实例。

  3. 选择 "Configuration" 选项卡。

  4. 单击插件旁边的 + 号。

  5. 选择 DES 插件。

  6. 选择 "Add" 添加一个新属性。

  7. 键入 iplanetReversiblePassword

  8. 单击 "Save"。

  9. 设置摘要验证密码。


    注 –

    服务器使用位于对象类 iplanetReversiblePassword 中的 iplanetReversiblePassword 属性。要在 iplanetReversiblePassword 属性中为用户设置摘要验证密码,您的输入内容中必须包括 iplanetReversiblePasswordobject 对象。

    可以使用 ldapmodify 或 Directory Server 管理界面实现此操作。


    使用 ldapmodify

    创建文件 digest.ldif 以存储 LDAP 命令。添加密码通过两个步骤完成。

    1. 将对象类添加到 digest.ldif

      此文件包含以下内容(可以根据 Directory Server 用户和 ACL 创建多个 ldif 文件):


      dn:uid=user1,dc=india,dc=sun,dc=com
      changetype:modify
      add:objectclass
      objectclass:iplanetReversiblePasswordobject
      
      dn:uid=user1,dc=india,dc=india,dc=sun,dc=com
      changetype:modify
      add:iplanetReversiblePassword
      iplanetReversiblePassword:user1
    2. # ldapmodify -D "cn={CN_Value}" -w <password> -a <ldif_file_name>

  10. 重新启动 Sun Java System Directory Server 实例,并检验是否已将用户属性添加到 Directory Server 数据库中。

其他验证

可以使用访问控制 API 创建自定义验证方法。

主机/IP 的访问控制

您可以通过将 Administration Server 及其文件和目录仅限于使用特定计算机的客户机使用来限制对它们的访问。您可以指定要允许或拒绝其访问的计算机的主机名或 IP 地址。使用主机/IP 验证来访问文件或目录对用户来说是一个无缝的过程。用户可以立即访问文件和目录,而无需输入用户名或密码。

由于某台特定的计算机可能由多个用户使用,因此,主机/IP 验证与用户-组验证结合使用时会更加有效。如果同时使用这两种验证方法,访问时将要求提供用户名和密码。

主机/IP 验证不要求在服务器上配置 DNS(Domain Name Service,域名服务)。如果选择使用主机/IP 验证,您必须在网络中运行 DNS 并将您的服务器配置为使用该 DNS。要启用 DNS,请访问服务器的 Server Manager,单击 "Preferences" 选项卡,然后单击 "Configure System Preferences"。您将看到 DNS 设置。

启用 DNS 会降低 Proxy Server 的性能,因为服务器将不得不执行 DNS 查找。为减小 DNS 查找对服务器性能的影响,请仅针对访问控制和 CGI 解析 IP 地址,而不是针对每个请求解析 IP 地址。要设置此限制,请在 obj.conf 中指定以下内容:

AddLog fn="flex-log" name="access" iponly=1

使用访问控制文件

对 Administration Server 或服务器上的文件或目录使用访问控制时,这些设置将存储在一个扩展名为 .acl 的文件中。访问控制文件存储在目录 server-root/httpacl 中,其中 server-root 是安装服务器的位置。例如,如果将服务器安装在 /usr/Sun/Servers 中,则 Administration Server 和您服务器上配置的每个服务器实例的 ACL 文件将位于 /usr/Sun/Servers/httpacl/ 中。

主 ACL 文件为 generated-proxyserverid.acl。临时工作文件为 genwork-proxy-serverid.acl。如果使用 Administration Server 来配置访问,您将拥有这两个文件。不过,如果需要更为复杂的限制,可以创建多个文件并在 server.xml 文件中加以引用。还有几个功能只能通过编辑这些文件才能获得,例如,基于一天中的某个时间或一周中的某一天来限制对服务器的访问。

有关访问控制文件及其语法的更多信息,请参见第 18 章有关 server.xml 的更多信息,参见《Sun Java System Web Proxy Server 4.0.8 Configuration File Reference》

配置 ACL 用户高速缓存

默认情况下,Proxy Server 将用户和组验证结果缓存在 ACL 用户高速缓存中。通过使用 magnus.conf 文件中的 ACLCacheLifetime 指令,可以控制 ACL 用户高速缓存保持有效的时间。每次引用高速缓存中的某个条目时,都将计算其寿命并检查 ACLCacheLifetime。如果该条目的寿命大于或等于 ACLCacheLifetime,则不再使用它。默认值为 120 秒。将该值设置为 0(零)将关闭高速缓存。如果将其设置为一个较大的值,则每次更改 LDAP 条目时,可能都需要重新启动 Proxy Server。例如,如果将该值设置为 120 秒,则在长达两分钟的时间内,Proxy Server 可能会与 LDAP 目录不同步。仅当 LDAP 目录不经常更改时才设置一个较大的值。

使用 magnus.conf 的参数 ACLUserCacheSize,可以配置高速缓存中最多可以保留的条目 数。此参数的默认值为 200。新条目将添加到列表的开头,当高速缓存达到其最大大小时,列表末尾的条目将被删除以便容纳新条目。

还可以使用 magnus.conf 的参数 ACLGroupCacheSize 来设置每个用户条目最多可以缓存的组成员资格数。此参数的默认值为 4。组中非成员关系的用户不会被高速缓存,这将导致每个请求都要进行多个 LDAP 目录访问。

使用客户机证书控制访问

如果在服务器上启用了 SSL,则可以将客户机证书与访问控制结合使用。您必须指定访问特定资源时需要使用客户机证书。如果在服务器上启用了此功能,则拥有证书的用户只需在首次尝试访问受限资源时输入其名称和密码。建立用户的身份之后,服务器便会将其登录名和密码映射到此特定的证书。此后,当用户访问要求进行客户机验证的资源时,不再需要输入其登录名或密码。

当用户尝试访问受限资源时,其客户机会向服务器发送客户机证书,然后服务器将检查此证书是否位于其映射列表中。如果此证书属于已被授予访问权限的用户,则此用户便可使用资源。

要求对特定资源的访问控制进行客户机验证与要求对服务器的所有连接进行客户机验证不同。另请注意,如果要求对所有 SSL 连接使用客户机证书,则不会自动将证书映射到数据库中的用户。要设置此映射,必须指定访问指定资源时需要使用客户机证书。