Sun ONE logo      上一个      目录      索引      下一个     

Sun ONE Web Server 6.1 管理员指南

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

本章讨论用于控制对 Administration Server 以及您 Web 站点上的文件或目录的访问的各种方法。例如,对于 Administration Server,您可以指定谁对安装在某台计算机上的所有服务器具有完全控制权限,以及谁具有控制其中一个或多个服务器的部分控制权限。在对 Administration Server 使用访问控制之前,您必须先启用由 LDAP 数据库进行分布式管理并在 LDAP 数据库中设置一个管理组。本章假定您已经配置了分布式管理并在 LDAP 数据库中定义了用户和组。

您还应当确保 Web 服务器的安全性,如第 4 章“用于 Web 容器和 Web 应用程序的基于 J2EE 的安全性”, 和第 6 章“使用证书和密钥”中所述。

本章包括以下部分:


什么是访问控制?

访问控制允许您确定以下事项:

您可以控制对整个服务器、部分服务器或您 Web 站点上的文件或目录的访问。您通过创建一个称为访问控制条目 (ACE) 的规则分层结构来允许或拒绝访问。每个 ACE 都指定了该服务器是否应当检查分层结构中的下一个 ACE。您创建的 ACE 的集合称为访问控制列表 (ACL)。

默认情况下,服务器具有一个 ACL 文件,其中包含多个 ACL。当为某个传入的请求确定了要使用的虚拟服务器后,Sun ONE Web Server 将检查是否为该虚拟服务器配置了任何 ACL。如果找到适用于当前请求的 ACL,Sun ONE Web Server 将评估其 ACE 以确定是否允许访问。

是否允许访问将基于以下事项:

为用户/组设置访问控制

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

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

服务器实例的用户/组验证方法包括:

所有这些方法都需要一个目录服务器。

用户/组验证要求用户在访问 Administration Server 或 Web 站点上的文件和目录之前先验证其身份。使用验证,用户可以通过输入用户名和密码、使用客户机证书或摘要验证插件来验证其身份。使用客户机证书时需要加密。有关加密和使用客户机证书的信息,请参见第 4 章“用于 Web 容器和 Web 应用程序的基于 J2EE 的安全性”

默认验证

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

基本验证

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

当用户试图访问具有用户/组验证的 Administration Server 或 Web 站点上的资源时,Web 浏览器将显示一个对话框,要求用户输入用户名和密码。服务器将收到加密或未加密的信息,这取决于您的服务器是否启用了加密。


注意

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


当用户向服务器验证其身份时,将显示以下对话框:

单击“OK”后,用户将看到以下内容:

您可以自定义未经授权的用户在“Access Denied Response”页面中收到的拒绝访问消息。

SSL 验证

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

当您将服务器设置为使用证书信息来验证客户机时,服务器将:

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

当您要求为访问控制进行客户机验证时,需要为您的 Web 服务器启用 SSL 加密算法。要了解如何启用 SSL,请参见第 6 章“使用证书和密钥”

要成功访问要求进行 SSL 验证的资源,客户机证书必须来自 Web 服务器信任的 CA。如果 Web 服务器的 certmap.conf 文件被配置为将浏览器中的客户机证书与目录服务器中的客户机证书相比较,则需要在该目录服务器中发布客户机证书。不过,certmap.conf 文件也可以配置为仅将证书中的选定信息与目录服务器条目进行比较。例如,您可以将 certmap.conf 文件配置为仅将浏览器证书中的用户 ID 和电子邮件地址与目录服务器条目进行比较。要了解有关 certmap.conf 文件和证书映射的详细信息,请参见第 6 章“使用证书和密钥”


注意

只有 SSL 验证方法要求对 certmap.conf 文件进行修改,这是因为需要根据 LDAP 目录来检查证书。而要求对服务器的所有连接进行客户机验证则不必如此。如果您选择使用客户机证书,则应当增加 magnus.conf 文件中 AcceptTimeout 指令的值。


摘要验证

摘要验证允许用户基于用户名和密码进行验证,但不必以明文形式发送用户名和密码。浏览器使用用户的密码和 Web 服务器提供的某些信息,利用 MD5 算法来创建摘要值。服务器端也可以计算此摘要值(使用摘要验证插件)并与客户机提供的摘要值进行比较。如果这些摘要值匹配,用户将通过验证。

要进行这种验证,您的目录服务器需要访问明文形式的用户密码。Sun ONE Directory Server 具有一个可逆的密码插件,它使用对称的加密算法以加密形式存储数据,这些数据可在稍后被解密成原来的形式。只有目录服务器保存了数据的密钥。

对于摘要验证,您需要启用 Sun ONE Web Server 6.1 附带的可逆密码插件和特定的摘要验证插件。要配置 Web 服务器以处理摘要验证,请设置 dbswitch.conf 文件中数据库定义的 digestauth 属性。

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

表 9-1
摘要验证的不同情况

ACL 方法

验证数据库支持摘要验证

验证数据库不支持摘要验证

default

未指定

摘要和基本

基本

basic

基本

基本

digest

摘要

错误

使用 method = digest 处理 ACL 时,服务器将尝试按以下步骤进行验证:

在 UNIX 上安装摘要验证插件

摘要验证插件包含一个共享库,该库可在下面两个文件中找到:

要在 UNIX 上安装摘要验证插件,请执行以下步骤:

  1. 确保此共享库与 Sun ONE Directory Server 位于相同的服务器计算机上。
  2. 确保知道 Directory Manager 的密码。
  3. 修改 libdigest-plugin.ldif 文件,将所有对 /path/to 的引用更改为安装了摘要验证插件共享库的位置。
  4. 要安装插件,请输入以下命令:
  5. % ldapmodify -D "cn=Directory Manager" -w password -a < libdigest-plugin.ldif

在 Windows 上安装摘要验证插件

您需要将 Sun ONE Web Server 安装中的几个 .dll 文件复制到 Sun ONE Directory Server 服务器计算机上,以便 Sun ONE Directory Server 能够使用摘要验证插件正确启动。

