![[z/OS]](../images/ngzos.gif)
SAF ディレクティブ
これらの構成パラメーターは、IBM® HTTP Server の System Authorization Facility (SAF) 機能を制御します。SAF ディレクティブを使用して、 IBM HTTP Server にユーザー認証を提供します。
- AuthSAFAuthoritative ディレクティブ
- AuthSAFExpiration ディレクティブ
- AuthSAFExpiredRedirect ディレクティブ
- AuthSAFReEnter ディレクティブ
- SAFAPPLID ディレクティブ
- SAFRunAs ディレクティブ
- SAFRunAsEarly ディレクティブ
AuthSAFAuthoritative ディレクティブ
前のリリースで、AuthSAFAuthoritative ディレクティブは、下位のモジュールに許可が渡されるかどうかを設定します。 今回のリリースでの Apache HTTP Server API の変更により、AuthSAFAuthoritative は不要になり、使用できなくなりました。
ディレクティブ | 説明 |
---|---|
構文 | AuthSAFAuthoritative on | off |
デフォルト | on |
Context | ディレクトリー、.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」が含まれる場合、16 進数値の「43」を使用してその句をコード化する必要がありますが、これは適切な ASCII 文字に変換されます。
ディレクティブ | 説明 |
---|---|
構文 | AuthSAFExpiration short_phrase |
デフォルト | off |
Context | ディレクトリー、.htaccess |
モジュール | mod_authnz_saf |
値 | off または short_phrase |
AuthSAFExpiration ディレクティブを句に設定すると、SAF パスワードの有効期限が切れている場合に、IBM HTTP Server はパスワードを更新するようにユーザーにプロンプトを出すことができます。ユーザーが 有効な 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 ディレクティブは、z/OS® 上での認証に mod_authnz_saf を使用しているとき、パスワードの有効期限が切れた場合に要求がリダイレクトされる先の URL を指定します。
これは、AuthSAFExpiration の使用に代わる代替手段です。
ディレクティブ | 説明 |
---|---|
構文 | AuthSAFExpiredRedirect url |
デフォルト | off |
Context | ディレクトリー、.htaccess |
モジュール | mod_authnz_saf |
値 | off または url |
AuthSAFReEnter ディレクティブ
AuthSAFReEnter ディレクティブは、正常なパスワード変更の後、 レルムに追加される値を設定します。特殊文字のコード化については、AuthSAFExpiration ディレクティブを参照してください。
ディレクティブ | 説明 |
---|---|
構文 | AuthSAFReEnter short_phrase |
デフォルト | Re-enter new password |
Context | ディレクトリー、.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>
この例では、有効期限が切れたパスワードが正常に更新された後、サーバーは AuthSAFReEnter ディレクティブからの値とともに、別の Authentication Required 応答を送信します。この最後の対話は、キャッシュする必要があるパスワードをブラウザーに 認識させるために必要です。 ここでは、プロンプトはレルムおよびその後に続く 特別な句で構成されています。この例では、 zwasa051_SAF Enter new password one more time となります。
SAFAPPLID ディレクティブ
"SAFRunAs" を使用した構成でオペレーティング・システムの pthread_security_applid_np() サブルーチンに渡されるアプリケーション ID (APPLID) パラメーターをオーバーライドします。
ディレクティブ | 説明 |
---|---|
構文 | SAFAPPLID application-id |
デフォルト | None (一部の OS 構成で、暗黙で "OMVSAPPL" として扱います) |
Context | ディレクトリー、.htaccess |
モジュール | mod_authnz_saf |
値 | application-id |
SAFRunAs ディレクティブが使用されている場合、「APPL」クラスがアクティブな一部のセキュリティー製品の構成では、セキュリティー製品は、認証済みユーザーが「OMVSAPPL」クラスにアクセスできることを確認します。SAFAPPLID が構成されている場合は、指定されたアプリケーション ID が代わりに使用されます。
SAFRunAs ディレクティブ
SAFRunAs ディレクティブは、要求が処理される SAF ユーザー ID を設定します。
ディレクティブ | 説明 |
---|---|
構文 | SAFRunAs value |
デフォルト | off |
Context | ディレクトリー、.htaccess |
モジュール | mod_authnz_saf |
値 | off | %%CLIENT%% | %%CERTIF%% | %%CERTIF_REQ%% | %%CERTIF%% /prefix |
surrogate-username /prefix | <surrogate ID>
|
IBM HTTP Server は、TCP ソケットまたは UNIX ソケットのいずれかを使用して FastCGI アプリケーションと通信ができます。 ただし、FastCGI 要求に対して SAFRunAs を使用している場合は、アプリケーションとの通信には TCP ソケットを使用する必要があります。FastCGI アプリケーション用に作成された UNIX ソケットは、Web サーバーのユーザー ID のみでアクセスできます。SAFRunAs ディレクティブで制御された代替のユーザー ID は、UNIX ソケットにアクセスする権限がないため、要求は失敗します。
FastCGI を構成して TCP ソケットを使用するには、FastCGIServer ディレクティブを -port オプションで使用するか、または FastCGIExternalServer ディレクティブを使用することにより、FastCGI アプリケーションを mod_fastcgi モジュールに定義します。FastCGIServer または FastCGIExternalServer で構成されていない動的 FastCGI サーバーは、SAFRunAs と一緒に使用することができません。
FastCGI 要求の SAFRunAs を使用可能にしない場合、TCP ソケットは必要ありません。

<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 ファイルの要求を、コマンド・ライン引数 /context-root-A/hello.phtml が付いた、/cgi-bin/php-cgi パラメーターが含まれたパスの要求に変えます。<Location /cgi-bin/php-cgi>
SAFRunAS %%CLIENT%%
</Location>
複数の SAFRunAs 設定が必要な場合は、Action ディレクティブを全く設定しないか、 それぞれに異なる 2 番目のパラメーターを設定して複数の Action ディレクティブを作成します。
gotchaSAFRunAsEarly ディレクティブ
SAFRunAsEarly ディレクティブは、何らかのディレクトリーにアクセスする前に SAFRunAs を実行することを可能にします。
ディレクティブ | 説明 |
---|---|
構文 | SAFRunAsEarly on | off |
デフォルト | off |
Context | location |
モジュール | mod_authnz_saf |
値 | on | off |
[Tue Aug 11 14:03:16 2015] [error] [client x.x.x.x] (111)EDC5111I 許可が拒否されました。(errno2=0x5B4B0002):
/saf/privileged/index.html へのアクセスは拒否されました。SAFRunAs が %%CLIENT%% に設定され、SAFRunAsEarly が on に設定されている場合、IHS はディレクトリー/ファイルへのアクセスを試行する前にユーザーを切り替えます。(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.)
SAFRunAs が %%CLIENT%% に設定され、SAFRunAsEarly が on に設定されている場合、 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>