Sun Java System Web Server 7.0 管理员指南

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

您可以通过多种安全服务和机制(包括验证、授权和访问控制)来保护驻留在 Web 服务器上的资源。本章介绍了某些用于控制对 Sun Java System Web Server 7.0 的访问的支持机制。

什么是访问控制

验证是确认身份的过程。授权表示将受限制资源的访问权限授予某个身份,而访问控制机制则强制执行这些限制。许多安全模型(Web 应用程序安全性、htaccess、验证领域等)和服务可以强制执行验证和授权。

通过访问控制可以确定:

您可以控制对整个服务器、部分服务器或您 Web 站点上的文件或目录的访问。您应创建称为访问控制条目 (access control entry, ACE) 的规则分层结构,以允许或拒绝访问。创建的 ACE 的集合称为访问控制列表 (access control list, ACL)。

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

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

访问控制的工作原理

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


注 –

如果有多个匹配的 ACL,服务器将使用最后一个匹配的 ACL 语句。由于 uri ACL 是最后一个匹配的语句,因此 default ACL 将被忽略。


Sun Java System Web Server 7.0

下图描述了访问控制在 Web Server 7.0 中的工作原理。用户代理(客户机)访问 Web Server。Web Server 执行 obj.conf 文件中的 PathCheck 指令。Web Server 向客户机返回 HTTP 401(未授权)错误。客户机提示用户进行验证。如果客户机是浏览器,则会弹出一个登录对话框。用户输入登录信息。Web Server 执行内部的 check-acl 函数。Web Server 验证用户凭证并处理请求。

为用户/组设置访问控制

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

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

用户/组验证由 Web Server 通过读取用户组数据库中的条目来执行。目录服务用来实现访问控制的信息可能来自以下资源之一:

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

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

用户/组验证要求用户验证其自身,然后才能访问服务器或 Web 站点上的文件和目录。借助验证,用户可使用客户机证书并通过输入用户名和密码来验证其身份。只有 SSL 通信才需要客户机证书。

默认验证

默认验证是首选方法。“默认”设置使用 server.xml 文件中的默认方法,或使用“基本”方法(如果 server.xml 中没有设置)。如果选中“默认”,ACL 规则将不会在 ACL 文件中指定方法。选择“默认”后,您便可通过编辑 obj.conf 文件中的一行文本来轻松更改所有 ACL 的方法。

基本验证

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

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


注 –

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


SSL 验证

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

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

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

要求对访问控制进行客户机验证时,需要为 Web 服务器启用 SSL 加密算法。

要成功访问要求进行 SSL 验证的资源,客户机证书必须来自 Web 服务器信任的 CA。如果 Web 服务器的 certmap.conf 文件被配置为将浏览器中的客户机证书与目录服务器中的客户机证书相比较,则需要在目录服务器中发布客户机证书。不过,certmap.conf 文件也可以配置为仅将证书中的选定信息与目录服务器条目进行比较。例如,您可以配置 certmap.conf 文件,使其仅将浏览器证书中的用户 ID 和电子邮件地址与目录服务器条目进行比较。


注 –

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


摘要验证

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

通过摘要验证,用户可以基于用户名和密码进行验证,而不必以明文形式发送用户名和密码。浏览器使用用户的密码和 Web 服务器提供的某些信息,利用 MD5 算法来创建摘要值。

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

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

如果未指定 ACL 方法,当要求进行验证时,服务器将使用摘要验证或基本验证;当不要求进行验证时,服务器将使用基本验证。这是首选方法。

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

ACL 方法 

验证数据库支持摘要验证 

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

"default" 

未指定 

摘要和基本 

基本 

"basic" 

基本 

基本 

"digest" 

摘要 

错误 

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

为主机/IP 设置访问控制

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

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

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

启用 DNS 会降低服务器的性能,因为服务器将被强制执行 DNS 查找。要减少 DNS 查找对服务器性能的影响,请仅解析访问控制和 CGI 的 IP 地址,而不要解析所有请求的 IP 地址。要实现此目的,请将 iponly=1 添加到 obj.conf 文件的 AddLog fn="flex-log" name="access" 中:

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

配置 ACL 用户高速缓存

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

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

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

有关 ACL 文件指令的更多信息,请参见《NSAPI Developer’s Guide》。

设置 ACL 高速缓存属性

要通过 CLI 设置 ACL 高速缓存属性,请执行以下命令:


wadm> set-acl-cache-prop --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1 property=value

请参见 CLI 参考 set-acl-cache-prop(1)

可以设置的有效属性包括:

配置访问控制

服务器通过使用本地存储的访问控制列表 (access control list, ACL) 来支持验证和授权,这些列表用于说明用户对资源所具有的访问权限。例如,ACL 中的一个条目可以授予名为 John 的用户对特定文件夹 misc读取权限。

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

服务器支持的核心 ACL 有三种类型的验证:基本验证、SSL 验证和摘要验证。