要在 Windows 上安装摘要验证插件,请执行以下步骤:

  1. 访问位于以下位置的 Sun ONE Web Server 安装中的共享库:
  2. [server_root]\bin\https\bin

  3. 复制以下文件:
    • nsldap32v50.dll
    • libspnr4.dll
    • libplds4.dll
  4. 将这些文件粘贴到以下任一位置:
    • \Winnt\system32
    • Sun ONE Directory Server 的安装目录:[server_root]\bin\sldap\server
将 Sun ONE Directory Server 设置为使用 DES 算法

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

要将 Sun ONE Directory Server 设置为使用 DES 算法,请执行以下步骤:

  1. 启动 Sun ONE Directory Server 控制台。
  2. 打开 iDS 5.0 实例。
  3. 选择“Configuration”选项卡。
  4. 单击插件旁边的 + 号。
  5. 选择 DES 插件。
  6. 选择“Add”添加一个新属性。
  7. 输入 iplanetReversiblePassword
  8. 单击“Save”。
  9. 重新启动 Sun ONE Directory Server 实例。

    注意

    要在 iplanetReversiblePassword 属性中为用户设置一个摘要验证密码,您的输入必须包含 iplanetReversiblePasswordobject 对象。


其它验证

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

为主机/IP 设置访问控制

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

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

主机/IP 验证不要求在您的服务器上配置 DNS。如果选择使用主机/IP 验证,您必须在网络中运行 DNS 并将您的服务器配置为使用该 DNS。您可以通过 Server Manager 中“Preferences”选项卡的“Performance Tuning”页面在您的服务器上启用 DNS。

启用 DNS 会降低 Sun ONE Web Server 的性能,因为服务器将不得不搜索 DNS。为减少 DNS 搜索对服务器性能的影响,可以只为访问控制和 CGI 解析 IP 地址,而不为每个请求都解析 IP 地址。要实现此目的,请将 iponly=1 添加到 obj.conf 文件的 AddLog fn="flex-log" name="access" 中:

使用访问控制文件

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

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

您也可以手动创建和编辑 .acl 文件,以便使用 API 来自定义访问控制。有关使用访问控制 API 的详细信息,请参见《Programmer's Guide》。

有关访问控制文件及其语法的详细信息,请参见附录 C“ACL 文件语法”

配置 ACL 用户高速缓存

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

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

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

有关 ACL 文件指令的详细信息,请参见《NSAPI Programmer's Guide》。


访问控制如何工作

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

例如,以下 ACL 文件包含 Administration Server (admin-serv) 的两个默认条目,以及一个用于允许“admin-reduced”组中的用户访问 Administration Server 中的“Preferences”选项卡的条目。

 

version 3.0;

# 以下“es-internal”规则用于保护诸如

# 图标和图像等与 Sun ONE Web Server 相关的文件。

# 这些“es-internal”规则不应当被修改。

  acl "es-internal";

  allow (read, list, execute,info) user = "anyone";

  deny (write, delete) user = "anyone";

# 以下“default”规则适用于

# Sun ONE Web Server 的整个文档目录。在本例中,这些规则被设置为

# 允许目录服务器中的所有 (all) 用户

# 读取、执行、列出和获取信息,

# 但所有 (all) 用户都不能写入或删除任何文件。

# 访问该 Web 服务器的文档目录的所有客户机都需要

# 提供用户名和密码,因为本例

# 使用了基本 (basic) 验证

# 方法。客户机必须位于目录服务器中才能

# 访问此默认目录,因为不在目录服务器中的任何用户 (anyone) 都

# 将被拒绝,而位于目录服务器中的所有用户 (all) 都将被

# 允许访问。

  acl "default";

  authenticate (user,group) {

     database = "default";

     method = "basic";

  };

  deny (all)

  (user = "anyone");

  allow (read,execute,list,info)

  (user = "all");

# 以下规则将拒绝不在目录服务器中的任何用户以及

# 位于目录服务器中但不在 GroupB 中的任何用户

# 访问 web 目录。

# 只有 GroupB 中的用户能够读取、执行、列出

# 以及获取信息。GroupA 不能访问

# web 目录,即使(在下面的 ACL 规则中)它们

# 能够访问 my_stuff 目录。此外,GroupB 的成员

# 不能写入或删除文件。

  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");

 

# 以下规则将拒绝不在目录服务器中的任何用户

# 以及位于目录服务器中但

# 其用户 ID 不是 SpecificMemberOfGroupB 的任何用户进行访问。此设置中的 ACL 规则

# 还要求用户连接自

# 特定的 IP 地址。规则中的 IP 地址设置

# 是可选的;添加它是为了获得额外的

# 安全性。此外,此 ACl 规则还具有一个自定义的

# 提示“Presentation Owner”。此自定义提示出现在

# 客户机浏览器的用户名和密码

# 对话框中。

 

  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");

 

# 以下 ACL 规则将拒绝不在目录服务器中的任何用户

# 以及位于目录服务器中但不在

# GroupA 或 GroupB 中的任何用户访问 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

Sun ONE Web 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 语句。因为 uri ACL 是最后一个匹配语句,所以 default ACL 将被忽略。



设置访问控制

本节介绍如何限制对您 Web 站点上的文件或目录的访问。您可以为所有服务器设置全局访问控制规则,也可以单独为特定的服务器进行设置。例如,人力资源部门可以创建 ACL,允许所有通过验证的用户查看他们自己的工资单数据,但是只允许负责工资单的人员更新数据。

您可以通过 Administration Server 为所有服务器设置全局访问控制。以下小节详细介绍了选择“Access Control Options”时显示的每个选项。


注意

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


设置全局访问控制

