認証と認可
Apacheのアクセス制御では、Basic認証の入口、資格情報を検証する認証プロバイダー、アクセスを許可する認可条件を分けて考える。
認証と認可の違い
Section titled “認証と認可の違い”認証は、ユーザー名とパスワードなどを使って「誰であるか」を確認する処理である。認可は、確認されたユーザーに対象リソースへのアクセスを許可するか判断する処理である。
credentials -> authentication -> authenticated user -> authorization -> allow or denyApacheでは、AuthBasicProviderで認証プロバイダーを選び、Requireで認可条件を指定する。
HTTP Basic認証
Section titled “HTTP Basic認証”mod_auth_basicは、HTTP Basic認証のchallengeと資格情報の受け取りを処理し、AuthBasicProviderで選ばれた認証プロバイダーへ検証を依頼する。モジュール一覧ではauth_basic_moduleと表示される。
未認証のクライアントへ401 UnauthorizedとWWW-Authenticateヘッダーを返すと、クライアントはユーザー名とパスワードをAuthorizationヘッダーに入れて再送する。
Basic認証の資格情報はBase64で表現されるだけであり、暗号化されない。クライアントとApacheの間はHTTPSで保護する。HTTPSの処理はHTTPSとTLSを参照する。
AuthType
Section titled “AuthType”AuthTypeは、クライアントとの間で使うHTTP認証方式を選ぶ。
AuthType BasicBasicはHTTP Basic認証を意味する。認証先がPAMかLDAPかはAuthTypeではなくAuthBasicProviderが決める。
AuthName
Section titled “AuthName”AuthNameは認証領域の名前であり、Basic認証のrealmとしてクライアントへ通知される。
AuthName "Private Area"ブラウザーはrealmを認証ダイアログに表示したり、同じ認証情報を再利用する範囲の識別に使ったりする。
AuthBasicProvider
Section titled “AuthBasicProvider”AuthBasicProviderは、Basic認証で受け取ったユーザー名とパスワードをどの認証プロバイダーで検証するか指定する。
AuthBasicProvider PAMPAMはmod_authnz_pamが提供するPAM認証プロバイダーである。
AuthBasicProvider ldapldapはmod_authnz_ldapが提供するLDAP認証プロバイダーである。LDAP固有の検索・BindはLDAP認証の仕組みを参照する。
Require
Section titled “Require”Requireは認可条件を指定する。
Require valid-uservalid-userは、設定された認証プロバイダーで認証に成功したすべてのユーザーを許可する。認証プロバイダーの設定だけではアクセス許可条件は完成せず、Requireが最終的な認可判断を表す。
Requireの認可処理の中核はmod_authz_coreが提供し、valid-userとuserという認可プロバイダーはmod_authz_userが提供する。モジュール一覧ではそれぞれauthz_core_moduleとauthz_user_moduleと表示される。
Require all granted、Require local、設定セクションとの関係はVirtualHostと設定セクションを参照する。
PAM認証の経路
Section titled “PAM認証の経路”flowchart LR C["Web client"] -->|"HTTPS request + Basic credentials"| A["Apache HTTP Server"] A -->|"PAM authenticate / account"| P["PAM service"] P -->|"Backend-specific authentication"| B["Configured PAM backend"] B -->|"Success or failure"| P P -->|"PAM result"| A A -->|"HTTP 200 or 401"| C
mod_authnz_pamはApacheとPAMの接続部分を担当する。PAMの先でローカル認証、SSSD、LDAPなどのどの認証先を使うかは、PAMサービスの設定で決まる。
AuthPAMService
Section titled “AuthPAMService”AuthPAMServiceは、Apacheが呼び出すPAMサービス名を指定する。
AuthPAMService apache2この指定では、PAMは/etc/pam.d/apache2に定義されたスタックを使用する。
Debianの共通PAMスタックを使う場合、@include common-authはユーザーの認証処理、@include common-accountはアカウントの有効期限や利用可否の確認を呼び出す。共通スタックがローカルユーザー、LDAP、SSSDなどのどの認証先を使うかは、DebianのPAM設定によって決まる。
Basic認証プロバイダーとしてmod_authnz_pamを使う場合は、PAMのauthとaccountの両処理が実行される。authは資格情報を検証し、accountは期限切れやアクセス制限などを確認する。
同じPAMサービスをRequire pam-account apache2でも指定すると、account処理が二重に実行される。Basic認証でPAMを使い、認証成功者を許可する構成ではRequire valid-userを使う。
PAMの処理グループはNSSとPAMによるLinuxログインを参照する。
pwauthを使う経路
Section titled “pwauthを使う経路”PAMへ接続する別の方法として、mod_authnz_externalから外部プログラムのpwauthを実行する構成がある。この場合はApacheがpwauthへユーザー名とパスワードを渡し、pwauthがPAMを呼び出す。
Debianのpwauthパッケージは/etc/pam.d/pwauthを提供する。mod_authnz_pamがPAMを直接呼び出す構成とは、ApacheとPAMの間の接続方法と使用するPAMサービス名が異なる。
LDAP認証の経路
Section titled “LDAP認証の経路”flowchart LR C["Web client"] -->|"HTTPS request + Basic credentials"| A["Apache HTTP Server"] A -->|"LDAP search"| L["LDAP server"] L -->|"Unique user DN"| A A -->|"LDAP user bind"| L L -->|"Bind success or failure"| A A -->|"HTTP 200 or 401"| C
LDAP認証では、Apacheがユーザー名を検索し、見つかったユーザーDNと入力されたパスワードでBindする。検索条件、TLS、検索用アカウントなどはLDAP認証の仕組みで説明する。
認証設定を置く範囲
Section titled “認証設定を置く範囲”静的コンテンツを保護する場合は、ファイルシステム上の対象を<Directory>で指定する。URL空間を対象にする場合は<Location>を使う。
両者の違いと設定の統合はVirtualHostと設定セクションを参照する。
-
Authentication and Authorization Apacheの認証と認可の構成。
-
mod_auth_basic HTTP Basic認証と認証プロバイダー。
-
mod_authz_user
Require userとRequire valid-userによるユーザー認可。 -
mod_authnz_pam PAM認可とBasic認証用PAMプロバイダー。
-
Debian pwauth
mod_authnz_externalからPAM認証を行う外部認証プログラム。