要编辑访问控制设置,请执行以下步骤:

  1. 单击配置选项卡并选择相应的配置。

  2. 单击安全性子选项卡 > 访问控制子选项卡。

  3. 单击添加 ACL 按钮添加新的 ACL,或单击现有 ACL 以编辑设置。

添加访问控制列表 (Access Control List, ACL)

下节介绍将新 ACL 添加至配置的过程。

  1. 单击配置选项卡并选择相应的配置。

  2. 单击访问控制子选项卡 > 访问控制列表子选项卡。

  3. 单击新建按钮添加新的 ACL。

配置以下参数:

表 7–2 ACL 参数

参数

说明

资源

命名/URI/路径。选择需要设置访问限制的资源类型,并指定其值。URI 资源示例-"/sales"。路径资源示例-"/usr/sun/server4/docs/cgi-bin/*"。 

验证数据库

验证数据库使您可以选择服务器用于验证用户的数据库。

默认值为 keyfile

验证方法

  1. 基本-使用 HTTP 基本方法从客户机获取验证信息。仅当为服务器启用了 SSL 后,才会通过网络对用户名和密码进行加密。

  2. SSL-使用客户机证书来验证用户。要使用此方法,必须为服务器启用 SSL。启用加密后,可以结合使用“基本”和 "SSL" 方法。

  3. 摘要-使用一种验证机制,使得浏览器能够基于用户名和密码进行验证,而不必以明文形式发送用户名和密码。浏览器使用用户的密码和 Web Server 提供的某些信息,利用 MD5 算法来创建摘要值。请注意,要使用“摘要”,基础 auth-db 也必须支持摘要。这表示要么是使用摘要文件的文件 auth-db 要么是 LDAP auth-db(仅当安装了摘要验证插件的情况下)。

  4. 其他-使用通过访问控制 API 创建的自定义方法。

验证提示

验证提示选项使您可以输入要在验证对话框中显示的消息文本。您可以使用此文本来说明用户需要输入的内容。基于不同的浏览器,用户大约会看到该提示的前 40 个字符。

Web 浏览器通常会高速缓存用户名和密码,并将它们与提示文本关联。当用户访问具有相同提示的服务器的文件和目录时,不必再次输入用户名和密码。如果您希望用户对特定文件和目录再次进行验证,只需更改该资源的 ACL 的提示。 

拒绝的访问响应

指定拒绝对资源的访问时所进行的响应操作。 

1. 响应并显示默认消息-选择该选项可以显示从服务器返回的标准访问拒绝消息。 

2. 响应并显示 URL-选择该选项可以将请求转发至其他任何外部 URL 或错误页面。 


注 –

使用 CLI

要通过 CLI 添加 ACL,请执行以下命令:


wadm> set-acl --user=admin --password-file=admin.pwd 
--host=serverhost --port=8989 --vs=config1_vs_1 --config=config1 
--aclfile=aclfile1

请参见 CLI 参考 set-acl(1)


添加访问控制条目 (Access Control Entry, ACE)

本节介绍为选定的配置添加新访问控制条目 (Access Control Entry, ACE) 的过程。

  1. 单击配置选项卡并选择相应的配置。

  2. 单击访问控制子选项卡 > 访问控制列表子选项卡。

  3. 单击新建按钮。

  4. 单击访问控制条目下的新建按钮。

配置以下 ACE 参数:

表 7–3 ACE 参数

参数

说明

访问

  • 允许表示用户或系统可以访问请求的资源。

  • 拒绝表示用户或系统不能访问该资源。

    服务器将检查整个访问控制表达式 (ACE) 列表以确定访问权限。

用户

1.任意用户-无验证。将访问权限授予每个用户。

2. 验证数据库中的所有用户-将访问权限授予在验证数据库中指定的所有用户。

3. 仅验证数据库中的以下用户-仅允许验证数据库中的选定用户进行访问。

您可以基于通用属性(如名字、姓氏和电子邮件地址)查询验证数据库。 

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

使用该选项可以只允许特定组的访问。 

主机地址

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

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

  • “任意位置”允许所有用户和系统进行访问

  • “仅以下位置”仅允许特定主机名或 IP 地址进行访问

如果选择“仅以下位置”选项,请在“主机名”或“IP 地址”字段中输入通配符模式或逗号分隔的列表。按主机名进行限制比按 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 无效。

权限

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

  • “所有访问权限”是默认设置,将允许或拒绝所有权限

  • “仅以下权限”使您可以选择要允许或拒绝的权限组合:

    • 读取允许用户查看文件,其中包括 HTTP 方法 GET、HEAD、POST 和 INDEX

    • 写入允许用户更改或删除文件,其中包括 HTTP 方法 PUT、DELETE、MKDIR、RMDIR 和 MOVE。要删除文件,用户必须同时具有写入权限和删除权限

    • 执行使用户可以执行服务器端应用程序,例如 CGI 程序、Java applet 和代理

    • 删除允许同时具有写入权限的用户删除文件或目录

    • 列表使用户可以访问不包含 index.html 文件的目录中的文件列表。

    • 信息使用户可以接收有关 URI 的信息,例如 http_head

