Sun Java System Web Proxy Server 4.0.8 管理指南

第 8 章 控制对服务器的访问

本章介绍如何控制对 Administration Server 以及 Proxy Server 所处理数据的访问。可以限制对服务器使用的所有数据或其使用的特定 URL 的访问。例如,可以指定只有特定用户可访问特定的 URL,或者指定除这些用户之外的任何用户均可查看文件。您可以允许所有客户机均可访问 HTTP 的 URL,但是只允许对 FTP 进行受限访问。您还可以基于主机名或域名来限制访问 URL,例如您有一个为许多内部 Web 服务器提供服务的 Proxy Server,但是仅希望特定的人员访问其中一台服务器中存储的保密性研究项目。

对 Administration Server 使用访问控制之前,必须启用分布式管理并在 LDAP 数据库中配置一个管理组。本章中的信息是在假设这些任务均已执行的情况下提供的。

本章包含以下各节:

什么是访问控制?

通过访问控制,可以确定何人可访问 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 连接使用客户机证书,则不会自动将证书映射到数据库中的用户。要设置此映射,必须指定访问指定资源时需要使用客户机证书。

访问控制的工作原理

当服务器收到页面请求时,它会使用 ACL 文件中的规则来确定是否应当授予访问权限。这些规则可以引用发送该请求的计算机的主机名或 IP 地址,还可以引用 LDAP 目录中存储的用户和组。

以下示例显示了 ACL 文件可能包含的内容,并提供了访问控制规则示例。


version 3.0;
# The following "es-internal" rules protect files such
# as icons and images related to Sun Java System Web Proxy Server.
# These "es-internal" rules should not be modified.
  acl "es-internal";
  allow (read, list, execute,info) user = "anyone";
  deny (write, delete) user = "anyone";

# The following rules deny access to the directory "web"
# to everyone not in the directory server and deny everyone
# in the directory server who is not in GroupB.
# Only the users in GroupB are allowed read, execute, list,
# and info permissions. GroupA cannot gain access to the
# directory "web" even though (in the ACL rule below) they
# can access the directory "my_stuff". Furthermore, members
# of GroupB cannot write or delete files.
  acl "path=/export/user/990628.1/docs/my_stuff/web/";
  authenticate (user,group) {
     database = "default";
     method = "basic";
  };
  deny (all)
  (user = "anyone");

  allow (read,execute,list,info)
  (group = "GroupB");

# The following rule denies everyone not in the directory
# server and denies everyone in the directory server except
# users with the ID of "SpecificMemberOfGroupB". The ACL rule
# in this setting also has a requirement that the user
# connect from a specific IP address. The IP address setting
# in the rule is optional, and has been added for extra
# security. Also, this ACL rule has a Customized prompt
# of "Presentation Owner". This Customized prompt appears
# in the username and password dialog box in the client’s
# browser.

  acl "path=/export/user/990628.1/docs/my_stuff/web/presentation.html";
  authenticate (user,group) {
     database = "default";
     method = "basic";
     prompt = "Presentation Owner";
  };
  deny (all)
  (user = "anyone" or group = "my_group");
  allow (all)
  (user = "SpecificMemberOfGroupB") and
  (ip = "208.12.54.76");

# The following ACL rule denies everyone not in the directory
# server and everyone in the directory server except for
# GroupA and GroupB access to the directory "my_stuff"
  acl "path=/export/user/990628.1/docs/my_stuff/";
  authenticate (user,group) {
     database = "default";
     method = "basic";
  };
  deny (all)
  (user = "anyone");
  allow (read,execute,list,info)
  (group = "GroupA,GroupB");


      

例如,如果用户请求 URL http://server_name/my_stuff/web/presentation.html,Proxy Server 首先将检查整个服务器的访问控制。如果整个服务器的 ACL 被设置为 "Continue",服务器将检查目录 my_stuff 的 ACL。如果存在某个 ACL,服务器将检查该 ACL 中的 ACE,然后移动到下一个目录。此过程将继续,直至找到的某个 ACL 拒绝了访问,或到达所请求的 URL(在本例中是文件 presentation.html)的最后的 ACL。

