![[z/OS]](../images/ngzos.gif)
SAF 指引
這些配置參數可控制 IBM® HTTP Server 的「系統授權機能 (SAF)」特性。SAF 指引可用來為 IBM HTTP Server 提供使用者鑑別。
- AuthSAFAuthoritative 指引
- AuthSAFExpiration 指引
- AuthSAFExpiredRedirect 指引
- AuthSAFReEnter 指引
- SAFAPPLID 指引
- SAFRunAs 指引
- SAFRunAsEarly 指引
AuthSAFAuthoritative 指引
在舊版中,AuthSAFAuthoritative 指引可設定是否將授權傳遞至較低層次模組。由於此版本中的 Apache HTTP Server API 有所變更,不再需要或接受 AuthSAFAuthoritative。
指引 | 說明 |
---|---|
語法 | AuthSAFAuthoritative on | off |
預設值 | on |
環境定義 | 目錄、.htaccess |
模組 | mod_authnz_saf |
值 | on | off |
在舊版中,AuthSAFAuthoritative 指引可設定是否將授權傳遞至較低層次模組。由於此版本中的 Apache HTTP Server API 有所變更,不再需要或接受 AuthSAFAuthoritative。
如果在舊版中使用,則應該從配置中移除。
AuthSAFExpiration 指引
AuthSAFExpiration 指引可設定瀏覽器提示中顯示的值。伺服器會傳送為 AuthName 指引指定的值,以及 HTTP 回應標頭中的這個短語,然後瀏覽器會在密碼提示視窗中對使用者顯示這些內容。短語的字元限制,與為 AuthName 指引指定的值相同。因此,如果要在密碼提示視窗中顯示特殊字元,伺服器必須將特殊字元從 EBCDIC CharsetSourceEnc 字碼頁轉換成 ASCII CharsetDefault 字碼頁。例如,若您想要顯示含有變音符號的小寫 'a',而 httpd.conf 檔案包含德文 EBCDIC 字碼頁 "CharsetSourceEnc IBM-1141" 和 ASCII 字碼頁 "CharsetDefault ISO08859-1",則您必須使用十六進位值 '43' 來編寫短語,才能轉換成正確的 ASCII 字元。
指引 | 說明 |
---|---|
語法 | AuthSAFExpiration short_phrase |
預設值 | off |
環境定義 | 目錄、.htaccess |
模組 | mod_authnz_saf |
值 | off 或 short_phrase |
將 AuthSAFExpiration 指引設為短語,可讓 IBM HTTP Server 提示使用者在其 SAF 密碼到期時進行更新。當使用者輸入有效的 ID 和 SAF 密碼,但密碼過期時,伺服器會傳回 Authentication Required 回覆和特殊的提示,以供使用者更新到期的密碼。該提示含有領域(AuthName 指引產生的值),後面接著 AuthSAFExpiration 指引產生的 short_phrase 值。
<Location /js>
AuthType basic
AuthName "zwasa051_SAF"
AuthBasicProvider saf
Require valid-user
Require saf-group SYS1 WASUSER
AuthSAFExpiration "EXPIRED! oldpw/newpw/newpw"
</Location>
如果使用者嘗試存取 URL 以 /js 開頭的檔案,伺服器會提示輸入 SAF ID 和密碼。瀏覽器會顯示含有領域的提示。該領域是 AuthName 指引所產生的值,在此範例中為 zwasa051_SAF。
當使用者提供有效的 ID 和密碼,如果密碼已過期,則伺服器會重複提示,但這次會包含 zwasa051_SAF EXPIRED! oldpw/newpw/newpw 值。無論提示為何,使用者都必須重新輸入到期的密碼,後面接一條斜線、輸入新密碼、再接一條斜線,然後再一次輸入新密碼。
如果密碼更新成功,伺服器就會傳送另一個 Authentication Required 回覆,以及不同的特殊提示。必須要有這個最後的互動,才能強制瀏覽器瞭解應快取哪個密碼。這次的提示會包含領域,後面接 Re-enter new password 提示。在此範例中,就是 zwasa051_SAF Re-enter new password。
AuthSAFExpiredRedirect 指引
AuthSAFExpiredRedirect 指引可指定 URL,當您使用 mod_authnz_saf 在 z/OS® 上進行鑑別時,如果您的密碼已過期,就會將要求重新導向至該 URL。
這是使用 AuthSAFExpiration 的替代方案。
指引 | 說明 |
---|---|
語法 | AuthSAFExpiredRedirect url |
預設值 | off |
環境定義 | 目錄、.htaccess |
模組 | mod_authnz_saf |
值 | off 或 url |
AuthSAFReEnter 指引
AuthSAFReEnter 指引可設定在密碼變更成功之後,附加在領域後面的值。如需編寫特殊字元的相關資訊,請參閱 BAuthSAFExpiration 指引。
指引 | 說明 |
---|---|
語法 | AuthSAFReEnter short_phrase |
預設值 | Re-enter new password |
環境定義 | 目錄、.htaccess |
模組 | mod_authnz_saf |
值 | off 或 short_phrase |
將 AuthSAFReEnter 指引明確地設為 "Re-enter new password" 以外的短語,可讓管理者在成功更新到期的密碼之後,顯示替代的訊息。如果 AuthSAFExpiration 已設為 off,則此指引沒有作用。
<Location /js>
AuthType basic
AuthName "zwasa051_SAF"
AuthBasicProvider saf
Require saf-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。
SAFAPPLID 指引
將傳遞至配置下之作業系統 pthread_security_applid_np() 子常式的應用程式 ID (APPLID) 參數,置換成 "SAFRunAs"。
指引 | 說明 |
---|---|
語法 | SAFAPPLID application-id |
預設值 | None(某些作業系統配置會隱含地將其視為 "OMVSAPPL") |
環境定義 | 目錄、.htaccess |
模組 | mod_authnz_saf |
值 | application-id |
使用 SAFRunAs 指引時,在 "APPL" 類別為作用中的某些安全產品配置之下,安全產品會驗證所鑑別的使用者可存取 "OMVSAPPL" 類別。如果是配置 SAFAPPLID,則會改用指定的應用程式 ID。
SAFRunAs 指引
SAFRunAs 指引可設定要用來處理要求的 SAF 使用者 ID。
指引 | 說明 |
---|---|
語法 | SAFRunAs value |
預設值 | off |
環境定義 | 目錄、.htaccess |
模組 | mod_authnz_saf |
值 | off | %%CLIENT%% | %%CERTIF%% | %%CERTIF_REQ%% | %%CERTIF%% /prefix |
surrogate-username /prefix | <surrogate ID>
|
IBM HTTP Server 可以使用 TCP Socket 或 UNIX Socket 來與 FastCGI 應用程式通訊。不過,使用 SAFRunAs 來處理 FastCGI 要求時,您必須使用 TCP Socket 來與應用程式通訊。只有 Web 伺服器使用者 ID 可以存取為 FastCGI 應用程式建立的 UNIX Socket。以 SAFRunAs 指引來控制的替代使用者 ID 沒有存取 UNIX Socket 的權限,因此要求會失敗。
如果要配置 FastCGI 來使用 TCP Socket,請使用 FastCGIServer 指引搭配 -port 選項,或使用 FastCGIExternalServer 指引,將 FastCGI 應用程式定義至 mod_fastcgi 模組。未以 FastCGIServer 或 FastCGIExternalServer 來配置的動態 FastCGI 伺服器,不能用於 SAFRunAs。
如果沒有啟用 SAFRunAs 來處理 FastCGI 要求,則不需要 TCP Socket。