要为所有服务器创建或编辑全局访问控制,请执行以下步骤:

  1. 访问 Administration Server 并选择“Global Settings”选项卡。
  2. 单击“Restrict Access”链接。
  3. 从下拉列表中选择 Administration Server (https-admserv)。
  4. 单击“Create ACL”和“Go”按钮。
  5. 将显示 uri=/https-admserv/ 的“Access Control Rules”页面:

    “Access Control Rules”页面



    Administration Server 具有两行不能编辑的默认访问控制规则。

  6. 选中“Access control is on”(如果尚未选中)。
  7. 要将一个默认 ACL 规则添加到该表的底部一行,请单击“New Line”按钮。
  8. 要将某个访问控制限制与其前面的访问控制限制交换位置,请单击向上箭头。

    要将某个访问控制限制与其后面的访问控制限制交换位置,请单击向下箭头。

  9. 单击“Users/Groups”列中的“anyone”。
  10. “User/Group”页面将显示在下面的框架中:

    “User/Group”页面


    “User/Group”页面图示。

  11. 选择您要允许其访问的用户和组,然后单击“Update”。
  12. 单击“Group”和“User”的“List”将提供列表供您从中选择。

  13. 单击“From Host”列中的“anyplace”。
  14. 输入允许其访问的主机名和 IP 地址,然后单击“Update”。
  15. 单击“Programs”列中的“all programs”。
  16. “Programs”页面


    “Programs”页面图示。

  17. 选择“Program Groups”,或在“Program Items”字段中输入您要允许其访问的特定文件名,然后单击“Update”。
  18. (可选)单击“Extra”列下的 x 符号可以添加一个自定义的 ACL 表达式。
  19. 在“Continue”列中添加一个复选标记(如果尚未选定为默认设置)。
  20. 服务器将评估下一行限制,然后才确定是否允许该用户进行访问。创建多行限制时,请将限制按照由粗到细的顺序排列。

  21. (可选)单击“Response when denied”将用户定向到其它 URL 或 URI。
  22. 输入 URL 的绝对路径或相对的 URI 路径,然后单击“Update”。
  23. 单击“Submit”,将新的访问控制规则存储在 ACL 文件中。

    注意

    单击“Revert”将删除刚刚创建的所有设置。


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

使用 Server Manager,您可以创建、编辑或删除特定服务器实例的访问控制。


注意

如果要删除,您不应删除 ACL 文件中的所有 ACL 规则。至少要保留一个 ACL 文件,并且其中至少要包含一个 ACL 规则,以便启动服务器。删除所有 ACL 规则并重新启动服务器将导致语法错误。


