PAM

提供: ArchWiki
2017年3月30日 (木) 00:18時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

関連記事

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-linuxlogin などのプログラムの設定を追加し、shadow パッケージはユーザーデータベースを防護・修正する Arch Linux のデフォルト設定を追加します (ユーザーとグループを参照)。

ベースインストールで作られた様々な設定ファイルは互いにリンクしており、実行時にスタックされます。例えば、ローカルユーザーがログインした時、login アプリケーションは system-local-login ポリシーを読み込んでから、他のファイルを参照します:

/etc/pam.d/
login -> system-local-login -> system-login -> system-auth

アプリケーションによって、使用されるパスも様々です。例えば、opensshsshd PAM ポリシーをインストールします:

/etc/pam.d/
sshd -> system-remote-login -> system-login -> system-auth

従って、スタックの設定ファイルの選択が重要です。上の例なら、sshd を使うことで SSH だけで特殊な認証方法を設定したり、あるいは system-remote-login を変更することで、あらゆるリモートログインに反映させることができます。どちらの場合でもローカルのログインには影響がありません。system-loginsystem-auth に変更を加えた場合、ローカルログイン・リモートログインの両方が変わります。

sshd の例でわかる通り、pam-aware アプリケーションはポリシーを /etc/pam.d にインストールして PAM のスタックに依拠・統合する必要があります。アプリケーションがポリシーをインストールしなかった場合、デフォルトで /etc/pam.d/other ポリシーが適用されます。既定では許容的なポリシーがインストールされます (FS#48650)。

ヒント: PAM は実行時に動的にリンクされます。例えば、以下の場合:
$ ldd /usr/bin/login | grep pam
libpam.so.0 => /usr/lib/libpam.so.0 (0x000003d8c32d6000)
libpam_misc.so.0 => /usr/lib/libpam_misc.so.0 (0x000003d8c30d2000)
login アプリケーションは pam-aware であり、ポリシーが必ず必要です。

PAM パッケージに付属しているマニュアルページ pam(8)pam.d(5) には設定ファイルの標準的な内容について説明があります。特に、4つの PAM グループ (account, authentication, password, session management) と、モジュールのスタックと挙動を設定する制御値について詳しく書かれています。

さらに、様々なガイドや標準モジュールの man ページを閲覧することができるドキュメントが /usr/share/doc/Linux-PAM/index.html にインストールされています。

警告: PAM の設定に変更を加えるとユーザー認証が根本から変わります。変更した部分に問題があるとユーザーが全くログインできなくなったり、逆に誰でもログインできるようになってしまう可能性があります。認証済みのユーザーには変更が適用されないため、変更を行なってから別のコンソールで他のユーザーを使ってテストを行うことを推奨します。

サンプル

上の警告について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行の制御値 requiredoptional を取り替えるだけでパスワード認証は無効化されます。パスワードを入力しなくても誰でもログインできるようになります。

次に、反対の例として、デフォルト設定で以下のファイルを作成した場合:

# 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 を使用してユーザーのログイン時にカスタムスクリプトを実行する方法。
pam_winbind.sopam_krb5.so を使用して Active Directory (LDAP, Kerberos) サービスでユーザーの認証を行います。
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 ライブラリ。
http://linux-pam.org/ || libx32-pamAUR
  • Pamtester — Pluggable Authentication Module (PAM) の機能をテストするプログラム。
http://pamtester.sourceforge.net/ || pamtesterAUR

AUR には PAM というキーワードタグが存在しますが、全てのパッケージにタグが付いているわけではありません。そのため、場合によっては パッケージの説明文 で検索する必要があります。

参照