要使用 Server Manager 设置本例的访问控制,可以仅为此文件创建一个 ACL,也可以为此文件中引用的每个资源创建一个 ACL(即,一个用于整个服务器,一个用于 my_stuff 目录,一个用于 my_stuff/web 目录,一个用于此文件)。

如果有多个匹配的 ACL,服务器将使用最后一个匹配的 ACL 语句。

设置访问控制

本节介绍施加访问限制的过程。可以设置针对所有服务器的全局访问控制规则,也可以设置针对特定服务器的访问控制规则。例如,人力资源部门可以创建 ACL,允许所有通过验证的用户查看他们自己的工资单数据,但限制访问以只允许负责工资单的人员更新数据。

本节包含以下主题:


注 –

在设置全局访问控制之前,必须先配置并激活分布式管理。


设置全局访问控制

Procedure为所有服务器设置访问控制

  1. 访问 Administration Server 并单击 "Global Settings" 选项卡。

  2. 单 "Administer Access Control" 链接。

  3. 从下拉式列表中选择管理服务器 (proxy-admserv),单击 "Go" 以装入数据,然后单击 "New ACL"(或 "Edit ACL")。

  4. 如果系统提示,请进行验证。

    将显示 "Access Control Rules For" 页面。Administration Server 具有两行不能编辑的默认访问控制规则。

  5. 选择 "Access Control Is On"(如果尚未选中)。

  6. 要将一个默认 ACL 规则添加到该表的底部一行,请单击 "New Line" 按钮。

    要更改访问控制限制的位置,请单击向上或向下箭头。

  7. 单击 "Users/Groups" 列中的 "Anyone"。

    "User/Group" 页面将显示在下面的框架中。

  8. 选择您要允许其访问的用户和组,然后单击 "Update"。

    单击 "Group" 或 "User" 的 "List" 按钮,即可显示从中进行选择的列表。有关这些设置的更多信息,请参见联机帮助。另请参见指定用户和组

  9. 单击 "From Host " 列中的 "Anyplace"。

    "From Host" 页面将显示在下面的框架中。

  10. 指定允许其访问的主机名和 IP 地址,然后单击 "Update"。

    有关这些设置的更多信息,请参见联机帮助。另请参见指定 "From Host"

  11. 单击 "Programs" 列中的 "All"。

    "Programs" 页面将显示在下面的框架中。

  12. 选择 "Program Groups",或在 "Program Items" 字段中键入您要允许其访问的特定文件名,然后单击 "Update"。

    有关这些设置的更多信息,请参见联机帮助。另请参见限制对程序的访问

  13. (可选)单击 "Extra" 列中的 X 符号可以添加一个自定义的 ACL 表达式。

    "Customized Expressions" 页面将显示在下面的框架中。有关更多信息,请参见编写自定义表达式

  14. 选中 "Continue" 列中的复选框(如果尚未选中)。

    服务器将评估下一行限制,然后才确定是否允许该用户进行访问。创建多行限制时,请将限制按照由粗到细的顺序排列。

  15. (可选)单击垃圾箱图标可以从访问控制规则中删除相应的行。

  16. (可选)单击 "Response When Denied" 链接可以指定访问被拒绝时用户收到的响应。

    "Access Deny Response" 页面将显示在下面的框架中。

    1. 选择所需的响应。

    2. 指定其他信息(如果适用)。

    3. 单击 "Update"。

    有关这些设置的更多信息,请参见访问被拒绝时的响应

  17. 单击 "Submit" 可以将新访问控制规则存储在 ACL 文件中;单击 "Revert" 可以将页面中的元素重置为更改前它们所包含的值。

设置服务器实例的访问控制

使用 Server Manager,您可以创建、编辑或删除特定服务器实例的访问控制。如果要删除,请勿删除 ACL 文件中的所有 ACL 规则。至少要保留一个 ACL 文件,并且其中至少要包含一个 ACL 规则,以便启动服务器。删除所有 ACL 规则并重新启动服务器将导致语法错误。

