PAMを使用した認証
- 概要
この記事では、PAMのコンセプト、PAM設定の構造、およびPAMを設定するツールの使用法について説明します。
- 目的
PAMモジュールを設定し、U2Fキーを使用するようにシステムを設定する方法を理解する必要があります。
- 所要時間
この記事の理解には20分ほどを要します。
- 要件
U2Fキーを使用して認証を設定するには、YubiKeyまたはセキュリティキーのいずれかが必要です。
1 PAMの概要 #
通常、システム管理者とプログラマは、システムの一定部分へのアクセスを制限することや、アプリケーションの一定の機能の使用を制限することを望みます。PAMを使用しなければ、新規の認証メカニズム(LDAPやSamba、Kerberosなど)が導入されるたびにアプリケーションを調整する必要があります。ただし、このプロセスは時間がかかり、エラーが発生しやすくなります。このような難点を回避する方法の1つは、アプリケーションを認証メカニズムから分離し、認証は集中管理されるモジュールに任せることです。新しい認証方式が必要になった場合は、問題のプログラムで使用できるように適切なPAMモジュールを調整または記述するだけで済みます。
PAMのコンセプトは以下で構成されます。
「PAMモジュール」。特定の認証メカニズム用の共有ライブラリのセットです。
「モジュールスタック」。1つ以上のPAMモジュールで構成されます。
PAM対応「サービス」。モジュールスタックまたはPAMモジュールを使用して認証する必要があります。通常、サービスは、
login
やsu
のように、対応するアプリケーションのよく知られた名前になっています。サービス名other
は、デフォルトルール用の予約語です。「モジュール引数」。これを使用して、1つのPAMモジュールの実行に影響を与えることができます。
1つのPAMモジュールの実行「結果」それぞれを評価するメカニズム。正の値は、次のPAMモジュールを実行します。負の値を処理する方法は、設定に応じて異なります。「no influence, proceed (影響なし、続行)」から「terminate immediately (直ちに終了)」までの任意のオプションが有効です。
2 PAM設定の構造 #
SLE MicroのPAMには、いわゆるディレクトリベースの設定が付属しています。設定ファイルのセットは/etc/pam.d
に保存されます。PAMのメカニズムに依存するすべてのサービス(またはプログラム)には、専用の設定ファイルがこのディレクトリにあります。たとえば、sshd
用のサービスは/etc/pam.d/sshd
ファイルにあります。
/etc/pam.conf
)は使用されない
各サービスの設定を/etc/pam.conf
に保存することもできます。ただし、保守と使いやすさの理由から、この設定スキームはSLE Microでは使用されません。
/etc/pam.d/
の下層にあるファイルでは、認証に使用するPAMモジュールが定義されます。各ファイルはサービスを定義する行で構成され、各行は最大で4つの要素で構成されます。
TYPE CONTROL MODULE_PATH MODULE_ARGS
各要素には次のような意味があります。
- TYPE
サービスのタイプを宣言します。PAMモジュールはスタックとして処理されます。モジュールのタイプによって目的が異なります。たとえば、あるモジュールはパスワードをチェックし、他のモジュールはシステムがアクセスされた場所を検証し、また別のモジュールはユーザ固有の設定を読み込みます。PAMは、次の4タイプのモジュールを認識します。
-
auth
パスワードを問い合わせる従来の方法で、ユーザの真正性を確認します。ただし、これはチップカードや生体認証(たとえば指紋や虹彩スキャン)によっても実行できます。
-
account
このタイプのモジュールは、ユーザがリクエストしたサービスを使用するための一般許可を付与されているかどうかをチェックします。たとえば、失効したアカウントのユーザ名では誰もログインできないようにするには、この種のチェックを実行する必要があります。
-
password
このタイプのモジュールの目的は、認証トークンを変更可能にすることです。通常、これはパスワードです。
-
session
このタイプのモジュールは、ユーザセッションの管理と設定を受け持ちます。認証の前後に起動し、ログイン試行をログに記録して、ユーザ固有の環境を設定します。
-
- CONTROL
PAMモジュールの動作を指定します。各モジュールには次の制御フラグを設定できます。
-
required
このフラグが付いているモジュールは、認証を進める前に正常に処理される必要があります。
required
フラグが付いたモジュールが失敗すると、同じフラグが付いた他のモジュールがすべて処理されてから、認証の失敗に関するメッセージがユーザに返されます。-
requisite
このフラグが付いているモジュールも、
required
フラグが付いている場合とほぼ同様に、正常に処理される必要があります。ただし、このフラグが付いたモジュールが失敗した場合は、ユーザに即座にフィードバックが送られ、他のモジュールは処理されません。成功すると、required
フラグが付いているモジュールの場合と同様に、続いて他のモジュールが処理されます。requisite
フラグは、正しい認証に不可欠な一定条件の有無を確認するための基本フィルタとして使用できます。-
sufficient
このフラグが付いたモジュールが正常に処理されると、呼び出し元アプリケーションは即時に成功メッセージを受け取り、前に
required
フラグが付いたモジュールが失敗していなければ、他のモジュールは処理されません。sufficient
フラグが付いたモジュールが失敗しても、直接的な結果は発生せず、以降のモジュールはそれぞれの順序で処理されます。-
optional
このフラグが付いたモジュールが成功しても失敗しても、直接的な影響はありません。このフラグは、それ以上はアクションを実行しない、メッセージ表示(ユーザへのメール着信通知など)専用のモジュールに便利です。
-
include
このフラグが設定された場合、引数として指定されたファイルがこの場所に挿入されます。
-
- MODULE_PATH
PAMモジュールの完全なファイル名が含まれます。モジュールがデフォルトのディレクトリ
/lib/security
にある場合は、明示的に指定する必要はありません(SLE Microがサポートするすべての64ビットプラットフォームでは、このディレクトリは/lib64/security
です)。- MODULE_ARGS
debug
(デバッグの有効化)やnullok
(空のパスワードの使用を許可)など、PAMモジュールの動作に影響を与えるオプションのスペース区切りリストが含まれます。
さらに、/etc/security
の下にPAMモジュールのグローバル設定ファイルがあり、これらのモジュールの正確な動作を定義しています(たとえば、pam_env.conf
やtime.conf
です)。PAMモジュールを使用する各アプリケーションは、一連のPAM関数を呼び出し、各PAM関数は設定ファイルの情報を処理して、その結果を呼び出し元のアプリケーションに戻します。
PAMモジュールの作成と保守を簡素化するために、auth
、account
、password
、およびsession
のタイプのモジュールに共通のデフォルト設定ファイルが導入されました。これらのファイルは、すべてのアプリケーションのPAM設定から取得されます。common-*
でグローバルPAM設定モジュールを更新すると、すべてのPAM設定ファイルに更新が伝播されるため、管理者はすべてのPAM設定ファイルをひとつひとつ更新せずに済みます。
グローバルPAM設定ファイルは、pam-config
ツールを使用して管理されます。このツールは、新しいモジュールを設定に自動的に追加したり、既存のモジュールの設定を変更したり、設定からモジュール(またはオプション)を削除したりします。PAM設定を管理する際に手動で介入する必要は、最小限しかないか、まったくありません。
2.1 PAM設定の例 #
PAM設定の実際のユースケースを示すために、このセクションではsshdの設定を使用します。
/etc/pam.d/sshd
) ##%PAM-1.0 1 auth requisite pam_nologin.so 2 auth include common-auth 3 account requisite pam_nologin.so 2 account include common-account 3 password include common-password 3 session required pam_loginuid.so 4 session include common-session 3 session optional pam_lastlog.so silent noupdate showfailed 5
PAM 1.0用のこの設定ファイルのバージョンを宣言します。これは単に慣習ですが、今後バージョンを確認するために使用できます。 | |
| |
| |
認証されたプロセスのログインUIDプロセス属性を設定します。 | |
ユーザの最終ログインに関する情報を表示します。 |
各モジュールをそれぞれのPAM設定に個別に追加するのではなく設定ファイルを含めることにより、管理者がデフォルト値を変更した場合に、更新されたPAM設定が自動的に取得されます。
最初のインクルードファイル(common-auth
)は、auth
タイプのモジュールであるpam_env.so
、pam_gnome_keyring.so
、およびpam_unix.so
を呼び出します。例2「auth
セクションのデフォルト設定(common-auth
)」を参照してください。モジュールはインストールによって異なる場合があることに注意してください。
auth
セクションのデフォルト設定(common-auth
) #auth required pam_env.so 1 auth optional pam_gnome_keyring.so 2 auth required pam_unix.so try_first_pass 3
| |
| |
|
sshd
がログインの成否に関するフィードバックを受け取る前に、auth
モジュールのスタック全体が処理されます。sshd
が成功のメッセージを受け取る前に、制御フラグrequired
が設定されたスタックのすべてのモジュールが正常に処理される必要があります。モジュールの1つが失敗した場合もモジュールスタック全体が同様に処理され、その後にのみsshd
に失敗が通知されます。
auth
タイプのすべてのモジュールが正常に処理された時点で、別のinclude文が処理されます。この例では例3「account
セクションのデフォルト設定(common-account
)」になります。common-account
には、1つのモジュール、pam_unix
のみが含まれます。pam_unix
からユーザが存在するという結果が戻されると、sshdは成功したことを通知するメッセージを受信し、モジュールの次のスタック(password
)が処理されます。
account
セクションのデフォルト設定(common-account
) #account required pam_unix.so try_first_pass
繰り返しになりますが、sshd
のPAM設定はcommon-password
にあるpassword
モジュールのデフォルト設定を参照する1つのinclude文にのみ関係します。アプリケーションが認証トークンの変更をリクエストするたびに、これらのモジュールを正常に完了する必要があります(制御フラグrequisite
およびrequired
)。
パスワード変更や別の認証トークンについてはセキュリティチェックが必要です。これは、pam_cracklib
モジュールで実行されます。その後に使用されるpam_unix
モジュールは、pam_cracklib
から新旧のパスワードを引き継ぐため、ユーザはパスワードの変更後に再度認証する必要はありません。この手順により、pam_cracklib
によるチェックを回避することはできなくなります。account
またはauth
のタイプが失効したパスワードについて通知するように設定されている場合は、password
モジュールも使用する必要があります。
最終ステップとして、(common-session
ファイルに組み込まれた) session
タイプのモジュールが呼び出され、問題のユーザ用の設定に従ってセッションが設定されます。pam_limits
モジュールは、特定のシステムリソースの使用に対する制限を定義するファイル/etc/security/limits.conf
をロードします。pam_unix
モジュールが再度処理されます。pam_umask
モジュールを使用して、ファイルモード作成マスクを設定できます。このモジュールにはoptional
フラグが付いているため、このモジュールが失敗しても、セッションモジュールスタック全体の正常な完了には影響しません。session
モジュールはユーザのログアウト時に再び呼び出されます。
3 PAMモジュールの設定 #
設定可能なPAMモジュールもあります。設定ファイルは/etc/security
にあります。このセクションでは、sshdの例に関連する設定ファイルpam_env.conf
とlimits.conf
について簡単に説明します。
3.1 pam_env.conf #
pam_env.conf
を使用すると、pam_env
モジュールが呼び出されるたびに設定される、ユーザ用に標準化された環境を定義できます。それにより、次の構文を使用して環境変数を事前設定できます。
VARIABLE [DEFAULT=VALUE] [OVERRIDE=VALUE]
- VARIABLE
設定する環境変数の名前です。
-
[DEFAULT=<value>]
管理者が設定するデフォルトVALUE。
-
[OVERRIDE=<value>]
問い合わせ可能で
pam_env
によって設定される値です。この値でデフォルト値が上書きされます。
pam_env
の典型的な使用例は、DISPLAY
変数の取得です。これは、リモートログインが行われるたびに変更されます。これを例4「pam_env.conf」に示します。
REMOTEHOST DEFAULT=localhost OVERRIDE=@{PAM_RHOST} DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
1行目では、REMOTEHOST
変数の値がlocalhost
に設定されており、pam_env
が他の値を判別できない場合にこの値が使用されます。DISPLAY
変数には、REMOTEHOST
の値が含まれています。詳細については、/etc/security/pam_env.conf
のコメントを参照してください。
3.2 limits.conf #
limits.conf
では、ユーザ別またはグループ別のシステム制限を設定できます。このファイルは、pam_limits
モジュールに読み込まれます。このファイルを使用すると、超過できない厳密な制限と、一時的な超過が許される緩やかな制限を設定できます。構文およびオプションの詳細については、/etc/security/limits.conf
のコメントを参照してください。
4 pam-config
を使用したPAMの設定 #
pam-config
ツールは、グローバルなPAM設定ファイル(/etc/pam.d/common-*
)と、選択されたいくつかのアプリケーション設定を構成するのに役立ちます。サポートされているモジュールのリストについては、pam-config --list-modules
コマンドを使用してください。pam-config
コマンドを使用して、PAM設定ファイルを管理します。新しいモジュールをPAM設定に追加したり、他のモジュールを削除したり、これらのモジュールのオプションを変更したりします。グローバルなPAM設定ファイルを変更する場合、個々のアプリケーションのPAMセットアップを手動で調整する必要はありません。
pam-config
のシンプルなユースケースには次のようなものがあります。
Unixスタイルの新しいPAM設定を自動生成します。.
pam-config
で可能な限り単純なセットアップを作成し、後で拡張できるようにします。pam-config --create
コマンドは、単純なUnix認証設定を作成します。pam-config
で管理されていない既存の設定ファイルは上書きされますが、バックアップコピーは*.pam-config-backup
として保持されます。新しい認証方法を追加します。. 新しい認証方法(たとえば、LDAP)をPAMモジュールのスタックに追加するには、単純な
pam-config --add --ldap
コマンドを実行します。LDAPは、すべてのcommon-*-pc
PAM設定ファイルの該当する箇所に追加されます。テストのためにデバッグを追加します。. 新しい認証手順が計画どおりに動作することを確認するために、すべてのPAM関連操作のデバッグをオンにします。
pam-config --add --ldap-debug
で、LDAP関連のPAM操作のデバッグをオンにします。セットアップを問い合わせます。. 最終的に新しいPAMセットアップを適用する前に、追加したいすべてのオプションが含まれているかどうかを確認します。
pam-config --query --
MODULEコマンドで、問い合わせたPAMモジュールのタイプとオプションの両方を一覧にします。デバッグオプションを削除します。. 最後に、セットアップのパフォーマンスにまったく問題がない場合は、デバッグオプションをセットアップから削除します。
pam-config --delete --ldap-debug
コマンドで、LDAP認証のデバッグをオフにします。他のモジュールにデバッグオプションを追加していた場合は、同様のコマンドを使用してオフにします。
pam-config
コマンドと利用可能なオプションの詳細については、pam-config(8)
のマニュアルページを参照してください。
5 PAMの手動設定 #
PAM設定ファイルを手動で作成または管理したい場合は、これらのファイルのpam-config
を無効にしてください。
pam-config --create
コマンドを使用して最初からPAM設定ファイルを作成すると、common-*
からcommon-*-pc
ファイルへのシンボリックリンクが作成されます。pam-config
は、common-*-pc
の設定ファイルのみを変更します。これらのシンボリックリンクを削除すると、pam-config
は事実上無効になります。これは、pam-config
はcommon-*-pc
ファイルのみを処理し、これらのファイルはシンボリックリンクなしでは有効にならないためです。
pam_systemd.so
を設定に含める
独自のPAM設定を作成する場合は、session
optional
として設定したpam_systemd.so
を含めるようにしてください。pam_systemd.so
を含めないと、systemd
のタスク制限に問題が発生する可能性があります。詳細については、pam_systemd.so
のマニュアルページを参照してください。
6 ローカルログイン用のU2Fキーを要求するためのSLE Microの設定 #
SLE Microへのローカルログイン時のセキュリティを強化するために、pam-u2f
フレームワーク、およびYubiKeyとセキュリティキーのU2F機能を使用して2要素認証を設定できます。
SLE MicroシステムでU2Fを設定するには、キーをSLE Microのアカウントに関連付ける必要があります。その後、このキーを使用するようにシステムを設定します。この手順については、次のセクションで説明します。
6.1 アカウントへのU2Fキーの関連付け #
U2Fキーをアカウントに関連付けるには、次の手順に従います。
マシンにログインします。
U2Fキーを挿入します。
U2Fキーの設定用のディレクトリを作成します。
>
sudo
mkdir -p ~/.config/Yubico設定行を出力する
pamu2fcfg
コマンドを実行します。>
sudo
pamu2fcfg > ~/.config/Yubico/u2f_keysデバイスが点滅し始めたら、金属製の接点に触れて関連付けを確認します。
バックアップ用のU2Fデバイスを使用することをお勧めします。これは、次のコマンドを実行して設定できます。
次のスクリプトを実行します。
>
sudo
pamu2fcfg -n >> ~/.config/Yubico/u2f_keysデバイスが点滅し始めたら、金属製の接点に触れて関連付けを確認します。
セキュリティを強化するために、出力ファイルをデフォルトの場所から、ファイルを変更するためにsudo
許可が必要なディレクトリに移動できます。たとえば、/etc
ディレクトリに移動します。これを行うには、次の手順に従います。
/etc
にディレクトリを作成します。>
sudo
mkdir /etc/Yubico作成したファイルを移動します。
>
sudo
mv ~/.config/Yubico/u2f_keys /etc/Yubico/u2f_keys
u2f_keys
をデフォルト以外の場所に配置する
出力ファイルをデフォルト($HOME/.config/Yubico/u2f_keys
)とは異なるディレクトリに移動する場合は、6.2項 「PAM設定の更新」の説明に従って、/etc/pam.d/login
ファイルにパスを追加する必要があります。
6.2 PAM設定の更新 #
U2Fキー設定を作成した後で、システムのPAM設定を調整する必要があります。
ファイル
/etc/pam.d/login
を開きます。このファイルに、次のように
auth required pam_u2f.so
という行を追加します。#%PAM-1.0 auth include common-auth auth required pam_u2f.so account include common-account password include common-password session optional pam_keyinit.so revoke session include common-session #session optional pam_xauth.so
u2f_keys
ファイルを$HOME/.config/Yubico/u2f_keys
とは異なる場所に配置した場合は、次のように、/etc/pam.d/login
のPAMファイルでauthfile
オプションを使用する必要があります。#%PAM-1.0 auth requisite pam_nologin.so auth include common-auth auth required pam_u2f.so authfile=<PATH_TO_u2f_keys> ...
ここで、<PATH_TO_u2f_keys>は
u2f_keys
ファイルの絶対パスです。
7 法的事項 #
Copyright © 2006–2024 SUSE LLC and contributors. All rights reserved.
この文書は、GNUフリー文書ライセンスのバージョン1.2または(オプションとして)バージョン1.3の条項に従って、複製、頒布、および/または改変が許可されています。ただし、この著作権表示およびライセンスは変更せずに記載すること。ライセンスバージョン1.2のコピーは、「GNUフリー文書ライセンス」セクションに含まれています。
SUSEの商標については、https://www.suse.com/company/legal/を参照してください。その他の第三者のすべての商標は、各社の所有に帰属します。商標記号(®、™など)は、SUSEおよび関連会社の商標を示します。アスタリスク(*)は、第三者の商標を示します。
本書のすべての情報は、細心の注意を払って編集されています。しかし、このことは正確性を完全に保証するものではありません。SUSE LLC、その関係者、著者、翻訳者のいずれも誤りまたはその結果に対して一切責任を負いかねます。