PAM
Linux Pluggable Authentication Modules (PAM) はシステム共通のユーザ認証フレームワークです。プロジェクトホームページ からの引用:
- PAM は認証スキームに依存しないプログラムを開発する手段を提供します。認証時には「認証モジュール」が使用されます。どの認証モジュールが使用されるかはローカルのシステム設定にあわせて決められるため、ローカルのシステム管理者が自由に設定することができます。
この記事では、ローカルユーザ及びリモートユーザを PAM で認証するための Arch Linux ベースセットアップのデフォルトを説明します。デフォルト設定に変更を加える方法はトピックごとに別々に分かれています。
目次
インストール
pam パッケージは base メタパッケージ に含まれているため、通常、最初からシステムにインストールされています。PAM モジュールは /usr/lib/security だけにインストールされます。
リポジトリには多数のオプション PAM パッケージが存在します。#設定方法に例を示します。
設定
PAM に関係する /etc のパスは多数存在します。作成されたデフォルト設定ファイルを確認するには pacman --query --list pam | grep /etc を実行してください。これらは、モジュールの #セキュリティパラメータ か #PAM ベーススタック 設定のいずれかに関連しています。
セキュリティパラメータ
/etc/security パスには、認証メソッドが用意している変数のシステム固有の設定が含まれます。ベースインストールでは、デフォルトの上流の設定ファイルが生成されます。
注意点として、Arch Linux はこれらのファイルに対してディストリビューション固有の設定を提供しません。例えば、/etc/security/pwquality.conf ファイルを使うことで、パスワードの品質に関するシステム全体のデフォルト設定を定義することができます。ただし、この設定を有効にするには pam_pwquality.so モジュールをモジュールの #PAM ベーススタック に追加しなくてはなりません。このモジュールはデフォルトでは追加されていません。
利用可能な設定のいくつかは #セキュリティパラメータの設定 を見てください。
PAM ベーススタック
/etc/pam.d/ パスは、アプリケーションを各システムの認証スキームとリンクさせるための PAM 設定専用です。システムベースをインストールする際に以下のパッケージによって作成されます:
- pambase パッケージ。アプリケーションによって使用される、Arch Linux 固有の PAM 設定のベーススタックが含まれています。
- 他のベースパッケージ。例えば、util-linux は login などのプログラムの設定を追加し、shadow パッケージはユーザーデータベースを防護・修正する Arch Linux のデフォルト設定を追加します (ユーザーとグループを参照)。
ベースインストールの様々な設定ファイルは互いにリンクしており、実行時にスタックされます。例えば、ローカルユーザのログオン時、login アプリケーションは system-local-login ポリシーを読み込んでから、他のファイルを読み込みます:
/etc/pam.d/
login -> system-local-login -> system-login -> system-auth
アプリケーションによって、使用されるパスも様々です。例えば、openssh は sshd PAM ポリシーをインストールします:
/etc/pam.d/
sshd -> system-remote-login -> system-login -> system-auth
従って、スタックの設定ファイルの選択が重要です。上の例なら、sshd を使うことで SSH だけで特殊な認証方法を設定したり、あるいは system-remote-login を変更することで、あらゆるリモートログインに反映させることができます。どちらの場合でもローカルのログインには影響がありません。system-login や system-auth に変更を加えた場合、ローカルログインとリモートログインに影響します。
sshd の例でわかる通り、pam を利用するアプリケーションは、PAM スタックと適切に統合・利用するために、ポリシーを /etc/pam.d にインストールする必要があります。アプリケーションがこれを行わない場合、ログインを拒否し警告をログに記録する /etc/pam.d/other デフォルトポリシーが適用されます。
PAM パッケージのマニュアルページ pam(8) と pam.d(5) には、設定ファイルの標準的な内容について説明があります。特に、4つの PAM グループ (account、authentication、password、そして session management) と、モジュールのスタックと挙動を設定する制御値について詳しく書かれています。
さらに、各標準モジュールのブラウズ可能な man ページが様々なガイドと共に含まれている広範なドキュメントが /usr/share/doc/Linux-PAM/index.html にインストールされます。
例
上の警告について2つの短い例で説明します。
まず、以下の2行を取り上げましょう:
/etc/pam.d/system-auth
auth required pam_unix.so try_first_pass nullok auth optional pam_permit.so
pam_unix(8) によると:
- 認証コンポーネント
pam_unix.soはユーザーの認証情報 (パスワード) を確認するタスクを実行します。ユーザの公式パスワードが空の場合、モジュールはデフォルトでユーザーからサービスへのアクセスを許可しません。
- 後者が pam_permit.so が使われている理由です。上記の2行の制御値 required と optional を取り替えるだけでパスワード認証は無効化されます。つまり、すべてのユーザはパスワードを入力しなくてもログインできるようになります。
次に、反対の例として、/etc/pam.d/ にある pam_nologin.so のデフォルト設定を使って、以下のファイルを作成すると:
# touch /etc/nologin
root 以外の全ユーザはログインできなくなります (root ログインが許可されている場合。これは Arch Linux のデフォルトです)。再びログインできるようにするには、このファイルを削除してください。可能であれば、このファイルを作成したコンソールから。
上記の説明を踏まえて、特定のユースケースにおける設定について #PAM スタックとモジュールの設定 を見てください。
設定方法
このセクションでは、PAM の設定に変更を適用する方法や新しい特別な PAM モジュールを PAM スタックに追加する方法が載っている記事をまとめています。大抵の場合、モジュールの man ページは .so 拡張子を省くことで閲覧することができます。
セキュリティパラメータの設定
以下のセクションでは PAM パラメータのデフォルト設定を変更する例を提示しています:
pam_cracklib.soを使って強固なパスワードを強制する方法。
pam_faillock.soを使ってログインの試行回数を制限する方法。
pam_wheel.soを使ってユーザーのログインを制限する。
pam_limits.soを使ってシステムのプロセス数を制限する方法。
pam_env.soを使って環境変数を設定する方法。
PAM スタックとモジュールの設定
以下の記事では、特殊なユースケースにあわせて #PAM ベーススタック を変更する方法が載っています。
- pam_mount
pam_mount.soを使って、暗号化されたディレクトリパスをユーザーのログイン時に自動的にマウントする例が載っています。- ECryptfs#自動マウント
pam_ecryptfs.soを使用して、暗号化されたディレクトリを自動でマウントします。- Dm-crypt/ログイン時にマウント
pam_exec.soを使用してユーザーのログイン時にカスタムスクリプトを実行する方法。- Active Directory Integration#PAM の設定
pam_winbind.soとpam_krb5.soを使用して Active Directory (LDAP、Kerberos) サービスでユーザーの認証を行います。- LDAP 認証と LDAP 認証#NSS と PAM セクション
pam_ldap.soによる LDAP クライアントの統合やサーバーサイド認証に関する記事。- YubiKey#PAM を用いた Linux ユーザ認証
- PAM を用いて、U2F (
pam_u2f.so) や、YubiKey によって提供されているプロプライエタリな Yubico OTP 実装 (pam_yubico.so) を使用する方法が説明されています。 - pam_oath
pam_oath.soを用いて、ソフトウェアベースの二要素認証を実装する例があります。- fprint
pam_fprintd.soを使って指紋認証をセットアップします。- pam_autologin
- ユーザ名とパスワードを保存して自動的にログインします。
- pam_usb
- USB デバイスを使って認証 (任意で2要素認証) を行うように
pam_usb.soを設定する方法。 - SSH 鍵#pam_ssh
pam_ssh.soを使ってリモートユーザーとして認証します。- pam_abl
pam_abl.soを使って SSH からのブルートフォース攻撃を抑える方法が説明されています。- EncFS
pam_encfs.soで自動マウント。- Google Authenticator
pam_google_authenticator.soで二要素認証を設定する方法。- Very Secure FTP Daemon#PAM と仮想ユーザー
pam_pwdfile.soで FTP chroot を設定し、ローカルのシステムアカウントがなくてもユーザーを認証する方法。
他の PAM パッケージ
上記で紹介したパッケージ以外にも、Arch User Repository には多数の PAM モジュールやツールが存在します。
PAM に関連する汎用的なユーティリティは以下の通りです:
- Pamtester — Pluggable Authentication Module (PAM) の機能をテストするプログラム。
AUR には PAM というキーワードタグが存在しますが、全てのパッケージにタグが付いているわけではありません。そのため、場合によってはパッケージの説明文を検索する必要があります。
ヒントとテクニック
ロックアウト
間違ったパスワードを何度も入力したために PAM によってロックアウトされた場合は、セキュリティ#3回ログインを失敗したユーザーをロックアウトする を参照してください。
参照
- linux-pam.org - プロジェクトホームページ
- Understanding and configuring PAM - 入門記事