PAM
Linux Pluggable Authentication Modules (PAM) はシステム共通のユーザー認証フレームワークです。プロジェクトホームページ からの引用:
- PAM は認証スキームに依存しないプログラムを開発する道筋を提供します。認証時には「認証モジュール」が使用されます。どの認証モジュールが使用されるかはローカルのシステム設定にあわせて決められるため、ローカルのシステム管理者が自由に設定することができます。
この記事ではローカル・リモートユーザーを認証するために Arch Linux で使われている PAM の設定について説明します。デフォルト設定に変更を加える方法はトピックごとに別々に分かれています。
目次
インストール
pam パッケージは base メタパッケージ に含まれているため、最初からシステムにインストールされています。PAM モジュールは /usr/lib/security
にインストールされます。
リポジトリには多数の PAM パッケージが存在します。#設定方法に例を示します。
設定
PAM に関係する /etc
のパスは多数存在します。pacman -Ql pam |grep /etc
を実行して、作成されているデフォルト設定ファイルを確認してください。モジュールの セキュリティパラメータや PAM ベーススタックの設定を変えることができます。
セキュリティパラメータ
/etc/security
には認証メソッドが用意している変数のシステム全体の設定が含まれます。ベースインストールを行うことでデフォルトの設定ファイルが作られます。
Arch Linux は上流に存在しない設定を作ることはないので注意してください。例えば、/etc/security/pwquality.conf
ファイルを使うことでパスワードの品質についてシステム全体のデフォルト設定を定義することができます。さらに、その設定を有効にするには pam_pwquality.so
モジュールを PAM ベーススタックに追加しなくてはなりません。
Arch Linux でデフォルトで有効になっていない設定はセキュリティパラメータの設定を見てください。
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-aware アプリケーションはポリシーを /etc/pam.d
にインストールして PAM のスタックに依拠・統合する必要があります。アプリケーションがポリシーをインストールしなかった場合、デフォルトで /etc/pam.d/other
ポリシーが適用されます。既定では許容的なポリシーがインストールされます (FS#48650)。
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
man pam_unix
より: "認証コンポーネント pam_unix.so
はユーザーのログイン情報 (パスワード) を確認するタスクを実行します。公式パスワードが空の場合、モジュールはデフォルトでユーザーからサービスへのアクセスを許可しません"。後者が pam_permit.so
が使われている理由です。上記の2行の制御値 required
と optional
を取り替えるだけでパスワード認証は無効化されます。パスワードを入力しなくても誰でもログインできるようになります。
次に、反対の例として、デフォルト設定で以下のファイルを作成した場合:
# touch /etc/nologin
root 以外のユーザーは全くログインできなくなります (root ログインが許可されるのは Arch Linux の別のデフォルト設定です)。作成したファイルをコンソールから削除すれば再度ログインができるようになります。
上記の説明を踏まえて、特定のユースケースにおける設定について PAM スタックとモジュールの設定を見てください。
設定方法
このセクションでは PAM の設定に変更を適用する方法や新しい PAM モジュールを PAM スタックに追加する方法が載っている記事をまとめています。大抵の場合、モジュールの man ページは .so
拡張子を省くことで閲覧することができます。
セキュリティパラメータの設定
以下のセクションでは PAM パラメータのデフォルト設定を変更する例を提示しています:
pam_cracklib.so
を使って強固なパスワードを強制する方法。
pam_tally.so
を使ってログインの試行回数を制限する方法。
pam_wheel.so
を使ってユーザーのログインを制限する。
pam_limits.so
を使ってシステムのプロセス数を制限する方法。
pam_env.so
を使って環境変数を設定する方法。
PAM スタックとモジュールの設定
以下の記事では特定のユースケースにあわせて PAM ベーススタックを変更する方法が載っています。
公式リポジトリに存在する PAM モジュール:
pam_mount.so
を使ってユーザーのログイン時に暗号化されたディレクトリパスを自動的にマウントする例が載っています。
pam_ecryptfs.so
を使用して暗号化されたディレクトリを自動でマウントします。
pam_exec.so
を使用してユーザーのログイン時にカスタムスクリプトを実行する方法。
- LDAP 認証と LDAP 認証#NSS と PAM セクション
pam_ldap.so
による LDAP クライアントの統合やサーバーサイド認証に関する記事。
- PAM スタックの
pam_yubico.so
を使ってプロプライエタリな Yubikey を使って認証を行う。
pam_oath.so
による二段階認証を使用するソフトウェアを実装する例。
pam_fprintd.so
を使って指紋認証をセットアップする。
Arch User Repository に存在する PAM モジュール:
- USB デバイスを使って認証を行うように
pam_usb.so
を設定する方法。
pam_ssh.so
を使ってリモートユーザーとして認証。
pam_abl.so
を使って SSH からのブルートフォース攻撃を抑える方法。
pam_encfs.so
で自動マウント。
pam_google_authenticator.so
で二段階認証を設定する方法。
pam_pwdfile.so
で FTP chroot を設定してローカルのシステムアカウントがなくてもユーザーを認証する方法。
他の PAM パッケージ
上記で紹介したパッケージ以外にも、Arch User Repository には多数の PAM モジュールやツールが存在します。
PAM に関連する汎用的なユーティリティは以下の通りです:
- libx32_pam — Arch Linux PAM x32 ABI ライブラリ。
- Pamtester — Pluggable Authentication Module (PAM) の機能をテストするプログラム。
AUR には PAM というキーワードタグが存在しますが、全てのパッケージにタグが付いているわけではありません。そのため、場合によっては パッケージの説明文 で検索する必要があります。
参照
- linux-pam.org - プロジェクトホームページ
- Understanding and configuring PAM - An introductory article