Procedure设置服务器实例的访问控制

  1. 访问服务器实例的 Server Manager 并单击 "Preferences" 选项卡。

  2. 单 "Administer Access Control" 链接。

  3. 使用以下方法之一选择 ACL:

    • 从 "Select A Resource" 下拉式列表中选择一个使用 ACL 限制访问的资源,或单击 "Regular Expression" 指定一个正则表达式。有关更多信息,请参见 Proxy Server 管理指南中的第 16 章

    • 选择现有 ACL 将列出所有启用的 ACL。

      尚未启用的现有 ACL 不会显示在此列表中。从下拉式列表中选择 ACL。

    • 键入 ACL 名称。可以通过此选项创建命名 ACL。仅当您熟悉 ACL 文件时,才能使用此选项。如果要将命名 ACL 应用到资源,您必须手动编辑 obj.conf。有关更多信息,请参见第 18 章

  4. 单击相应的 "Edit" 按钮。

    将显示 "Access Control Rules For" 页面。

  5. 选择 "Access Control Is On"(如果尚未选中)。

  6. 要将一个默认 ACL 规则添加到该表的底部一行,请单击 "New Line" 按钮。

    要更改访问控制限制的位置,请单击向上或向下箭头。

  7. 要编辑此服务器实例的 ACL,请单击 "Action" 列中的操作。

    "Allow/Deny" 页面将显示在下面的框架中。

  8. 选择 "Allow"(如果默认情况下没有选中),然后单击 "Update"。

    有关 "Allow" 或 "Deny" 的更多信息,请参见设置操作

  9. 单击 "Users/Groups" 列中的 "Anyone"。"User/Group" 页面将显示在下面的框架中。

  10. 选择您要允许其访问的用户和组,指定验证信息,然后单击 "Update"。

    单击 "Group" 或 "User" 的 "List" 按钮,可以显示从中进行选择的列表。有关这些设置的更多信息,请参见联机帮助。另请参见指定用户和组

  11. 单击 "From Host " 列中的 "Anyplace"。

    "From Host" 页面将显示在下面的框架中。

  12. 指定允许其访问的主机名和 IP 地址,然后单击 "Update"。

    有关这些设置的更多信息,请参见联机帮助。另请参见指定 "From Host"

  13. 单击 "Rights" 列中的 "All"。

    "Access Rights" 页面将显示在下面的框架中。

  14. 指定此用户的访问权限,然后单击 "Update"。

    有关更多信息,请参见限制对程序的访问

  15. (可选)单击 "Extra" 列下的 X 符号可以添加一个自定义的 ACL 表达式。

    "Customized Expressions" 页面将显示在下面的框架中。有关更多信息,请参见编写自定义表达式

  16. 选中 "Continue" 列中的复选框(如果尚未选中)。

    服务器将评估下一行限制,然后才能确定是否允许该用户进行访问。创建多行限制时,请将限制按照由粗到细的顺序排列。

  17. (可选)单击垃圾箱图标可以从访问控制规则中删除相应的行。

    请勿删除 ACL 文件中的所有 ACL 规则。要启动服务器,至少需要一个 ACL 文件,该文件至少包含一条 ACL 规则。如果删除了 ACL 文件中的所有 ACL 规则,并尝试重新启动服务器,则会收到语法错误。

  18. (可选)单击 "Response When Denied" 链接可以指定访问被拒绝时用户收到的响应。

    "Access Deny Response" 页面将显示在下面的框架中。选择所需的响应,指定其他信息(如果适用),然后单击 "Update"。有关这些设置的更多信息,请参见访问被拒绝时的响应

  19. 单击 "Submit" 可以将新访问控制规则存储在 ACL 文件中;单击 "Revert" 可以将页面中的元素重置为更改前它们所包含的值。

选择访问控制选项

以下主题介绍了在设置访问控制时可以选择的各种选项。对于 Administration Server,头两行为默认设置,且不能编辑。

本节包含以下主题:

设置操作

您可以指定当请求符合访问控制规则时服务器要执行的操作。

