コンテンツにスキップ

「PAM」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
二要素認証に用語を統一
 
(5人の利用者による、間の15版が非表示)
1行目: 1行目:
[[Category:カーネル]]
[[Category:カーネル]]
[[Category:セキュリティ]]
[[Category:認証]]
[[en:PAM]]
[[en:PAM]]
[[es:PAM]]
[[ru:PAM]]
[[zh-hans:PAM]]
{{Related articles start}}
{{Related articles start}}
{{Related|セキュリティ}}
{{Related|セキュリティ}}
8行目: 11行目:
{{Related|pam_abl}}
{{Related|pam_abl}}
{{Related|pam_oath}}
{{Related|pam_oath}}
{{Related|Universal 2nd Factor}}
{{Related|アイデンティティ管理}}
{{Related articles end}}
{{Related articles end}}
Linux Pluggable Authentication Modules (PAM) はシステム共通のユーザー認証フレームワークです。[http://www.linux-pam.org/whatispam.html プロジェクトホームページ] からの引用:
[http://www.linux-pam.org/ Linux Pluggable Authentication Modules] (PAM) はシステム共通のユーザ認証フレームワークです。[https://web.archive.org/web/20220402070708/http://linux-pam.org/whatispam.html プロジェクトホームページ] からの引用:


:PAM は認証スキームに依存しないプログラムを開発する道筋を提供します。認証時には「認証モジュール」が使用されます。どの認証モジュールが使用されるかはローカルのシステム設定にあわせて決められるため、ローカルのシステム管理者が自由に設定することができます。
:PAM は認証スキームに依存しないプログラムを開発する手段を提供します。認証時には「認証モジュール」が使用されます。どの認証モジュールが使用されるかはローカルのシステム設定にあわせて決められるため、ローカルのシステム管理者が自由に設定することができます。


この記事ではローカル・リモートユーザーを認証するために Arch Linux で使われている PAM の設定について説明します。デフォルト設定に変更を加える方法はトピックごとに別々に分かれています。
この記事では、ローカルユーザ及びリモートユーザを PAM で認証するための Arch Linux ベースセットアップのデフォルトを説明します。デフォルト設定に変更を加える方法はトピックごとに別々に分かれています。


== インストール ==
== インストール ==


{{Pkg|pam}} パッケージは base グループに含まれているため、最初からシステムにインストールされています。PAM モジュールは {{ic|/usr/lib/security}} にインストールされます。
{{Pkg|pam}} パッケージは {{Pkg|base}} [[メタパッケージ]] に含まれているため、通常、最初からシステムにインストールされています。PAM モジュールは {{ic|/usr/lib/security}} だけにインストールされます。


リポジトリには多数の PAM パッケージが存在します。[[#設定方法]]に例を示します。
リポジトリには多数のオプション PAM パッケージが存在します。[[#設定方法]]に例を示します。


== 設定 ==
== 設定 ==


PAM に関係する {{ic|/etc}} のパスは多数存在します。{{ic|<nowiki>pacman -Ql pam |grep /etc</nowiki>}} を実行して、作成されているデフォルト設定ファイルを確認してください。モジュールの [[#セキュリティパラメータ|セキュリティパラメータ]]や [[#PAM ベーススタック|PAM ベーススタック]]の設定を変えることができます。
PAM に関係する {{ic|/etc}} のパスは多数存在します。作成されたデフォルト設定ファイルを確認するには {{ic|<nowiki>pacman --query --list pam | grep /etc</nowiki>}} を実行してください。これらは、モジュールの [[#セキュリティパラメータ]] か [[#PAM ベーススタック]] 設定のいずれかに関連しています。


=== セキュリティパラメータ ===
=== セキュリティパラメータ ===


{{ic|/etc/security}} には認証メソッドが用意している変数のシステム全体の設定が含まれます。ベースインストールを行うことでデフォルトの設定ファイルが作られます。
{{ic|/etc/security}} パスには、認証メソッドが用意している変数のシステム固有の設定が含まれます。ベースインストールでは、デフォルトの上流の設定ファイルが生成されます。


Arch Linux は上流に存在しない設定を作ることはないので注意してください。例えば、{{ic|/etc/security/pwquality.conf}} ファイルを使うことでパスワードの品質についてシステム全体のデフォルト設定を定義することができます。さらに、その設定を有効にするには {{ic|pam_pwquality.so}} モジュールを [[#PAM ベーススタック|PAM ベーススタック]]に追加しなくてはなりません。
注意点として、Arch Linux はこれらのファイルに対してディストリビューション固有の設定を提供しません。例えば、{{ic|/etc/security/pwquality.conf}} ファイルを使うことで、パスワードの品質に関するシステム全体のデフォルト設定を定義することができます。ただし、この設定を有効にするには {{ic|pam_pwquality.so}} モジュールをモジュールの [[#PAM ベーススタック]] に追加しなくてはなりません。このモジュールはデフォルトでは追加されていません。


Arch Linux でデフォルトで有効になっていない設定は[[#セキュリティパラメータの設定|セキュリティパラメータの設定]]を見てください。
利用可能な設定のいくつかは [[#セキュリティパラメータの設定]] を見てください。


=== PAM ベーススタック ===
=== PAM ベーススタック ===


{{ic|/etc/pam.d/}} パスにはアプリケーションをシステムの認証スキームにリンクする PAM 設定を置きます。システムベースをインストールする際に以下のパッケージによって作成されます:
{{ic|/etc/pam.d/}} パスは、アプリケーションを各システムの認証スキームとリンクさせるための PAM 設定専用です。システムベースをインストールする際に以下のパッケージによって作成されます:


* {{Pkg|pambase}} パッケージ。アプリケーションによって使用される Arch Linux の PAM 設定のベーススタックが含まれています。
* {{Pkg|pambase}} パッケージ。アプリケーションによって使用される、Arch Linux 固有の PAM 設定のベーススタックが含まれています。
* 他のベースパッケージ。例えば、{{Pkg|util-linux}} は ''login'' などのプログラムの設定を追加し、{{Pkg|shadow}} パッケージはユーザーデータベースを防護・修正する Arch Linux のデフォルト設定を追加します ([[ユーザーとグループ]]を参照)。
* 他のベースパッケージ。例えば、{{Pkg|util-linux}} は ''login'' などのプログラムの設定を追加し、{{Pkg|shadow}} パッケージはユーザーデータベースを防護・修正する Arch Linux のデフォルト設定を追加します ([[ユーザーとグループ]]を参照)。


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


{{hc|/etc/pam.d/|
{{hc|/etc/pam.d/|
50行目: 55行目:
sshd -> system-remote-login -> system-login -> system-auth}}
sshd -> system-remote-login -> system-login -> system-auth}}


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


{{ic|sshd}} の例でわかる通り、'''pam-aware''' アプリケーションはポリシーを {{ic|/etc/pam.d}} にインストールして PAM のスタックに依拠・統合する必要があります。アプリケーションがポリシーをインストールしなかった場合、デフォルトで {{ic|/etc/pam.d/other}} ポリシーが適用されます。既定では許容的なポリシーがインストールされます ({{Bug|48650}})。
{{ic|sshd}} の例でわかる通り、'''pam を利用する'''アプリケーションは、PAM スタックと適切に統合・利用するために、ポリシーを {{ic|/etc/pam.d}} にインストールする必要があります。アプリケーションがこれを行わない場合、ログインを拒否し警告をログに記録する {{ic|/etc/pam.d/other}} デフォルトポリシーが適用されます。


{{Tip|PAM は実行時に動的にリンクされます。例えば、以下の場合:
{{Tip|PAM は実行時に動的にリンクされます。例えば:
{{hc|<nowiki>$ ldd /usr/bin/login | grep pam</nowiki>|2=
{{hc|<nowiki>$ ldd /usr/bin/login | grep pam</nowiki>|2=
libpam.so.0 => /usr/lib/libpam.so.0 (0x000003d8c32d6000)
libpam.so.0 => /usr/lib/libpam.so.0 (0x000003d8c32d6000)
libpam_misc.so.0 => /usr/lib/libpam_misc.so.0 (0x000003d8c30d2000)}}
libpam_misc.so.0 => /usr/lib/libpam_misc.so.0 (0x000003d8c30d2000)}}
''login'' アプリケーションは pam-aware であり、ポリシーが必ず必要です。}}
''login'' アプリケーションは pam を利用するため、ポリシーが'''必ず'''必要です。}}


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


さらに、様々なガイドや標準モジュールの man ページを閲覧することができるドキュメントが {{ic|/usr/share/doc/Linux-PAM/index.html}} にインストールされています。
さらに、各標準モジュールのブラウズ可能な man ページが様々なガイドと共に含まれている広範なドキュメントが {{ic|/usr/share/doc/Linux-PAM/index.html}} にインストールされます。


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


{{Tip|設定を変更しても、すでに認証されているユーザには影響しません。PAM の動作確認をするには、テスト対象のマシンにできればローカルにログインして、そのセッションを維持した状態で開発を行い、別のコンソールで他のユーザとしてログインして結果を確認すると良いでしょう。}}
⚫
==== サンプル ====


⚫
==== 例 ====
⚫
上の警告について2つの例で説明します。


{{Accuracy|(1) nullok の使用 (2) pam が optional なモジュールを処理する方法。英語版の議論ページ: [[:en:Talk:PAM#Accuracy of PAM#Examples]]}}
⚫
まず、以下の2行について:

⚫
上の警告について2つの短い例で説明します。

⚫
まず、以下の2行を取り上げましょう:
{{hc|/etc/pam.d/system-auth|
{{hc|/etc/pam.d/system-auth|
auth required pam_unix.so try_first_pass nullok
auth required pam_unix.so try_first_pass nullok
auth optional pam_permit.so}}
auth optional pam_permit.so}}


{{man|8|pam_unix}} によると:
{{ic|man pam_unix}} より: "認証コンポーネント {{ic|pam_unix.so}} はユーザーのログイン情報 (パスワード) を確認するタスクを実行します。公式パスワードが空の場合、モジュールはデフォルトでユーザーからサービスへのアクセスを許可しません"。後者が {{ic|pam_permit.so}} が使われている理由です。上記の2行の制御値 {{ic|required}} と {{ic|optional}} を取り替えるだけでパスワード認証は無効化されます。パスワードを入力しなくても誰でもログインできるようになります。
:認証コンポーネント {{ic|pam_unix.so}} はユーザーの認証情報 (パスワード) を確認するタスクを実行します。ユーザの公式パスワードが空の場合、モジュールはデフォルトでユーザーからサービスへのアクセスを許可しません。
- 後者が {{ic|pam_permit.so}} が使われている理由です。上記の2行の制御値 {{ic|required}} と {{ic|optional}} を取り替えるだけでパスワード認証は無効化されます。つまり、すべてのユーザはパスワードを入力しなくてもログインできるようになります。


次に、反対の例として、デフォルト設定で以下のファイルを作成した場合:
次に、反対の例として、/etc/pam.d/ にある {{ic|pam_nologin.so}} のデフォルト設定を使って、以下のファイルを作成すると:
# touch /etc/nologin
# touch /etc/nologin
root 以外のユーザーは全くログインできなくなります (root ログインが許可されるのは Arch Linux の別のデフォルト設定です)。作成したファイルをコンソールから削除すれば再度ログインができるようになります。
root 以外の全ユーザはログインできなくなります (root ログインが許可されている場合。これは Arch Linux のデフォルトです)。再びログインできるようにするには、このファイルを削除してください。可能であれば、このファイルを作成したコンソールから。


上記の説明を踏まえて、特定のユースケースにおける設定について [[#PAM スタックとモジュールの設定|PAM スタックとモジュールの設定]]を見てください。
上記の説明を踏まえて、特定のユースケースにおける設定について [[#PAM スタックとモジュールの設定]] を見てください。


== 設定方法 ==
== 設定方法 ==


このセクションでは PAM の設定に変更を適用する方法や新しい PAM モジュールを PAM スタックに追加する方法が載っている記事をまとめています。大抵の場合、モジュールの man ページは {{ic|.so}} 拡張子を省くことで閲覧することができます。
このセクションでは、PAM の設定に変更を適用する方法や新しい特別な PAM モジュールを PAM スタックに追加する方法が載っている記事をまとめています。大抵の場合、モジュールの man ページは {{ic|.so}} 拡張子を省くことで閲覧することができます。


=== セキュリティパラメータの設定 ===
=== セキュリティパラメータの設定 ===
94行目: 105行目:
:{{ic|pam_cracklib.so}} を使って強固なパスワードを強制する方法。
:{{ic|pam_cracklib.so}} を使って強固なパスワードを強制する方法。
* [[セキュリティ#3回ログインを失敗したユーザーをロックアウトする]]
* [[セキュリティ#3回ログインを失敗したユーザーをロックアウトする]]
:{{ic|pam_tally.so}} を使ってログインの試行回数を制限する方法。
:{{ic|pam_faillock.so}} を使ってログインの試行回数を制限する方法。
* [[セキュリティ#特定のユーザーだけに許可を与える]]
* [[セキュリティ#特定のユーザーだけに許可を与える]]
:{{ic|pam_wheel.so}} を使ってユーザーのログインを制限する。
:{{ic|pam_wheel.so}} を使ってユーザーのログインを制限する。
* [[en2:Realtime process management#Configuring PAM|リアルタイムプロセス管理#PAM の設定]]と[[セキュリティ#プロセスの数を制限する]]
* [[リアルタイムプロセス管理#PAM の設定]] と [[セキュリティ#プロセスの数を制限する]]
:{{ic|pam_limits.so}} を付かてシステムのプロセス数を制限する方法。
:{{ic|pam_limits.so}} を使ってシステムのプロセス数を制限する方法。
* [[環境変数#pam_env を使う]]
⚫
:{{ic|pam_env.so}} を使って環境変数を設定する方法。


=== PAM スタックとモジュールの設定 ===
=== PAM スタックとモジュールの設定 ===


以下の記事では特定のユースケースにあわせて [[#PAM ベーススタック|PAM ベーススタック]]を変更する方法が載っています。
以下の記事では、特殊なユースケースにあわせて [[#PAM ベーススタック]] を変更する方法が載っています。


⚫
; [[pam_mount]]: {{ic|pam_mount.so}} を使って、暗号化されたディレクトリパスをユーザーのログイン時に自動的にマウントする例が載っています。
[[公式リポジトリ]]に存在する PAM モジュール:
; [[ECryptfs#自動マウント]]: {{ic|pam_ecryptfs.so}} を使用して、暗号化されたディレクトリを自動でマウントします。
* [[pam_mount]]
:{{ic|pam_mount.so}} を使ってユーザーのログイン時に暗号化されたディレクトリパスを自動的にマウントする例が載っています。
; [[Dm-crypt/ログイン時にマウント]]: {{ic|pam_exec.so}} を使用してユーザーのログイン時にカスタムスクリプトを実行する方法。
⚫
; [[Active Directory Integration#PAM の設定]]: {{ic|pam_winbind.so}} と {{ic|pam_krb5.so}} を使用して Active Directory ([[LDAP]]、[[Kerberos]]) サービスでユーザーの認証を行います。
* [[ECryptfs#自動マウント]]
; [[LDAP 認証]]と [[LDAP 認証#NSS と PAM]] セクション: {{ic|pam_ldap.so}} による LDAP クライアントの統合やサーバーサイド認証に関する記事。
⚫
:{{ic|pam_ecryptfs.so}} を使用して暗号化されたディレクトリを自動でマウントします。
; [[YubiKey#PAM を用いた Linux ユーザ認証]]: PAM を用いて、U2F ({{ic|pam_u2f.so}}) や、YubiKey によって提供されているプロプライエタリな Yubico OTP 実装 ({{ic|pam_yubico.so}}) を使用する方法が説明されています。
* [[en2:Dm-crypt/Mounting at login#PAM configuration|Dm-crypt/ログイン時にマウント#PAM の設定]]
:{{ic|pam_exec.so}} を使用してユーザーのログイン時にカスタムスクリプトを実行する方法。
; [[pam_oath]]: {{ic|pam_oath.so}} を用いて、ソフトウェアベースの二要素認証を実装する例があります。
; [[fprint]]: {{ic|pam_fprintd.so}} を使って指紋認証をセットアップします。
* [[Active Directory Integration#PAM の設定]]
; [[pam_autologin]]: ユーザ名とパスワードを保存して自動的にログインします。
⚫
:{{ic|pam_winbind.so}} と {{ic|pam_krb5.so}} を使用して Active Directory (LDAP, Kerberos) サービスでユーザーの認証を行います。
⚫
; [[pam_usb]]: USB デバイスを使って認証 (任意で二要素認証) を行うように {{ic|pam_usb.so}} を設定する方法。
* [[LDAP 認証]]と [[LDAP 認証#NSS と PAM]] セクション
:{{ic|pam_ldap.so}} による LDAP クライアントの統合やサーバーサイド認証に関する記事。
; [[SSH 鍵#pam_ssh]]: {{ic|pam_ssh.so}} を使ってリモートユーザーとして認証します。
⚫
; [[pam_abl]]: {{ic|pam_abl.so}} を使って SSH からのブルートフォース攻撃を抑える方法が説明されています。
* [[Yubikey#SSH で2段階認証]]
⚫
; [[EncFS#.2Fetc.2Fpam.d.2F|EncFS]]: {{ic|pam_encfs.so}} で自動マウント。
:PAM スタックの {{ic|pam_yubico.so}} を使ってプロプライエタリな Yubikey を使って認証を行う。
; [[Google Authenticator]]: {{ic|pam_google_authenticator.so}} で二要素認証を設定する方法。
* [[pam_oath]]
⚫
; [[Very Secure FTP Daemon#PAM と仮想ユーザー]]: {{ic|pam_pwdfile.so}} で FTP chroot を設定し、ローカルのシステムアカウントがなくてもユーザーを認証する方法。
:{{ic|pam_oath.so}} による二段階認証を使用するソフトウェアを実装する例。

[[Arch User Repository]] に存在する PAM モジュール:
* [[pam_usb]]
⚫
:USB デバイスを使って認証を行うように {{ic|pam_usb.so}} を設定する方法。
* [[SSH 鍵#pam_ssh]]
:{{ic|pam_ssh.so}} を使ってリモートユーザーとして認証。
* [[pam_abl]]
⚫
:{{ic|pam_abl.so}} を使って SSH からのブルートフォース攻撃を抑える方法。
* [[EncFS#.2Fetc.2Fpam.d.2F|EncFS]]
⚫
:{{ic|pam_encfs.so}} で自動マウント。
* [[Google Authenticator]]
⚫
:{{ic|pam_google_authenticator.so}} で二段階認証を設定する方法。
* [[Very Secure FTP Daemon#PAM と仮想ユーザー]]
⚫
:{{ic|pam_pwdfile.so}} で FTP chroot を設定してローカルのシステムアカウントがなくてもユーザーを認証する方法。


== 他の PAM パッケージ ==
== 他の PAM パッケージ ==
140行目: 139行目:
PAM に関連する汎用的なユーティリティは以下の通りです:
PAM に関連する汎用的なユーティリティは以下の通りです:


* {{App|[https://github.com/ArchLinux-x32/libx32-pam libx32_pam]|Arch Linux PAM x32 ABI ライブラリ。|http://linux-pam.org/|{{Aur|libx32-pam}}}}
* {{App|[https://linux.die.net/man/1/pamtester Pamtester]|Pluggable Authentication Module (PAM) の機能をテストするプログラム。|https://pamtester.sourceforge.net/|{{Aur|pamtester}}}}


⚫
AUR には [https://aur.archlinux.org/packages/?SeB=k&K=pam PAM] というキーワードタグが存在しますが、全てのパッケージにタグが付いているわけではありません。そのため、場合によっては[https://aur.archlinux.org/packages/?K=pam パッケージの説明文]を検索する必要があります。
* {{App|[http://linux.die.net/man/1/pamtester Pamtester]|Pluggable Authentication Module (PAM) の機能をテストするプログラム。|http://pamtester.sourceforge.net/|{{Aur|pamtester}}}}


== ヒントとテクニック ==
⚫
AUR には [https://aur.archlinux.org/packages/?O=0&SeB=k&K=pam&outdated=off&SB=p&SO=d&PP=50&do_Search=Go PAM] というキーワードタグが存在しますが、全てのパッケージにタグが付いているわけではありません。そのため、場合によっては [https://aur.archlinux.org/packages/?O=0&SeB=nd&K=pam&outdated=off&SB=p&SO=d&PP=50&do_Search=Go パッケージの説明文] で検索する必要があります。

=== ロックアウト ===

間違ったパスワードを何度も入力したために PAM によってロックアウトされた場合は、[[セキュリティ#3回ログインを失敗したユーザーをロックアウトする]] を参照してください。


== 参照 ==
== 参照 ==


* [http://www.linux-pam.org/ linux-pam.org] - プロジェクトホームページ
* [http://www.linux-pam.org/ linux-pam.org] - プロジェクトホームページ
* [https://www.ibm.com/developerworks/linux/library/l-pam/index.html Understanding and configuring PAM] - An introductory article
* [https://web.archive.org/web/20211124031525/https://developer.ibm.com/tutorials/l-pam/ Understanding and configuring PAM] - 入門記事

{{TranslationStatus|PAM|2024-05-23|778161}}

2024年9月5日 (木) 21:04時点における最新版

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 は実行時に動的にリンクされます。例えば:
$ 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 を利用するため、ポリシーが必ず必要です。

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

さらに、各標準モジュールのブラウズ可能な man ページが様々なガイドと共に含まれている広範なドキュメントが /usr/share/doc/Linux-PAM/index.html にインストールされます。

警告 PAM 設定に対して変更を加えると、ユーザ認証に根本的な影響を及ぼします。誤った変更を加えてしまうと、すべてのユーザがログインできなくなってしまったり、すべてのユーザがログインできるようになってしまったりする可能性があります。
ヒント 設定を変更しても、すでに認証されているユーザには影響しません。PAM の動作確認をするには、テスト対象のマシンにできればローカルにログインして、そのセッションを維持した状態で開発を行い、別のコンソールで他のユーザとしてログインして結果を確認すると良いでしょう。

例

この記事またはセクションの正確性には問題があります。
理由: (1) nullok の使用 (2) pam が optional なモジュールを処理する方法。英語版の議論ページ: en:Talk:PAM#Accuracy of PAM#Examples (議論: トーク:PAM#)

上の警告について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 デバイスを使って認証 (任意で二要素認証) を行うように 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) の機能をテストするプログラム。
https://pamtester.sourceforge.net/ || pamtesterAUR

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

ヒントとテクニック

ロックアウト

間違ったパスワードを何度も入力したために PAM によってロックアウトされた場合は、セキュリティ#3回ログインを失敗したユーザーをロックアウトする を参照してください。

参照

翻訳ステータス: このページは en:PAM の翻訳バージョンです。最後の翻訳日は 2024-05-23 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。