<Location /context-root-A/>
SAFRunAS %%CLIENT%%
</Location>
含有 /context-root-A/* 參數的路徑要求會以遠端使用者身份執行。# Process *.phtml with the "php-script" handler.
AddHandler php-script .phtml
# Define the "php-script" handler as an existing CGI.
Action php-script /cgi-bin/php-cgi
Action 指引會將 /context-root-A/hello.phtml 檔的要求,轉換成含有 /cgi-bin/php-cgi 參數的路徑要求,且該參數具有指令行引數 /context-root-A/hello.phtml。<Location /cgi-bin/php-cgi>
SAFRunAS %%CLIENT%%
</Location>
如果您需要多項 SAFRunAS 設定,請放棄整個 Action 指引,或建立多個含有不同的第二個參數的 Action 指引。
gotchaSAFRunAsEarly 指引
SAFRunAsEarly 指引容許在存取任何目錄之前執行 SAFRunAs。
指引 | 說明 |
---|---|
語法 | SAFRunAsEarly on | off |
預設值 | off |
環境定義 | 位置 |
模組 | mod_authnz_saf |
值 | on | off |
[Tue Aug 11 14:03:16 2015] [error] [client x.x.x.x] (111)EDC5111I Permission denied. (errno2=0x5B4B0002):
access to /saf/privileged/index.html deniedIf SAFRunAsEarly is set to on with SAFRunAs set to %%CLIENT%%, IHS will switch
user before any directory/file access are attempted.
如果 SAFRunAsEarly 設為 on 且 SAFRunAs 設為 %%CLIENT%%,IHS 會在試圖存取任何目錄/檔案之前切換使用者。
SAFRunAsEarly 必須在 <Location> 環境定義或廣域環境定義中使用。 無法在 <Directory> 環境定義中使用。
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authnz_saf_module modules/mod_authnz_saf.so
LoadModule authz_default_module modules/mod_authz_default.so
...
<Location /saf_protected>
AuthType basic
AuthName x1
AuthBasicProvider saf
# Code "Require valid-user" if you want any valid
# SAF user to be able to access the resource.
Require valid-user
#
# Alternately, you can provide a list of specific SAF users
# who may access the resource.
# Require saf-user USER84 USER85
#
# Alternatively, you can provide a list of specific SAF groups
# whose members may access the resource.
# Require saf-group WASGRP1 WASGRP2
</Location>
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authnz_saf_module modules/mod_authnz_saf.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_default_module modules/mod_authz_default.so
...
<Location /saf_password>
AuthType basic
AuthName "SAF auth with hfs groupfile"
AuthBasicProvider saf
AuthGroupFile /www/config/foo.grp
# Code "Require file-group" and a list of groups if you want
# a user in any of the groups in the specified group file to be able
# to access the resource.
# Note: Any authorization module, with its standard configuration, can be used here.
Require group admin1 admin2
</Location>
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authnz_saf_module modules/mod_authnz_saf.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_default_module modules/mod_authz_default.so
...
<Location /either_group>
AuthType basic
AuthName "SAF auth with SAF groups and hfs groupfile"
AuthBasicProvider saf
AuthGroupFile /www/groupfiles/foo.grp
Require saf-group WASGRP
Require saf-group ADMINS
</Location>
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authnz_saf_module modules/mod_authnz_saf.so
LoadModule authz_default_module modules/mod_authz_default.so
...
<Location /runas_admin_bin>
AuthName "SAF RunAs client"
AuthType basic
Require valid-user
AuthBasicProvider saf
SAFRunAs %%CLIENT%%
</Location>
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authnz_saf_module modules/mod_authnz_saf.so
LoadModule authz_default_module modules/mod_authz_default.so
...
<Location /custom_password_change>
AuthType basic
AuthName "Support expired PW"
Require valid-user
AuthBasicProvider saf
AuthSAFEXpiration "EXPIRED PW: oldpw/newpw/newpw"
AuthSAFReEnter "New PW again:"
</Location>
如果您想要要求使用者有用戶端憑證,才能存取資源,請使用 mod_ibm_ssl 指引。此配置不需要 mod_authnz_saf 指引。如需相關資訊,請參閱 SSLClientAuth 和 SSLClientAuthRequire 指引的說明文件。
LoadModule authnz_saf_module modules/mod_authnz_saf.so
LoadModule ibm_ssl_module modules/mod_ibm_ssl.so
...
<Location /certificate_required>
SAFRunAs %%CERTIF_REQ%%
</Location>
<Location /certificate_or_basic>
AuthName "SAF RunAs certif"
AuthType basic
Require saf-user USER84 USER103
AuthBasicProvider saf
SAFRunAs %%CERTIF%%
</Location>
<Location /runas_public>
SAFRunAs PUBLIC
# This can be combined with SAF or non-SAF authentication/authorization
</Location>