目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / PAMを使用した認証

PAMを使用した認証

発行日: 12/12/2024
概要

この記事では、PAMのコンセプト、PAM設定の構造、およびPAMを設定するツールの使用法について説明します。

目的

PAMモジュールを設定し、U2Fキーを使用するようにシステムを設定する方法を理解する必要があります。

所要時間

この記事の理解には20分ほどを要します。

要件
  • U2Fキーを使用して認証を設定するには、YubiKeyまたはセキュリティキーのいずれかが必要です。

1 PAMの概要

通常、システム管理者とプログラマは、システムの一定部分へのアクセスを制限することや、アプリケーションの一定の機能の使用を制限することを望みます。PAMを使用しなければ、新規の認証メカニズム(LDAPやSamba、Kerberosなど)が導入されるたびにアプリケーションを調整する必要があります。ただし、このプロセスは時間がかかり、エラーが発生しやすくなります。このような難点を回避する方法の1つは、アプリケーションを認証メカニズムから分離し、認証は集中管理されるモジュールに任せることです。新しい認証方式が必要になった場合は、問題のプログラムで使用できるように適切なPAMモジュールを調整または記述するだけで済みます。

PAMのコンセプトは以下で構成されます。

  • 「PAMモジュール」。特定の認証メカニズム用の共有ライブラリのセットです。

  • 「モジュールスタック」。1つ以上のPAMモジュールで構成されます。

  • PAM対応「サービス」。モジュールスタックまたはPAMモジュールを使用して認証する必要があります。通常、サービスは、loginsuのように、対応するアプリケーションのよく知られた名前になっています。サービス名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ファイルにあります。

注記
注記: SLE Microではファイルベースの設定(/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.conftime.confです)。PAMモジュールを使用する各アプリケーションは、一連のPAM関数を呼び出し、各PAM関数は設定ファイルの情報を処理して、その結果を呼び出し元のアプリケーションに戻します。

PAMモジュールの作成と保守を簡素化するために、authaccountpassword、およびsessionのタイプのモジュールに共通のデフォルト設定ファイルが導入されました。これらのファイルは、すべてのアプリケーションのPAM設定から取得されます。common-*でグローバルPAM設定モジュールを更新すると、すべてのPAM設定ファイルに更新が伝播されるため、管理者はすべてのPAM設定ファイルをひとつひとつ更新せずに済みます。

グローバルPAM設定ファイルは、pam-configツールを使用して管理されます。このツールは、新しいモジュールを設定に自動的に追加したり、既存のモジュールの設定を変更したり、設定からモジュール(またはオプション)を削除したりします。PAM設定を管理する際に手動で介入する必要は、最小限しかないか、まったくありません。

2.1 PAM設定の例

PAM設定の実際のユースケースを示すために、このセクションではsshdの設定を使用します。