服务器将检查整个控制访问条目 (Access Control Entries, ACE) 列表以确定访问权限。例如,第一个 ACE 通常为拒绝每个用户。如果将第一个 ACE 设置为 "Continue",服务器将检查列表中的第二个 ACE。如果该 ACE 匹配,将使用下一个 ACE。如果未选择 "Continue",将拒绝任何用户访问该资源。服务器将继续检查列表,直至找到某个不匹配的 ACE,或匹配但不会继续执行的 ACE。最后一个匹配的 ACE 将确定允许访问还是拒绝访问。

指定用户和组

使用用户和组验证时,将提示用户提供用户名和密码,然后才能访问在访问控制规则中指定的资源。

Proxy Server 将检查在 LDAP 服务器(例如 Sun Java System Directory Server)或基于内部文件的验证数据库中存储的用户和组的列表。

可以允许或拒绝数据库中每个用户的访问,也可以使用通配符模式允许或拒绝特定用户的访问,还可以从用户和组的列表中选择允许或拒绝其访问的用户。

在用户界面内 "Access Control Rules" 页面的 "Users/Groups" 中,将显示以下元素。

指定 "From Host"

您可以基于请求来自哪台计算机限制对 Administration Server 的访问。

在用户界面内 "Access Control Rules For" 页面的 "From Host" 中,将显示以下元素:

如果选择 "Only From" 选项,请在 "Host Names" 或 "IP Addresses" 字段中键入通配符模式或逗号分隔的列表。按主机名进行限制要比按 IP 地址进行限制更为灵活。如果用户的 IP 地址发生更改,您也不需要更新此列表。但是,按 IP 地址进行限制更可靠。如果某个连接的客户机的 DNS 查找失败,将无法使用主机名限制。

您只能使用通配符模式的 * 通配符表示法来匹配计算机的主机名或 IP 地址。例如,要允许或拒绝特定域中的所有计算机,您可以输入匹配该域中所有主机的通配符模式,例如 *.example.com。您可以为访问 Administration Server 的超级用户设置不同的主机名和 IP 地址。

对于主机名,* 必须替换名称完整的一部分,即,*.example.com 有效,但 *users.example.com 无效。当 * 出现在主机名中时,它必须是最左侧的字符。例如,*.example.com 有效,但 users.*.com 无效。

对于 IP 地址,* 必须替换地址中的整个字节,例如,198.95.251.* 有效,但 198.95.251.3* 无效。当 * 出现在 IP 地址中时,它必须是最右侧的字符。例如,198.* 有效,但 198.*.251.30 无效。

限制对程序的访问

对程序的访问只能由 Administration Server 来限制。通过限制对程序的访问,可以仅允许指定的用户查看 Server Manager 页面,并确定这些用户是否能够配置该服务器。例如,您可能允许某些管理员配置 Administration Server 的 "Users and Groups" 部分,但是拒绝他们访问 "Global Settings" 部分。

您可以配置不同的用户访问不同的功能域。为某个用户授予了对若干选定功能域的访问权限后,该用户登录后只能访问这些功能域的 Administration Server 页面。

在用户界面内 "Access Control Rules For" 页面的 "Programs" 中,将显示以下元素:

设置访问权限

服务器实例的访问权限只能由 Server Manager 设置。访问权限限制了对您服务器上的文件和目录的访问。除了允许或拒绝所有访问权限外,您还可以指定一个规则以允许或拒绝部分访问权限。例如,您可以授予用户对您文件的只读访问权限,这样他们可以查看信息,但不能更改文件。

在用户界面内 "Access Control Rules For" 页面的 "Rights" 中,将显示以下元素。

编写自定义表达式

您可以为 ACL 输入自定义表达式。仅当您熟悉 ACL 文件的语法和结构时,才能选择此选项。有若干功能只有通过编辑 ACL 文件或创建自定义表达式才能实现。例如,您可以基于一天中的某个时间和/或一周中的某一天来限制对服务器的访问。

以下自定义表达式显示了如何基于一天中的某个时间和一周中的某一天来限制访问。本例假设您的 LDAP 目录中有两个组。"Regular" 组可以在星期一到星期五的 8:00 am 到 5:00 pm 进行访问。"Critical" 组在任何时间均可进行访问。

