プラグイン可能な認証モジュール（PAM）

はじめに

第33章はじめに

プラグイン可能な認証モジュール（Pluggable Authentication Modules：PAM）は、ユーザーとアプリケーションを適切に識別し認証するための、統一されたメカニズムを提供します。条件付きルールを適用してパーミッションの範囲を制限し、成功または失敗した場合の対処方法を制御します。PAMはLDAPと連携して、ネットワーク全体の認証を集中化することもできます。


学習目標
この章の終わりまでに、次のことができるようになります。

PAMの使用を動機付ける基本概念を説明できます。
認証プロセスに関係するステップをリストできます。
PAM構成ファイルの使用と変更ができます。
PAMルールの解釈と、新しいルールを作成する方法を知ることができます。
LDAPを適用した、ネットワーク上の分散ディレクトリ サービスの使用と管理ができます。


PAM

PAM：認証のための統一されたアプローチ
従来、ユーザーの認証は個々のアプリケーションが個別に実行していました。つまり、su, login, sshは、それぞれ独立してユーザー アカウントを認証して成立させていました。

最新のLinuxアプリケーションのほとんどは、PAMを活用するように記述または書き直されており、libpamを使用して一様な方法で認証を行うことができます。

このモジュールのライブラリは、認証、パスワード、セッション、アカウント サービスに関して、非常に高い柔軟性と一貫性を提供します。

PAMには次のコンポーネントが組み込まれています。

PAM対応アプリケーション
/etc/pam.d/内の構成ファイル
libpam*ライブラリのPAM モジュール。Linuxディストリビューションに応じて異なる場所にあります。

各PAM対応アプリケーションまたはサービスは、/etc/pam.d内のそれぞれの構成ファイルによってPAMに関する設定ができます。


認証と構成ファイル
認証にはいくつかの手順が含まれています。

まず、ユーザーは、login、ssh、suなどのPAM対応アプリケーションを呼び出します。
アプリケーションはlibpamを呼び出します。
libpamライブラリは、/etc/pam.d内のファイルをチェックします。これらにはsystem-authを含め、どのPAMモジュールを呼び出すかが設定されています。
参照される各モジュールは、そのアプリケーションに関連する構成ファイルのルールに従って実行されます。

/etc/pam.dの各ファイルはサービスに対応しており、ファイル内の各（コメント化されていない）行は認証に関するルールを指定します。ルールは、スペースで区切られたトークンのリストとして設定されます。最初の2つのトークンは大文字と小文字が区別されません。

type control module-path module-arguments

以下は例です。このスクリーンショットは、RHELシステムの/etc/pam.d/suの内容を示しています。

PAM構成ファイル

これはスタックであることに注意してください。suにはsystem-authなどをロードする必要があります。


PAMルール
PAMモジュールのtypeには、モジュールを関連付けた管理グループを指定します。

auth：ユーザーに識別情報（ユーザー名、パスワードなど）を要求するようにアプリケーションに指示します。そして認証情報を認定し、権限を付与します。
account：パスワードの有効期限、アクセス制御など、ユーザーのアカウントの状況を確認します。
password：ユーザー認証トークンの更新を行うために必要なものです。通常はパスワードです。
session：セッションが確立される前後に行われる機能を提供するために使用されます（環境のセットアップ、ログの記録など）。

controlフラグは、モジュールの成功または失敗を認証プロセス全体がどう対処するのかを制御します。

required：サービスに権限を付与するためには、許可されたモジュールが "success"（成功）を返す必要があります。そのモジュールがスタックの一部である場合、他のすべてのモジュールは引き続き実行されます。どのモジュールが失敗したかは、アプリケーションに通知されません。
requisite：いずれかのモジュールがエラーで失敗すると，スタック内のほかのモジュールはそれ以上実行されず、戻り値がアプリケーションに送信されます。それ以外はrequiredと同じです。
optional：モジュールは要求されません。そのモジュールがサービスに関連付けられた唯一のモジュールである場合、その戻り値が失敗の原因になる可能性があります。
sufficient：このモジュールが成功すると、スタック内の後続のモジュールは実行されません。失敗した場合、スタック内の唯一のものでない限り、必ずしもスタックが失敗するわけではありません。

includeやsubstackなど、他にも制御フラグがあります。詳細については、man pam.dを参照してください。

module-pathは、絶対パスまたは相対パスの形式で/lib */securityにあるライブラリのファイル名を指定します。

module-argumentsで、PAMモジュールの動作を変更できます。


LDAP認証
LDAP（Lightweight Directory Access Protocol）は、ネットワーク上で分散ディレクトリ サービスを使用および管理するための業界標準プロトコルであり、オープンでベンダーに中立なものです。

集中型の認証にLDAPを使用する場合、各システム（またはクライアント）は、ユーザー認証のために集中型のLDAPサーバーに接続します。TLSは、安全性を高めるオプションになるため、使用をお勧めします。

LDAPはPAMとsystem-config-authenticationまたはauthconfig-tuiを使用します。サーバー、検索のベースDN（domain name）、 TLS（Transport Layer Security）を指定する必要があります。また、openldap-clients、pam ldap、nss-pam-ldapdも必要です。

LDAP認証用にシステムを構成すると、5つのファイルが変更されます。

/etc/openldap/ldap.conf
/etc/pam_ldap.conf
/etc/nslcd.conf
/etc/sssd/sssd.conf
/etc/nsswitch.conf

これらのファイルの編集には、手動、ユーティリティ プログラム（system-config-authentication、または authconfig-tui）を使用できます。


知識チェック

「第33章 - プラグイン可能な認証モジュール（PAM）」を完遂しました。おめでとうございます。このクイズに答えて、これまでに学んだ概念の理解度をチェックしてください。

クイズ開始

問題 33.1
controlフラグのrequiredとrequisiteの違いは、requisiteフラグの方が制御がより緩やかであることです。スタックで必須として設定されているモジュールが失敗した場合でも、他のすべてのモジュールは実行されます。True or False?

A. True
B. False

問題 33.2
モジュールが成功した場合、controlフラグのoptionalとsufficientの違いは、optionalのモジュールの成功はスタック上の他のモジュールの実行を妨げませんが、sufficientのモジュールの成功は他のモジュールの実行を妨げるということです。True or False?

A. True
B. False

