这些配置参数控制 IBM HTTP Server 的系统授权工具(SAF)功能部件。请使用 SAF 伪指令为 IBM HTTP Server 提供用户认证。
AuthSAF 伪指令设置是否使用操作系统的 SAF 来执行基本认证。
语法 | AuthSaf on | off |
缺省值 | off |
上下文 | directory, .htaccess |
模块 | mod_auth_saf |
值 | on 或 off |
将 AuthSAF 伪指令设置为 on 以使用以下任一 SAF 工具:SAFRunAs、SAFRequire 或 SAF 认证。当您设置 AuthSAF on 时,还应该设置 AuthType Basic。
必须对 valid-user 或用户列表设置 Require 伪指令。
Require valid-user在使用 valid-user 的情况下,如果标识和密码不属于在 SAF 中注册并且具有 OMVS 段的用户,那么服务器将不允许访问。
Require user SYSADM USER152 BABAR
在使用用户列表的情况下,如果标识未经过认证并且不是其中一个列示的用户,那么服务器将不允许访问。不管用户在浏览器中如何输入用户名,您都必须在 httpd.conf 文件中使用大写字母对用户名进行编码。
(可选)可以对组添加 Require 伪指令。
Require group SYS1 WASUSER
在本示例中,组 SYS1 和 WASUSER 都必须在 SAF 中定义,并且必须具有 OMVS 段。如果标识和密码不属于在 SAF 和其中一个列示的组中注册的用户,那么访问将被拒绝。
AuthSAFAuthoritative 伪指令设置是否将授权和认证传递至较低级别的模块。
语法 | AuthSAFAuthoritative on | off |
缺省值 | on |
上下文 | directory, .htaccess |
模块 | mod_auth_saf |
值 | on 或 off |
将 AuthSAFAuthoritative 伪指令设置为 off 以允许在没有与提供的用户标识相匹配的用户标识或规则的情况下,传递认证和授权到较低级别的模块(如 modules.c 文件中所定义的那样)。如果指定了用户标识或规则,那么像平常一样检查密码和访问权,并且会由于失败而导致 Authentication Required 应答。
如果用户标识出现在多个模块的数据库中,或者有效的 Require 伪指令适用于多个模块,那么第一个模块将验证凭证,此时,不管 AuthSAFAuthoritative 设置是什么,都不会传递访问权。
缺省情况下,不会传递控制权,而且将由于用户标识或规则未知而导致 Authentication Required 应答。因此,即使不对该伪指令进行任何设置,也能够保持系统安全并强制符合 NCSA 的行为。
AuthSAFExpiration 伪指令设置在浏览器的提示中显示的值。
语法 | AuthSAFExpiration short_phrase |
缺省值 | off |
上下文 | directory, .htaccess |
模块 | mod_auth_saf |
值 | off 或 short_phrase |
将 AuthSAFExpiration 伪指令设置为短语可以允许 IBM HTTP Server 在用户的 SAF 密码过期时提示更新该密码。如果用户输入有效标识和 SAF 密码,但该密码已过期,那么服务器将返回 Authentication Required 应答并显示特别提示,以允许用户更新过期密码。该提示包含域(来自 AuthName 伪指令的值),后跟来自 AuthSAFExpiration 伪指令的 short_phrase 值。
<Location /js> AuthType Basic AuthName "zwasa051_SAF" AuthSAF on Require valid-user Require group SYS1 WASUSER AuthSAFExpiration "EXPIRED! oldpw/newpw/newpw" </Location>
如果用户尝试访问 URL 以 /js 开头的文件,那么服务器将提示用户输入 SAF 标识和密码。浏览器将显示一个包含该域的提示。域是来自 AuthName 伪指令的值,在本示例中为 zwasa051_SAF。
当用户提供有效标识和密码时,如果密码已过期,那么服务器将重复提示,但这次是值 zwasa051_SAF EXPIRED! oldpw/newpw/newpw。不管提示是什么,用户都必须重新输入已过期的密码,后加斜杠,并输入新密码,后加另一斜杠,然后再次输入新密码。
如果密码成功更新,那么服务器将发送另一 Authentication Required 应答,它带有完全不同的特别提示。为了强制浏览器理解应该对哪个密码进行高速缓存,这一最后交互操作是必需的。此次的提示将包含域,后加提示 Re-enter new password。在本示例中,它将是 zwasa051_SAF Re-enter new password。
在成功更改密码之后,AuthSAFReEnter 伪指令设置追加到域的值。
语法 | AuthSAFReEnter short_phrase |
缺省值 | Re-enter new password |
上下文 | directory, .htaccess |
模块 | mod_auth_saf |
值 | off 或 short_phrase |
将 AuthSAFReEnter 伪指令显式设置为“Re-enter new password”之外的短语可以允许管理员在过期密码已成功更新之后显示替代消息。如果 AuthSAFExpiration 已设置为 off,那么此伪指令无效。
<Location /js> AuthType Basic AuthName "zwasa051_SAF" AuthSAF on Require user SYSADM USER152 BABAR AuthSAFExpiration "EXPIRED! oldpw/newpw/newpw" AuthSAFReEnter "Enter new password one more time"</Location>
在本示例中,在过期密码成功更新之后,服务器将发送另一 Authentication Required 应答,它带有来自 AuthSAFReEnter 伪指令的值。为了强制浏览器理解应该对哪个密码进行高速缓存,这一最后交互操作是必需的。此次的提示将包含域,后加一个特殊短语。在本示例中,它将是 zwasa051_SAF Enter new password one more time。
SAFRequire 伪指令确定 mod_auth_saf 是否将处理 Require 伪指令。
语法 | SAFRequire on | off |
缺省值 | off |
上下文 | directory, .htaccess |
模块 | mod_auth_saf |
值 | on 或 off |
将 SAFRequire 伪指令设置为 on 允许 mod_auth_saf 处理 Require 伪指令中的用户名和组名。如果使用在 SAF 中定义的组,那么必须将该伪指令设置为 on,但是,如果使用在其他位置定义的组,那么应该将该伪指令设置为 off 或者忽略该伪指令。
例如,如果将 AuthGroupFile 伪指令(而不是 SAFRequire 伪指令)编码为 on,那么 mod_auth_saf 可以处理 Require 伪指令。不要同时对两者进行编码。
如果将 SAFRequire 设置为 on,那么将以大写字母列示所有用户名,因为这是 SAF 保存用户名的方式。在浏览器中,用户可以用任意大小写的字母来输入用户名和密码。如果不使用 mod_auth_saf 来处理 Require 伪指令,那么可能需要根据用户在浏览器中输入用户名时使用大小写字母的各种情况,来对每个用户名进行编码。
SAFRunAs 伪指令可以设置将用来处理请求的 SAF 用户标识。
语法 | SAFRunAs 值 |
缺省值 | off |
上下文 | directory, .htaccess |
模块 | mod_auth_saf |
值 | off | %%CLIENT%% | %%CERTIF%% | %%CERTIF_REQ%% | <surrogate
ID> Off:服务器将以 Web 服务器用户标识运行请求。 %%CLIENT%%:服务器将以授权请求头中提供的标识来运行请求。通常,用户在浏览器上的弹出窗口中提供标识和密码,并且浏览器将创建头。 %%CERTIF%%:服务器将以 SAF 中与 SSL 客户机证书相关联的标识来运行请求。如果没有 SSL 证书或者该 SSL 证书尚未与 SAF 中的标识相关联,那么处理将继续,如同 %%CLIENT%% 已被编码。 %%CERTIF_REQ%%:服务器将以 SAF 中与 SSL 客户机证书相关联的标识来运行请求。如果没有 SSL 证书或者该 SSL 证书尚未与 SAF 中的标识相关联,那么服务器将不允许访问。 <surrogate ID>:服务器将以与所指定 SAF 替代标识相关联的标识来运行请求。 对于 %%CERTIF%%、%%CERTIF_REQ%% 和所有其他形式的 SAF 认证或授权,您必须对 Require 伪指令进行编码,然后将 AuthSAF 伪指令设置为 on。 |
IBM HTTP Server 可通过 TCP 套接字或 Unix 套接字来与 FastCGI 应用程序通信。但是,当将 SAFRunAs 用于 FastCGI 请求时,必须将 TCP 套接字用于与应用程序进行的通信。为 FastCGI 应用程序创建的 Unix 套接字仅可通过 Web 服务器用户标识访问。使用 SAFRunAs 伪指令控制的备用用户标识不具有访问 Unix 套接字的许可权,因此请求将失败。
要将 FastCGI 配置为使用 TCP 套接字,请使用带有 -port 选项的 FastCGIServer 伪指令或使用 FastCGIExternalServer 伪指令来对 mod_fastcgi 模块定义 FastCGI 应用程序。不随 FastCGIServer 或 FastCGIExternalServer 配置的动态 FastCGI 服务器不能与 SAFRunAS 配合使用。
如果没有为 FastCGI 请求启用 SAFRunAs,那么 TCP 套接字不是必需的。
<Location /x1> AuthType Basic AuthName x1 Require valid-user SAFRequire On AuthSAF on </Location>
<Location /x2> AuthType Basic AuthName x2 Require user ALICE123 BOB456 CAROL789 SAFRequire On AuthSAF on <IfModule mod_auth.c> # If mod_auth is loaded, ensure that it allows other # modules to authenticate in case mod_auth runs first. AuthAthoritative off </IfModule> </Location>
<Location /x3> AuthType Basic AuthName x3 Require group WASUSER SAFRequire on AuthSAF on </Location>
<Location /x4> AuthType Basic AuthName x4 Require group wasuser # File x4.grp contains this line: wasuser: alice123 ALICE123 guest3 GUEST3 AuthGroupFile /usr/lpp/config/x4.grp AuthBasicProvider saf </Location>