allow (read){(group=regular and dayofweek=”mon,tue,wed,thu,fri”);
(group=regular and (timeofday>=0800 and timeofday<=1700));(group=critical)}

有关有效语法和 ACL 文件的更多信息,请参见第 18 章

禁用访问控制

如果在 "Access Control Rules For" 页面中取消选中标记为 "Access Control Is On" 的选项,将会收到提示,询问您是否要删除 ACL 中的记录。单击 "OK" 后,便会从 ACL 文件中删除该资源的 ACL 条目。

如果要取消激活 ACL,请在文件 generated-proxy- serverid.acl 中每个 ACL 行的开头添加 # 符号,使 ACL 行变为注释。

在 Administration Server 中,您可以为特定服务器实例创建并启用访问控制,而为其他服务器禁用访问控制(默认设置为禁用)。例如,您可以通过 Administration Server 页面拒绝对 Server Manager 的任何访问。对于默认情况下启用了分布式管理且禁用了访问控制的任何其他服务器,管理员仍可以访问和配置这些服务器,但不能配置 Administration Server。

访问被拒绝时的响应

Proxy Server 提供了访问被拒绝时显示的默认消息,您可以根据需要自定义响应。也可以为每个访问控制对象创建不同的消息。

默认情况下,对于 Administration Server,用户会收到 server-root/httpacl/admin-denymsg.html 中的 "Permission Denied" 消息。

Procedure更改访问被拒绝消息

  1. 单击 "Access Control Rules For" 页面上的 "Response When Denied" 链接。

  2. 选择所需的响应,提供其他信息(如果适用),然后单击 "Update"。确保用户可以访问将他们重定向到的响应。

  3. 单击 "Submit" 保存更改,或者单击 "Revert" 将页面中的元素重置为更改前它们所包含的值。

限制对服务器中的区域的访问

本节介绍一些常用的对服务器及其内容的限制。每个过程中包含的步骤详细介绍了您必须执行的特定操作。但是,您仍必须完成设置服务器实例的访问控制中所述的步骤。

本节包含以下主题:

限制对整个服务器的访问

您可能希望为某个组中的用户授予访问权限,以便允许他们从某个子域中的计算机访问服务器。例如,公司某部门可能有一个服务器,您只希望来自网络特定子域中的计算机的用户能够对其进行访问。

Procedure限制对整个服务器的访问

  1. 访问服务器实例的 Server Manager。

  2. 在 "Preferences" 选项卡上,单击 "Administer Access Control" 链接。

  3. 从下拉式列表中选择整个服务器,单击 "Select",然后单击相应的 "Edit" 按钮。

    将显示 "Access Control Rules For" 页面。

  4. 添加一个规则以拒绝所有用户的访问。

  5. 添加另一个规则以允许特定组的访问。

  6. 使用 "From Host" 指定要限制的主机名和 IP 地址。

  7. 单击 "Submit" 保存更改。

限制对目录的访问

您可以允许某个组中的用户读取或运行目录及其子目录中的应用程序和文件(这些内容由该组的所有者控制)。例如,项目经理可以更新状态信息,供项目组查看。

Procedure限制对目录的访问

使用设置对服务器实例的访问控制时介绍的步骤(请参见设置服务器实例的访问控制),执行以下操作:

  1. 访问服务器实例的 Server Manager。

  2. 在 "Preferences" 选项卡上,单击 "Administer Access Control" 链接。

  3. 从下拉式列表中选择所需的资源,然后单击 "Edit"。

  4. 创建一个规则,其默认值为拒绝任何用户从任何位置进行访问。

  5. 创建另一个规则,允许某个特定组中的用户仅具有读取权限和执行权限。

  6. 创建第三个规则,允许某个特定用户具有所有权限。

  7. 对于最后两个规则,取消选中 "Continue"。

  8. 单击 "Submit" 保存更改。

限制对文件类型的访问

您可以限制对文件类型的访问。例如,您可能希望仅允许特定用户创建在您的服务器上运行的程序。任何用户都可以运行程序,但只有组中的特定用户可以创建或删除程序。