要为某个服务器实例创建访问控制,请执行以下步骤:

  1. 访问 Server Manager 并选择要为其创建或编辑 ACL 的服务器实例。
  2. 选择 Server Manager 的“Preferences”选项卡。
  3. 单击“Restrict Access”链接。
  4. 在“Option”列下,选择以下选项之一:
    • “Add”,然后输入 ACL 文件位置
    • “Edit”,然后从下拉菜单中选择 ACL 文件
    • “Delete”,然后从下拉菜单中选择 ACL 文件
    • 将显示“Access Control List Management”页面,其中提供了三个选项:

      “Access Control List Management”页面


      “Access Control List Management”页面图示。

  5. 选择以下选项之一:
    • “Pick a resource”,指定文件或目录的通配符模式(例如 *.html),选择要限制的目录或文件名,或浏览以查找某个文件或目录。
    • “Pick an existing ACL”,从您已启用的所有 ACL 列表中选择。尚未启用的现有 ACL 不会显示在此列表中。
    • Enter the ACL name”,允许创建命名 ACL。仅当您熟悉 ACL 文件时,才能使用此选项。如果您要为资源应用命名 ACL,需要手动编辑 obj.conf 文件。
    • 表 9-2 说明了您可以使用的资源通配符。

      表 9-2
      服务器资源通配符

      资源通配符

      含义

      default

      在安装过程中创建的一个命名 ACL,用于限制写访问,使得只有 LDAP 目录中的用户可以发布文档。

      Entire Server

      一组规则,用于确定对整个 Web 站点(包括已运行的任何虚拟服务器)的访问。要限制对某个虚拟服务器的访问,请指定其文档根目录的路径。

      /usr/sun/server4/docs/cgi-bin/*

      控制对 cgi-bin 目录中的所有文件和目录的访问。您必须指定一个绝对路径。在 Windows 上,该路径必须包括驱动器号。

      uri="/sales"

      控制对文档根目录中的 sales 目录的访问。要指定 URI,请创建一个命名 ACL。

  6. 单击“Edit Access Control”。
  7. 将显示“Access Control Rules for: (服务器实例)”页面。

    “Access Control Rules”页面


    “Access Control Rules”页面图示。

  8. 选中“Access control is on”(如果尚未选中)。
  9. 要创建或编辑此服务器实例的 ACL,请单击“Action”列中的“Deny”。
  10. “Allow /Deny”页面将显示在下面的框架中:

    “Allow /Deny”页面


    “Allow/Deny”页面图示。

  11. 选择“Allow”(如果尚未选定为默认设置),然后单击“Update”。
  12. 单击“Users/Groups”列中的“anyone”。
  13. “User/Group”页面将显示在下面的框架中:

    “User/Group”页面


    “User/Group”页面图示。

  14. 选择您要允许其访问的用户和组,然后单击“Update”。
  15. 单击“Group”和“User”的“List”将提供列表供您从中选择。

  16. 单击“From Host”列中的“anyplace”。
  17. 输入允许其访问的主机名和 IP 地址,然后单击“Update”。
  18. 单击“Rights”列中的“all”。
  19. “Access Rights”页面


    “Access Rights”页面图示。

  20. 选择以下选项之一,然后单击“Update”:
    • “All Access Rights”
    • “Only the following rights”,然后为该用户选中所有相应的权限。
  21. (可选)单击“Extra”列下的 x 符号可以添加一个自定义的 ACL 表达式。
  22. 在“Continue”列中添加一个复选标记(如果尚未选定为默认设置)。
  23. 服务器将评估下一行限制,然后才确定是否允许该用户进行访问。创建多行限制时,请将限制按照由粗到细的顺序排列。

  24. (可选)单击“Response when denied”将用户定向到其它 URL 或 URI。
  25. 输入 URL 的绝对路径或相对的 URI 路径,然后单击“Update”。
  26. 单击“Submit”,将新的访问控制规则存储在 ACL 文件中。

  27. 注意

    单击“Revert”将删除刚刚创建的所有设置。


  28. 为每个要创建访问控制的服务器实例重复执行上述所有步骤。
  29. 完成后,单击“Apply”。
  30. 选择硬启动/重新启动或动态应用。

您也可以基于每个虚拟服务器启用 ACL 设置。要了解如何进行此操作,请参见编辑虚拟服务器的访问控制列表


选择访问控制选项

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

设置操作

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

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

指定用户和组

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

Sun ONE Web Server 将检查 LDAP 服务器(例如 Sun ONE Directory Server)中存储的用户和组的列表。

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

指定“From Host”

您可以基于请求来自的计算机限制对 Administration Server 或 Web 站点的访问。

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

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

对于主机名,* 必须替换名称中的整个部分。也就是说,*.sun.com 可以接受,但 *users.sun.com 不能接受。当 * 出现在主机名中时,它必须是最左侧的字符。例如,*.sun.com 可以接受,但 users.*.com 不能接受。

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

限制对程序的访问

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

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

设置访问权限

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

编写自定义表达式

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

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

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

有关有效语法和 ACL 文件的详细信息,请参见附录 C“ACL 文件语法”在 obj.conf 中引用 ACL 文件

禁用访问控制

如果您取消选中“Access control is on”选项,将收到一个提示,询问是否要删除 ACL 中的记录。单击“OK”后,服务器将从 ACL 文件中删除该资源的 ACL 条目。

如果要取消激活 ACL,可以注释掉文件 generated-https-server-id.acl 中的 ACL 行,即在每行的开头放置一个 # 号。

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


注意

此访问控制将附加在位于为分布式管理设置的管理员组中的用户上。 Administration Server 首先检查用户(非超级用户)是否位于管理员组中,然后评估访问控制规则。


访问被拒绝时的响应

访问被拒绝时,Sun ONE Web Server 提供了以下默认消息:“FORBIDDEN.Your client is not allowed access to the restricted object”。您可以选择当访问被拒绝时的其它响应。也可以为每个访问控制对象创建不同的消息。

要更改为特定 ACL 发送的消息,请执行以下步骤:

  1. 单击 ACL 页面中的“Response when denied”链接。
  2. 在下面的框架中选中“Respond with the following file”。
  3. 输入 URL 的绝对路径或相对的 URI 路径,然后单击“Update”。
  4. 确保用户对他们被重定向到的 URL 或 URI 具有访问权限。

  5. 单击“Update”。
  6. 在上面的框架中单击“Submit”,提交该访问控制规则。


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

本节介绍一些常用的对 Web 服务器及其内容的访问限制。每个过程的步骤都详述了需要执行的特定操作;但是,您仍需要完成设置服务器实例的访问控制下介绍的所有步骤。

本节介绍了以下过程:

限制对整个服务器的访问

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

使用所介绍的为服务器实例设置访问控制的步骤,您需要执行以下操作:

  1. 使用 Server Manager 选择该服务器实例。
  2. 选择“Preferences”选项卡。
  3. 单击“Restrict Access”链接。
  4. 选择要编辑的 ACL 文件。
  5. 拾取整个服务器资源,然后单击“Edit Access Control”。
  6. 添加一个新规则以拒绝所有用户的访问。
  7. 添加另一个新规则以允许特定组的访问。
  8. 输入允许访问的计算机的主机名的通配符模式。
  9. 例如,*.employee.sun.com

  10. 取消选中”Continue”复选框。
  11. 单击“Submit”和“Apply”以提交和应用所做的更改。

限制对目录(路径)的访问

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

要限制对服务器上的目录的访问(使用所介绍的为服务器实例设置访问控制的步骤),请执行以下步骤:

  1. 使用 Server Manager 选择该服务器实例。
  2. 选择“Preferences”选项卡。
  3. 单击“Restrict Access”链接。
  4. 选择要编辑的 ACL 文件。
  5. 浏览“Pick a sesource”部分并选择您要限制的目录。
  6. 将显示服务器文档根目录中的目录。选定目录后,“Editing”下拉列表将显示该目录的绝对路径。


    注意

    如果要查看服务器根目录中的所有文件,请单击“Options”,然后选中“List files as well as directories”。


  7. 单击“Edit Access Control”。
  8. 创建一个新规则并保留默认设置,即拒绝任何位置的任何用户的访问。
  9. 创建另一个新规则,允许某个特定组中的用户仅具有读权限和执行权限。
  10. 创建第三行规则,允许某个特定用户具有所有权限。
  11. 取消选中第二行和第三行的”Continue”复选框,然后单击“Update”。
  12. 单击“Submit”和“Apply”以提交和应用所做的更改。

该文件或目录的绝对路径将创建在文档根目录中。ACL 文件中的条目将如下所示:acl "path=d:\sun\suitespot\docroot1\sales/";

限制对 URI(路径)的访问

您可以使用 URI 控制对 Web 服务器上单个用户内容的访问。URI 是相对于服务器文档根目录的路径和文件。如果您需要频繁地重命名或移动服务器的所有或部分内容(例如,为了调整磁盘空间),则使用 URI 可以方便地管理这些内容。如果您还有其它文档根目录,这也是一种很好的处理访问控制的方法。

要限制对 URI 的访问(使用所介绍的为服务器实例设置访问控制的步骤),请执行以下步骤:

  1. 使用 Server Manager 选择该服务器实例。
  2. 选择“Preferences”选项卡。
  3. 单击“Restrict Access”链接。
  4. 在“ACL name”部分的“Type”中输入要限制的 URI。
  5. 例如:uri=/my_directory

  6. 单击“Edit Access Control”。
  7. 创建一个新规则,为所有用户授予读权限。
  8. 创建另一个新规则,为目录的所有者授予访问权限。
  9. 取消选中第一个和第二个规则的”Continue”复选框。
  10. 单击“Submit”和“Apply”以提交和应用所做的更改。

将相对于文档根目录创建该 URI 的路径。ACL 文件中的条目将如下所示:acl "uri=/my_directory";

限制对文件类型的访问

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

要限制对文件类型的访问(使用所介绍的为服务器实例设置访问控制的步骤),请执行以下步骤:

  1. 使用 Server Manager 选择该服务器实例。
  2. 选择“Preferences”选项卡。
  3. 单击“Restrict Access”链接。
  4. 单击“Pick a resource”部分中的“Wildcard”并输入一个通配符模式。
  5. 例如,*.cgi

  6. 单击“Edit Access Control”。
  7. 创建一个新规则,为所有用户授予读权限。
  8. 创建另一个规则,仅为某个特定组授予写权限和删除权限。
  9. 单击“Submit”和“Apply”以提交和应用所做的更改。

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

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

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

您可以将对服务器的写访问和删除访问限制为仅允许在指定的时间或指定的日期进行。使用此方式可以禁止用户在工作时间内发布文档,这时其他用户可能正在访问文件。

要基于一天中的某个时间对访问进行限制(使用所介绍的为服务器实例设置访问控制的步骤),请执行以下步骤:

  1. 使用 Server Manager 选择该服务器实例。
  2. 选择“Preferences”选项卡。
  3. 单击“Restrict Access”链接。
  4. 从“Pick a resource”中的下拉列表中选择整个服务器,然后单击“Edit Access Control”。
  5. 创建一个新规则,为所有用户授予读权限和执行权限。
  6. 这意味着如果某个用户要添加、更新或删除文件或目录,将不会应用此规则,服务器将搜索另一个匹配的规则。

  7. 创建另一个新规则,拒绝所有用户的写权限和删除权限。
  8. 单击 X 链接,创建一个自定义表达式。
  9. 输入允许进行访问的一周中的哪些天以及一天中的哪些时间。
  10. 示例:

    user = "anyone" and
    dayofweek = "sat,sun" or
    (timeofday >= 1800 and
    timeofday <= 600)

    创建自定义表达式时,“Users/Groups”和“From Host”字段中将显示消息“Unrecognized expressions”。

  11. 单击“Submit”和“Apply”以提交和应用所做的更改。

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

基于安全性限制访问

从 Sun ONE Web Server 6.1 开始,您可以为同一个服务器实例配置 SSL 监听套接字和非 SSL 监听套接字。基于安全性限制访问使您可以为只应通过安全通道传输的资源创建保护。

要基于安全性对访问进行限制(使用所介绍的为服务器实例设置访问控制的步骤),请执行以下步骤:

  1. 使用 Server Manager 选择该服务器实例。
  2. 选择“Preferences”选项卡。
  3. 单击“Restrict Access”链接。
  4. 从“Pick a resource”中的下拉列表中选择整个服务器,然后单击“Edit Access Control”。
  5. 创建一个新规则,为所有用户授予读权限和执行权限。
  6. 这意味着如果某个用户要添加、更新或删除文件或目录,将不会应用此规则,服务器将搜索另一个匹配的规则。

  7. 创建另一个新规则,拒绝所有用户的写权限和删除权限。
  8. 单击 X 链接,创建一个自定义表达式。
  9. 输入 ssl="on"
  10. 示例:

    user = "anyone" and ssl="on"

  11. 单击“Submit”和“Apply”以提交和应用所做的更改。

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

在分布式管理中保证访问控制的安全性

本节列出了在启用分布式管理后,为在 Sun ONE Web Server 6.1 中保证访问控制的安全性所需执行的其它任务。

保护对资源的访问

PathCheck 指令在 generated.https-server-id.acl 文件中的 https-server-id 对象标记中的出现顺序可能会授予并不希望的资源访问权限。要防止发生这种情况,请编辑 <server-root>/generated.https-server-id.acl 文件,指定要求进行访问控制的程序组列表(由逗号分隔),如下所示:

在以下行之下:

allow (all)

user=<username> and program=<program group, program group...>;

添加以下行:

deny absolute (all)

user=<username> and program!=<program group, program group...>;

保护对服务器实例的访问

为配置 Sun ONE Web Server 6.1 以控制对服务器实例的访问,请编辑 <server-root>/httpacl/*.https-admserv.acl 文件并指定要授予其访问控制权限的用户。示例:

acl "https-<instance>";

authenticate (user,group) {

database = "default";

method = "basic";

};

deny absolute (all) user != "UserA";

启用基于 IP 的访问控制

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

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

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

    authenticate (user,group,ip) {

    database = "default";

    method = "basic";

    };

  3. 添加以下访问控制条目:
  4. deny absolute (all) ip !="ip_for_which_access_is_allowed";

    示例:

    acl "https-admserv";

    authenticate (user,group,ip) {

    database = "default";

    method = "basic";

    };

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


使用动态访问控制文件

服务器内容很少是由一个用户完全管理的。您可能需要允许终端用户访问配置选项的某个子集,以使他们能够进行所需的配置,而不必授权他们访问 Sun ONE Web Server。配置选项的子集存储在动态配置文件中。

本节包括以下主题:

使用 .htaccess 文件

Sun ONE Web Server 支持 .htaccess 动态配置文件。您可以通过用户界面或手动更改配置文件来启用 .htaccess 文件。支持 .htaccess 的文件位于 server_root/plugins/htaccess 目录中。这些文件包括一个插件,使您可以使用 .htaccess 文件以及一个用于将 .nsconfig 文件转换为 .htaccess 文件的脚本。

您可以将 .htaccess 文件与服务器的标准访问控制结合起来使用。不管 PathCheck 指令的顺序如何,标准访问控制始终在 .htaccess 访问控制之前应用。如果用户/组验证是“Basic”,请不要同时使用标准访问控制和 .htaccess 访问控制进行用户验证。您可以通过标准服务器访问控制使用 SSL 客户机验证,也可以通过 .htaccess 文件进行 HTTP“Basic”验证。

本节包括以下主题:

从用户界面启用 .htaccess 文件

要将 Sun ONE Web Server 配置为使用 .htaccess 文件,请执行以下步骤:

  1. 访问 Server Manager 并选择要为其启用 .htaccess 的服务器实例。
  2. 单击屏幕顶部的“Class Manager”链接。
  3. 选择“Content Mgmt”选项卡。
  4. 单击“.htaccess Configuration”链接。
  5. 按以下方式选择要编辑的服务器:
    • 选择整个服务器或从下拉列表中选择特定的服务器
    • 单击“Browse”选择要编辑的目录和文件
    • 单击“Wildcard”选择要编辑的通配符模式
  6. 选择“Yes”激活 .htaccess 文件。
  7. 输入要添加 .htaccess 配置的文件名。
  8. 单击“OK”。
  9. 完成后,单击“Apply”。
  10. 选择硬启动/重新启动或动态应用。

从 magnus.conf 中启用 .htaccess 文件

要以手动方式让服务器使用 .htaccess 文件,需要先修改服务器的 magnus.conf 文件,以便装入、初始化和激活该插件。

  1. 打开 server_root/https-server_name/config 中的 magnus.conf 文件。
  2. 在其它 Init 指令之后,添加以下行:
    • 对于 UNIX/Linux:
    • Init fn="load-modules" funcs="htaccess-init,htaccess-find"
      shlib="
      server_root/plugins/htaccess/htaccess.so" NativeThread="no"
      Init fn="htaccess-init"

    • 对于 Windows:
    • Init fn="load-modules" funcs="htaccess-init,htaccess-find,htaccess-register"
      shlib="
      server_root/plugins/htaccess/htaccess.dll" NativeThread="no"
      Init fn="htaccess-init"

    • 对于 HP:
    • Initfn="load-modules" funcs="htaccess-init,htaccess-find,htaccess-register" shlib="<server_root>/plugins/htaccess/htaccess.sl" NativeThread="no"

      Init fn="htaccess-init"

  3. (可选)使最后一行为:
  4. Init fn="htaccess-init"[groups-with-users=yes]

  5. 单击“File”-“Save”。
  6. 打开 obj.conf 文件。
  7. 将 PathCheck 指令添加为对象中的最后一个指令。
    1. 要为某个虚拟服务器管理的所有目录激活 .htaccess 文件处理,请将 PathCheck 指令添加到 object.conf 文件中的默认对象中:
    2. <Object name="default">

      ...

      PathCheck fn="htaccess-find"

      </Object>

      .htaccess 处理应当是该对象中的最后一个 PathCheck 指令。

    3. 要为特定服务器目录激活 .htaccess 文件处理,请将 PathCheck 指令放在 magnus.conf 文件中的相应定义中。
  8. 要将 .htaccess 文件命名为其它名称,您必须使用以下格式在 PathCheck 指令中指定该文件名:
  9. PathCheck fn="htaccess-find" filename="filename"


    注意

    下次使用 Administration Server 时,系统将警告您已经进行了手动编辑。单击“Apply”接受所做的更改。


对服务器的后续访问将使用指定目录中的 .htaccess 访问控制。例如,要限制对 .htaccess 文件的写访问,可以为这些文件创建一个配置式样,然后对该配置式样应用访问控制。有关详细信息,请参见第 17 章“应用配置式样”

将现有 .nsconfig 文件转换为 .htaccess 文件

Sun ONE Web Server 6.1 具有一个 htconvert 插件,可用于将现有的 .nsconfig 文件转换为 .htaccess 文件。系统已不再支持 .nsconfig 文件。如果您以前使用的是 .nsconfig 文件,应当将这些文件转换为 .htaccess 文件。

激活后,htconvert 将在给定的 server.xml 文件中搜索 pfx2dirdocument-root 指令。每个找到的 .nsconfig 文件都将被转换为 .htaccess 文件。可以转换多个 obj.conf 文件,这取决于配置。


注意

如果存在现有的 .htaccess 文件,htconvert 将生成一个 .htaccess.new 文件并给出警告。如果 .htaccess.htaccess.new 已存在,该新文件将命名为 .htaccess.new.new.new 会被重复附加。


htconvert 插件当前仅支持 RestrictAccessRequireAuth 指令以及 <Files> 包装。如果显示的是 <Files> 而不是 <Files*>,脚本将给出警告,并且表现出好像目录中的所有文件都要进行访问控制。

要转换文件,请在命令提示符下输入您系统上的 Perl 的路径、插件脚本的路径以及 server.xml 文件的路径。例如:

所有 .nsconfig 文件都将转换为 .htaccess 文件,但是不会被删除。

groups-with-users 选项可用于处理组中的大量用户。如果组中有许多用户,请执行以下步骤:

  1. 修订用户文件的格式,列出某个用户所属的所有组:
  2. username:password:group1,group2,group3,...groupn

  3. 修订 AuthGroupFile 指令,使其指向与 AuthUserFile 相同的文件。

或者,您也可以:

  1. 完全删除 AuthGroupFile 指令。
  2. 将以下内容添加到 magnus.conf 文件的 Init fn=htaccess-init 行:

使用 htaccess-register

htaccess-register 是一个新函数,使您可以创建自己的验证方法。像 Apache 一样,您可以创建外部验证模块并通过 htaccess-register 将其插入 .htaccess 模块。server_root/plugins/nsapi/htaccess 中提供了两个样例模块。

您可以使用外部模块创建一个或多个新的指令。例如,可以指定用于验证的用户数据库。这些指令可能不会显示在 <Limit><LimitExcept> 标记中。

.htaccess 文件的示例

下面显示了一个 .htaccess 文件示例:

<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
AuthName mxyzptlk.kawaii.com
AuthUserFile /server_root/mxyz-docs/service.pwd
AuthGroupFile /server_root/mxyz-docs/service.grp

支持的 .htaccess 指令

本版本支持以下 .htaccess 指令:

allow

语法

allow from host,其中:

该指令不必包含在 <Limit><LimitExcept> 范围内,但通常会包含在内。

作用

允许访问指定的主机。通常显示在 <Limit> 范围内。

deny

语法

deny from host,其中:

该指令不必包含在 <Limit><LimitExcept> 范围内,但通常会包含在内。

作用

拒绝访问指定的主机。通常显示在 <Limit> 范围内。

AuthGroupFile

语法

AuthGroupFile filename,其中 filename 是包含组定义的文件的名称,组定义的格式为:groupname:user user。

该指令不能显示在 <Limit><LimitExcept> 范围内。

作用

指定要用于任何组定义(在某个 require group 指令中引用的)的命名组文件。请注意,如果 AuthGroupFile 指令中指定的文件名与在 AuthUserFile 指令中指定的文件名相同,该文件将被认为按以下格式包含用户和组:

username:DES-encrypted-password:comma-separated-list-of-groups

AuthUserFile

语法

AuthUserFile filename,其中:

该指令不能显示在 <Limit><LimitExcept> 范围内。

作用

指定要用于任何用户名(在某个 require user 或 require valid-user 指令中引用的)的命名用户文件。

请注意,在 obj.conf 文件中的 Init fn=htaccess-init 指令中使用 groups-with-users=yes,或指定具有相同文件名的 AuthGroupFile 指令,将导致该文件被认为使用以下格式:

username:DES-encrypted-password:comma-separated-list-of-groups

AuthName

语法

AuthName authentication realm,其中 authentication realm 是一个字符串,用来标识与任何用户验证请求相关联的某个授权领域。

该指令不能显示在 <Limit><LimitExcept> 范围内。

作用

authentication realm 字符串通常显示在客户端的用户名和密码提示中。它可能影响客户端的用户名和密码的高速缓存。

AuthType

语法

AuthType Basic。该指令不能显示在 <Limit><LimitExcept> 范围内。

作用

指定用户验证方法为 HTTP 基本验证,这是当前支持的唯一方法。

<Limit>

语法

<Limit method method ...>

allow, deny, order, or require directives

</Limit>

其中 method 是 HTTP 方法,例如 GET、POST 或 PUT。此处可以使用 Web 服务器能够理解的任何方法。

作用

将包含的指令仅应用于使用指定的 HTTP 方法的请求。

<LimitExcept>

语法

<LimitExcept method method ...>

allow, deny, order, or require directives

</LimitExcept>

其中 method 是 HTTP 方法,例如 GET、POST 或 PUT。此处可以使用 Web 服务器能够理解的任何方法。

作用

将包含的指令仅应用于指定的 HTTP 方法以外的请求类型。

order

语法

Order ordering,其中 ordering 是以下顺序之一:

该指令不必包含在 <Limit><LimitExcept> 范围内,但通常会包含在内。

作用

require

语法

该指令不必包含在 <Limit><LimitExcept> 范围内,但通常会包含在内。

作用

.htaccess 的安全性考虑

默认情况下,服务器对 HTTP PUT 的支持被禁用。您可以使用 Class Manager 中“Content Mgmt”的“Remote File Manipulation”页面来激活 HTTP PUT。允许对包含 .htaccess 文件的目录进行 PUT 访问时要十分小心,因为这种访问允许替换这些文件。通过限制访问可以禁止对目录中的所有文件进行 PUT 访问。请参见限制对目录(路径)的访问


控制虚拟服务器的访问

Sun ONE Web Server 6.1 中的访问控制信息可以来自于每台虚拟服务器的 ACL 文件和文档目录中的 .htaccess 文件。自 iPlanet Web Server 4.x 以来,.htaccess 系统并没有发生改变。

您的 server.xml 文件可以包含一个或多个 ACLFILE 标记,这些标记定义了一个与特定的 Sun ONE Web Server 6.x 标准 ACL 文件相关联 ID。例如:

<ACLFILE id="standard" file="standard.acl">

要为虚拟服务器使用访问控制,您必须在“aclids”属性中创建对一个或多个 ACL 文件 ID 的引用。示例:

<VS aclids="standard">

此配置允许多个虚拟服务器共享相同的 ACL 文件。如果要求对虚拟服务器进行用户/组验证,您必须将一个或多个 USERDB 标记添加到它的定义中。这些 USERDB 标记用于在您的 ACL 文件中的数据库名称与在 dbswitch.conf 文件中找到的实际数据库之间创建一个连接。

下面的示例将不具有“database”属性的 ACL 映射到 dbswitch.conf 中的“default”数据库。

<VS>

<USERDB id="default" database="default"/>

</VS>

从虚拟服务器访问数据库

您可以在 dbswitch.conf 文件中全局定义用户验证数据库。此文件仅在服务器启动时被读取。

dbswitch.conf 文件中 LDAP URL 的 baseDN 定义了对数据库的所有访问的全局根目录。这保持了向后兼容性。对于大多数新安装,baseDN 将是空的。

dcsuffixdbswitch.conf 中 LDAP 数据库的新属性,它根据 Sun ONE LDAP 模式定义了 DC 树的根。它是相对于 LDAP URL 中的 baseDN 定义的。当显示 dcsuffix 属性时,LDAP 数据库将与 Sun ONE LDAP 模式兼容,同时某些操作的行为将发生变化。有关 Sun ONE LDAP 模式的详细信息及示例,请参见《Sun ONE Web Server 6.1 Administrator's Configuration Reference》第 2 章中的“The Sun ONE LDAP Schema”。

对于每个虚拟服务器,您可以定义一个或多个 USERDB 块以指向其中一个目录,还可以定义其它信息。在 ACL 的数据库参数中可以引用 USERDB 块 ID。如果某个虚拟服务器没有 USERDB 块,则基于用户或组的 ACL 将失败。

USERDB 标记在 ACL 的数据库属性和 dbswitch.conf 之间定义了一个额外的间接层。此间接层为服务器管理员增添了必要的保护,使他们可以完全控制虚拟服务器管理员能够访问哪些数据库。

有关 USERDB 的详细信息,请参见《Sun ONE Web Server 6.1 Administrator's Configuration Reference》第 2 章中的“User Database Selection”。

在用户界面中指定 LDAP 数据库

您在 dbswitch.conf 中定义了一个或多个用户验证数据库后,可以使用 Class Manager 来配置每个虚拟服务器要用来进行验证的数据库。您也可以使用 Class Manager 为要验证的虚拟服务器添加 dbswitch.conf 中新创建的数据库定义。

要指定虚拟服务器要使用的 LDAP 数据库,请执行以下步骤:

  1. 访问 Server Manager 并选择“Virtual Server Class”选项卡。
  2. 单击“Virtual Server Class”链接,从中可以指定服务器树视图下列出的 LDAP 数据库。
  3. 选择“Virtual Servers”选项卡(如果尚未显示)。
  4. 单击“ACL Settings”链接。
  5. 将显示“ACL Settings for Virtual Servers”页面。

  6. 从“Option”列中的下拉列表中选择“Edit”(如果尚未显示)。
  7. 从您正在编辑的虚拟服务器的“Database”列中的下拉列表中选择数据库配置。
  8. 单击“OK”。
  9. 关闭“Edit ACL Files”窗口。
  10. 单击“Apply”。
  11. 选择动态应用。

编辑虚拟服务器的访问控制列表

虚拟服务器的 ACL 是为该虚拟服务器所在的服务器实例创建的,虚拟服务器 ACL 的设置将默认采用为该服务器实例创建的设置。不过,您可以通过 Class Manager 来编辑每个虚拟服务器的访问控制。您还可以使用此方法为虚拟服务器添加新创建的 ACL 文件。

要编辑虚拟服务器的 ACL 设置,请执行以下步骤:

  1. 访问 Server Manager 并选择“Virtual Server Class”选项卡。
  2. 单击“Virtual Server Class”链接,从中可以指定服务器树视图下列出的 LDAP 数据库。
  3. 选择“Virtual Servers”选项卡(如果尚未显示)。
  4. 单击“ACL Settings”链接。
  5. 从要为其进行更改的每个虚拟服务器的“Option”字段中的下拉列表中选择“Edit”或“Delete”。
  6. 单击“ACL File”字段中的“Edit”链接以显示可用的 ACL 文件。
  7. 选择要为该虚拟服务器添加或删除的一个或多个 ACL 文件。
  8. 一个虚拟服务器可以具有多个 ACL 文件,因为它们可能具有多个文档根目录。

  9. 从下拉列表中选择要与 ACL 列表相关联的数据库。
  10. (可选)输入 BaseDN。
  11. 完成更改后,单击“OK”。
  12. 单击“Apply”。
  13. 选择动态应用。


为基于文件的验证创建 ACL

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


注意

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


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

acl "default";

authenticate (user) {

...

database="myfile";

...

};

可以在 server.xml 文件中某个 VS USERDB 元素中引用 myfile 数据库,其中该数据库将与 server-root/userdb/dbswitch.conf 文件中的相应定义相链接。示例:

<VS>

...

<USERDB id="myfile" database="myfiledb">

...

</VS>

server-root/userdb/dbswitch.conf 文件中,有一个条目定义了文件 auth-db 及其配置。示例:

directory myfiledb file

myfiledb:syntax keyfile

myfiledb:keyfile /path/to/config/keyfile

请参见下表

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

要为基于文件验证的目录服务创建 ACL 条目,请执行以下步骤:

  1. 访问 Server Manager 并选择要为其创建或编辑 ACL 的服务器实例。
  2. 选择 Server Manager 的“Preferences”选项卡。
  3. 单击“Restrict Access”链接。
  4. 在“Option”列下,从下拉列表中选择 ACL 文件,然后单击“Edit ACL”。
  5. 在上面框架中的“Access Control Rules”页面中,单击要编辑的 ACL 的“Users/Groups”链接。
  6. 在下面框架中的“User/Group”页面中,从验证数据库下拉列表中选择“keyfile”。
  7. 单击“Update”。
  8. 当您按照基于 keyfile 的文件验证数据库设置 ACL 时,dbswitch.conf 文件使用相应 ACL 条目进行更新,如下面给出的样例条目所示:

    version 3.0;

    acl "default";

    authenticate (user) {

    prompt = "Sun One Web Server 6.1";

    database = "mykeyfile";

    method = "basic";

    };

    deny (all) user = "anyone";

    allow (all) user = "all";

为基于 .htaccess 验证的目录服务创建 ACL

Sun ONE Web Server 支持基于 .htaccess 的平面文件验证。如果您以前使用的是 .htaccess 验证,则可以迁移现有数据文件,而无需更改文件验证数据库。如使用 .htaccess 文件中所述,.htaccess 用户和组数据可以存储在单个文件中,也可以分成两个文件(一个存储用户数据,另一个存储组数据)。文件验证数据库对这两种现有格式都支持。

要为基于 htaccess 验证的目录服务创建 ACL,请执行以下步骤:

  1. 访问 Server Manager 并选择要为其创建或编辑 ACL 的服务器实例。
  2. 选择 Server Manager 的“Preferences”选项卡。
  3. 单击“Restrict Access”链接。
  4. 在“Option”列下,从下拉列表中选择 ACL 文件,然后单击“Edit ACL”。
  5. 在上面框架中的“Access Control Rules”页面中,单击要编辑的 ACL 的“Users/Groups”链接。
  6. 在下面框架中的“User/Group”页面中,从验证数据库下拉列表中选择“htaccess”。
  7. 单击“Update”。
  8. 当您按照基于 htaccess 的文件验证数据库设置 ACL 时,dbswitch.conf 文件使用相应 ACL 条目进行更新,如下面给出的样例条目所示:

    version 3.0;

    acl "default";

    authenticate (user) {

    prompt = "Sun One Web Server 6.1";

    database = "myhtaccessfile";

    method = "basic";

    };

    deny (all) user = "anyone";

    allow (all) user = "all";

将现有 .htaccess 信息迁移到文件验证数据库中

要在 Sun ONE Web Server 6.1 中将现有 .htaccess 信息迁移到文件验证数据库中,请执行以下步骤:

用户文件格式如下所示:

#user:password

组文件格式如下所示:

#group1:user1 user2

#group2:user3 user4


注意

成员名称用空格隔开。


当 userfile 和 groupfile 具有相同的文件名时,它们将合并在一起。合并后的每一行都使用如下所示的语法:

#user:password:group1,group2


注意

列之间用冒号隔开。


htaccess 样例数据库

样例 1

#sample userfile (user/password "j2ee/j2eepwd" user/password "user1/user1pwd" )

j2ee:9hmjfRwNxvJLU

user1:wvQirF86BsjSk

样例 2

#sample group file

staff:j2ee user1

eng:j2ee

样例 3

#sample user/group file (username "j2ee", user password "j2eepwd")

j2ee:9hmjfRwNxvJLU:staff,eng

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

文件验证数据库还支持一种文件格式,适用于基于每个 RFC 2617 的摘要验证。此时将存储一个基于密码和领域的散列,且不维护明文密码。

要为基于摘要验证(基于 digestauth)的目录服务创建 ACL,请执行以下步骤:

  1. 访问 Server Manager 并选择要为其创建或编辑 ACL 的服务器实例。
  2. 选择 Server Manager 的“Preferences”选项卡。
  3. 单击“Restrict Access”链接。
  4. 在“Option”列下,从下拉列表中选择 ACL 文件,然后单击“Edit ACL”。
  5. 在上面框架中的“Access Control Rules”页面中,单击要编辑的 ACL 的“Users/Groups”链接。
  6. 在下面框架中的“User/Group”页面中,从验证数据库下拉列表中选择“digest”。
  7. 单击“Update”。
  8. 当您按照基于 digestauth 的文件验证数据库设置 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";



上一个      目录      索引      下一个     


版权所有 2003 Sun Microsystems, Inc.。保留所有权利。