继续

服务器将检查整个访问控制表达式 (access control expression, ACE) 列表以确定访问权限。例如,第一个 ACE 通常为拒绝每个用户。如果将第一个 ACE 设置为“继续”,服务器将检查列表中的第二个 ACE,如果该 ACE 匹配,则使用下一个 ACE。 

如果选中“继续”,则会拒绝所有用户访问该资源。服务器将继续检查列表,直至找到某个不匹配的 ACE,或匹配但未被设置为“继续”的 ACE。最后一个匹配的 ACE 将确定是否允许访问。

使用 .htaccess 文件

服务器支持 .htaccess 动态配置文件。您可以通过用户界面或手动更改配置文件来启用 .htaccess 文件。

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

如果启用 .htaccess 文件,服务器将在提供资源之前检查 .htaccess 文件。服务器在与资源相同的目录及其父目录,直到包含文档根目录的目录中查找 .htaccess 文件。例如,如果主文档目录设置为 /sun/server/docs,并且客户机请求 /sun/server/docs/reports/index.html,则服务器将在 /sun/server/docs/reports/.htaccess 和 /sun/server/docs/.htaccess 中检查 .htaccess 文件。

请注意,服务器的附加文档目录和 CGI 目录功能使管理员可以定义替代的文档根目录。替代的文档根目录的存在会影响 .htaccess 文件的处理。例如,假定服务器的主文档目录设置为 /sun/server/docs,并且 CGI 程序位于 /sun/server/docs/cgi-bin/program.cgi。如果启用 CGI 作为文件类型,则当客户机发出对 CGI 程序的请求时,服务器对 /sun/server/docs/.htaccess 和 /sun/server/docs/cgi-bin/.htaccess 的内容都要进行评估。但是,如果您选择在 /sun/server/docs/cgi-bin 配置 CGI 目录,服务器将只检查 /sun/server/docs/cgi-bin/.htaccess,而不检查 /sun/server/docs/.htaccess。出现这种情况的原因是:将 /sun/server/docs/cgi-bin 指定为 CGI 目录便将其标记为替代的文档根目录。

防止服务器遭受拒绝服务攻击

拒绝服务 (Denial-of-Service, DoS) 攻击是服务器的某些恶意用户发起的一种显式攻击,企图阻止合法用户使用服务。此类攻击可通过以下方式发起:

Sun Java System Web Server 可以通过监视经常访问的 URI 和拒绝的请求(如果请求频率相当高)来检测 DoS 攻击。

以下部分介绍了如何在虚拟服务器级别防止 DoS 攻击。

限制对服务器的请求

现在,您可以通过配置请求限制并监视每个虚拟服务器的最大连接数来调整服务器,以防止拒绝服务攻击。配置其中某些值可能会影响服务器的性能。

要配置服务器的请求限制,请单击配置 > 虚拟服务器 > 服务器设置 > 请求限制,然后配置下表中所列的参数。

表 7–4 配置请求限制

参数

说明

请求限制

为此虚拟服务器启用/禁用请求限制。默认情况下,将会禁用“请求限制”选项。 

最大连接数

此虚拟服务器允许的最大并行连接数。 

RPS 最大值

每秒钟允许的来自客户机的最大请求数。 

RPS 计算间隔

计算每秒请求数 (request per second, RPS) 平均值的时间间隔。默认值为 30 秒。 

继续条件

确定要使阻塞的请求类型再次可用于服务所必须满足的条件。 

静音-被拒绝的请求数必须降低为零(在后续间隔中),才可继续服务。

阈值-被拒绝的请求比率必须降低到 RPS 阈值之下,才可继续服务。

默认值为阈值。 

错误代码

要用于阻塞的请求的 HTTP 状态代码。默认代码为“HTTP 503-服务不可用”。 

监视属性

要监视的可选请求属性。 


注 –

使用 CLI

要通过 CLI 限制对服务器的请求,请执行以下命令:


wadm> enable-request-limits --user=admin --password-file=admin.pwd 
--host=serverhost --port=8989 --config=config1 --vs=config1_vs_1

请参见 CLI 参考 enable-request-limits(1)

Procedure限制最大连接数

您可以限制最大并行连接数。如果在处理的请求数至少为指定请求数时收到一个匹配的请求,将拒绝该请求。请注意,拒绝请求仅适用于该特定时间。一旦并行请求数小于此限制,便会立即处理新请求。

  1. 单击“配置”选项卡。

  2. 从列表中选择配置。

  3. 在“虚拟服务器”选项卡下选择虚拟服务器。

  4. 单击“服务器设置”>“请求限制”。

  5. 在“最大连接数”部分中输入值。