Procedure限制对文件类型的访问

  1. 访问服务器实例的 Server Manager。

  2. 在 "Preferences" 选项卡上,单击 "Administer Access Control" 链接。

  3. 单击 "Select A Resource" 部分中的 "Regular Expression",然后指定正则表达式,例如 *.cgi

  4. 单击 "Edit"。

  5. 创建一个规则,为所有用户授予读取权限。

  6. 创建另一个规则,仅为某个特定组授予写入权限和删除权限。

  7. 单击 "Submit" 保存更改。

    对于文件类型限制,您应当保留选中两个 "Continue" 复选框。当传入某个文件的请求时,服务器将首先检查该文件类型的 ACL。

    obj.conf 文件中将创建一个 Pathcheck 函数,它可能包含了文件或目录的通配符模式。ACL 文件中的条目将如下所示:acl"*.cgi";

基于一天中的某个时间限制访问

您可以将对服务器的写入访问和删除访问限制为仅允许在指定的时间或指定的日期进行。

Procedure基于一天中的某个时间限制访问

  1. 访问服务器实例的 Server Manager。

  2. 在 "Preferences" 选项卡上,单击 "Administer Access Control" 链接。

  3. 从 "Select A Resource" 部分的下拉式列表中选择整个服务器,然后单击 "Edit"。

  4. 创建一个规则,为所有用户授予读取权限和执行权限。

    如果某个用户要添加、更新或删除文件或目录,将不会应用此规则,服务器将搜索另一个匹配的规则。

  5. 创建另一个规则,拒绝所有用户的写入权限和删除权限。

  6. 单击 X 链接,创建一个自定义表达式。

  7. 键入允许的一周中的某些天和一天中的某些时间,例如:


    user = "anyone" anddayofweek = "sat,sun" or(timeofday >= 1800 
    andtimeofday <= 600)
  8. 单击 "Submit" 保存更改。

    自定义表达式中的任何错误都将生成一条错误消息。请进行更正并再次提交。

基于安全性限制访问

您可以为同一服务器实例同时配置 SSL 和非 SSL 侦听套接字。基于安全性限制访问使您可以为只应通过安全通道传输的资源创建保护。

Procedure基于安全性限制访问

  1. 访问服务器实例的 Server Manager。

  2. 在 "Preferences" 选项卡上,单击 "Administer Access Control" 链接。

  3. 从 "Select A Resource" 部分的下拉式列表中选择整个服务器,然后单击 "Edit"。

  4. 创建一个规则,为所有用户授予读取权限和执行权限。

    如果某个用户要添加、更新或删除文件或目录,将不会应用此规则,服务器将搜索另一个匹配的规则。

  5. 创建另一个规则,拒绝所有用户的写入权限和删除权限。

  6. 单击 X 链接,创建一个自定义表达式。

  7. 键入 ssl="on"。例如:


    user = "anyone" and ssl="on"
  8. 单击 "Submit" 保存更改。

    自定义表达式中的任何错误都将生成一条错误消息。请进行更正并再次提交。

保护对资源的访问

本节介绍了在启用分布式管理后,为在 Proxy Server 中保证访问控制的安全性而必须执行的其他任务。

保护对服务器实例的访问