例 1: sshdのPAM設定(/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

1

PAM 1.0用のこの設定ファイルのバージョンを宣言します。これは単に慣習ですが、今後バージョンを確認するために使用できます。

2

/etc/nologinが存在するかどうかを確認します。存在しない場合、root以外のユーザはログインできません。

3

common-authcommon-accountcommon-passwordcommon-sessionの4つのモジュールタイプの設定ファイルを参照します。これら4つのファイルにはそれぞれのモジュールタイプ用のデフォルト設定があります。

4

認証されたプロセスのログインUIDプロセス属性を設定します。

5

ユーザの最終ログインに関する情報を表示します。

各モジュールをそれぞれのPAM設定に個別に追加するのではなく設定ファイルを含めることにより、管理者がデフォルト値を変更した場合に、更新されたPAM設定が自動的に取得されます。

最初のインクルードファイル(common-auth)は、authタイプのモジュールであるpam_env.sopam_gnome_keyring.so、およびpam_unix.soを呼び出します。例2「authセクションのデフォルト設定(common-auth)」を参照してください。モジュールはインストールによって異なる場合があることに注意してください。

例 2: 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

1

pam_env.soは、/etc/security/pam_env.confをロードして、このファイルで指定されているとおりに環境変数を設定します。pam_envモジュールはログイン元を認識するため、このファイルを使用するとDISPLAY変数を適切な値に設定できます。

2

pam_gnome_keyring.soは、ユーザのログインとパスワードをGNOMEキーリングと照合します。

3

pam_unixは、ユーザのログイン名とパスワードを/etc/passwdおよび/etc/shadowと照合します。

sshdがログインの成否に関するフィードバックを受け取る前に、authモジュールのスタック全体が処理されます。sshdが成功のメッセージを受け取る前に、制御フラグrequiredが設定されたスタックのすべてのモジュールが正常に処理される必要があります。モジュールの1つが失敗した場合もモジュールスタック全体が同様に処理され、その後にのみsshdに失敗が通知されます。

authタイプのすべてのモジュールが正常に処理された時点で、別のinclude文が処理されます。この例では例3「accountセクションのデフォルト設定(common-account)」になります。common-accountには、1つのモジュール、pam_unixのみが含まれます。pam_unixからユーザが存在するという結果が戻されると、sshdは成功したことを通知するメッセージを受信し、モジュールの次のスタック(password)が処理されます。

例 3: 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.conflimits.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」に示します。

例 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のシンプルなユースケースには次のようなものがあります。

  1. Unixスタイルの新しいPAM設定を自動生成します。.  pam-configで可能な限り単純なセットアップを作成し、後で拡張できるようにします。pam-config --createコマンドは、単純なUnix認証設定を作成します。pam-configで管理されていない既存の設定ファイルは上書きされますが、バックアップコピーは*.pam-config-backupとして保持されます。

  2. 新しい認証方法を追加します。.  新しい認証方法(たとえば、LDAP)をPAMモジュールのスタックに追加するには、単純なpam-config --add --ldapコマンドを実行します。LDAPは、すべてのcommon-*-pc PAM設定ファイルの該当する箇所に追加されます。

  3. テストのためにデバッグを追加します。.  新しい認証手順が計画どおりに動作することを確認するために、すべてのPAM関連操作のデバッグをオンにします。pam-config --add --ldap-debugで、LDAP関連のPAM操作のデバッグをオンにします。

  4. セットアップを問い合わせます。.  最終的に新しいPAMセットアップを適用する前に、追加したいすべてのオプションが含まれているかどうかを確認します。pam-config --query --MODULEコマンドで、問い合わせたPAMモジュールのタイプとオプションの両方を一覧にします。

  5. デバッグオプションを削除します。.  最後に、セットアップのパフォーマンスにまったく問題がない場合は、デバッグオプションをセットアップから削除します。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-configcommon-*-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キーをアカウントに関連付けるには、次の手順に従います。

  1. マシンにログインします。

  2. U2Fキーを挿入します。

  3. U2Fキーの設定用のディレクトリを作成します。

    > sudo mkdir -p ~/.config/Yubico
  4. 設定行を出力するpamu2fcfgコマンドを実行します。

    > sudo pamu2fcfg > ~/.config/Yubico/u2f_keys
  5. デバイスが点滅し始めたら、金属製の接点に触れて関連付けを確認します。

バックアップ用のU2Fデバイスを使用することをお勧めします。これは、次のコマンドを実行して設定できます。

  1. 次のスクリプトを実行します。

    > sudo pamu2fcfg -n >> ~/.config/Yubico/u2f_keys
  2. デバイスが点滅し始めたら、金属製の接点に触れて関連付けを確認します。

セキュリティを強化するために、出力ファイルをデフォルトの場所から、ファイルを変更するためにsudo許可が必要なディレクトリに移動できます。たとえば、/etcディレクトリに移動します。これを行うには、次の手順に従います。

  1. /etcにディレクトリを作成します。

    > sudo mkdir /etc/Yubico
  2. 作成したファイルを移動します。

    > 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設定を調整する必要があります。

  1. ファイル/etc/pam.d/loginを開きます。

  2. このファイルに、次のように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
  3. 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ファイルの絶対パスです。