要配置 Proxy Server 以控制对服务器实例的访问,请编辑 server-root/httpacl/*.proxy-admserv.acl 文件并指定要授予其访问控制权限的用户。例如:

acl "proxy-server_instance "; authenticate (user,group) { database = "default"; method = "basic"; }; deny absolute (all) user != "UserA";

启用基于 IP 的访问控制

如果引用 ip 属性的访问控制条目位于与 Administration Server 相关的 ACL 文件 (gen*.proxy-admserv.acl) 中,请完成下面的步骤 1 和 2。

如果引用 ip 属性的访问控制条目位于与某个服务器实例相关的 ACL 文件中,请仅为该特定 ACL 完成下面的步骤 1。

Procedure启用基于 IP 的访问控制

  1. 编辑 server-root/httpacl/gen*.proxy-admserv.acl 文件,除了 usergroup 之外,再将 ip 添加到验证列表中,如下所示:

    acl "proxy-admserv"; authenticate (user,group,ip) { database = "default"; method = "basic"; };

  2. 添加以下访问控制条目:

    deny absolute (all) ip !="ip_for_which_access_is_allowed ";

    例如:

    acl "proxy-admserv"; authenticate (user,group,ip) { database = "default"; method = "basic"; }; deny absolute (all) ip !="205.217.243.119";

为基于文件的验证创建 ACL

Proxy Server 支持使用基于文件的验证数据库,这些数据库在平面文件中以文本形式存储了用户和组信息。ACL 框架被设计为可以使用文件验证数据库。


注 –

Proxy Server 不支持动态平面文件。平面文件数据库将在服务器启动时装入。对这些文件所做的任何更改仅在重新启动服务器时才能生效。


本节介绍如何基于文件验证和摘要验证来为目录服务创建 ACL。

ACL 条目可以使用 database 关键字来引用用户数据库。例如:

acl "default";    authenticate (user) {...    database="myfile";...};

server-root/userdb/dbswitch.conf 文件包含一个用于定义文件验证数据库及其配置的条目。例如:

directory myfiledb filemyfiledb:syntax keyfilemyfiledb:keyfile 
/path/to/config/keyfile

下表列出了文件验证数据库支持的参数。

表 8–2 文件验证数据库支持的参数

参数 

描述 

syntax

(可选)值为 keyfiledigest。如果未指定,则默认为 keyfile

keyfile

syntax=keyfile 时需要)包含用户数据的文件的路径。

digestfile

syntax=digest 时需要)包含摘要验证用户数据的文件的路径。


注意 – 注意 –

文件验证数据库文件中每行的最大长度为 255。如果任一行超出了此限制,服务器将无法启动,并在日志文件中记录错误。


请确保在尝试使用基于文件的验证数据库设置 ACL 之前,已经配置了基于文件的验证目录服务。有关更多信息,请参见配置目录服务

为基于文件验证的目录服务创建 ACL

Procedure为基于文件验证的目录服务创建 ACL

  1. 访问服务器实例的 Server Manager。

  2. 在 "Preferences" 选项卡上,单击 "Administer Access Control" 链接。

  3. 从下拉式列表中选择 ACL 文件,然后单击 "Edit"。

  4. 在 "Access Control Rules For" 页面中,单击要编辑的 ACL 条目的 "Users/Groups" 链接。

    "User/Group" 页面将显示在下面的框架中。

  5. 从 "Authentication Database" 下的下拉式列表中,指定密钥文件数据库。

  6. 单击 "Update",然后单击 "Submit" 保存更改。

    当您按照基于密钥文件的文件验证数据库设置 ACL 时,dbswitch.conf 文件使用相应的 ACL 条目进行更新,如下面给出的样例条目所示:


    version 3.0;acl "default";authenticate (user) {prompt = 
    "Sun Java System Proxy Server 4.0";database = "mykeyfile";
    method = "basic";};deny (all) user = "anyone";
    allow (all) user = "all";

为基于摘要验证的目录服务创建 ACL

文件验证数据库还支持适用于摘要验证且符合 RFC 2617 的文件格式。将存储基于密码和领域的散列,不会保留明文密码。

Procedure为基于摘要验证的目录创建 ACL

  1. 访问服务器实例的 Server Manager。

  2. 在 "Preferences" 选项卡上,单击 "Administer Access Control" 链接。

  3. 从下拉式列表中选择 ACL 文件,然后单击 "Edit"。

  4. 在 "Access Control Rules For" 页面中,单击要编辑的 ACL 的 "Users/Groups" 链接。

    "User/Group" 页面将显示在下面的框架中。

  5. 从 "Authentication Database" 下的下拉式列表中,指定摘要数据库。

  6. 单击 "Update",然后单击 "Submit" 保存更改。

    当您按照基于摘要验证的文件验证数据库设置 ACL 时,dbswitch.conf 文件使用相应的 ACL 条目进行更新,如下面给出的样例条目所示。


    version 3.0;acl "default";authenticate (user) {prompt = "filerealm";
    database = "mydigestfile";method = "digest";}; deny (all) user = "anyone";
    allow (all) user = "all";