「PAM」の版間の差分
(ページの作成:「Category:カーネル Category:セキュリティ en:PAM {{Related articles start}} {{Related|セキュリティ}} {{Related|pam_mount}} {{Related|pam_usb}} {...」) |
Kusanaginoturugi (トーク | 投稿記録) (二要素認証に用語を統一) |
||
(5人の利用者による、間の16版が非表示) | |||
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/ Linux Pluggable Authentication Modules] (PAM) はシステム共通のユーザ認証フレームワークです。[https://web.archive.org/web/20220402070708/http://linux-pam.org/whatispam.html プロジェクトホームページ] からの引用: |
− | :PAM は認証スキームに依存しないプログラムを開発する |
+ | :PAM は認証スキームに依存しないプログラムを開発する手段を提供します。認証時には「認証モジュール」が使用されます。どの認証モジュールが使用されるかはローカルのシステム設定にあわせて決められるため、ローカルのシステム管理者が自由に設定することができます。 |
− | この記事ではローカル |
+ | この記事では、ローカルユーザ及びリモートユーザを PAM で認証するための Arch Linux ベースセットアップのデフォルトを説明します。デフォルト設定に変更を加える方法はトピックごとに別々に分かれています。 |
== インストール == |
== インストール == |
||
− | {{Pkg|pam}} パッケージは base |
+ | {{Pkg|pam}} パッケージは {{Pkg|base}} [[メタパッケージ]] に含まれているため、通常、最初からシステムにインストールされています。PAM モジュールは {{ic|/usr/lib/security}} だけにインストールされます。 |
− | リポジトリには多数の PAM パッケージが存在します。[[#設定方法]]に例を示します。 |
+ | リポジトリには多数のオプション PAM パッケージが存在します。[[#設定方法]]に例を示します。 |
− | == 設定 == |
+ | == 設定 == |
− | PAM に関係する {{ic|/etc}} のパスは多数存在します。{{ic|<nowiki>pacman - |
+ | PAM に関係する {{ic|/etc}} のパスは多数存在します。作成されたデフォルト設定ファイルを確認するには {{ic|<nowiki>pacman --query --list pam | grep /etc</nowiki>}} を実行してください。これらは、モジュールの [[#セキュリティパラメータ]] か [[#PAM ベーススタック]] 設定のいずれかに関連しています。 |
− | === セキュリティパラメータ === |
+ | === セキュリティパラメータ === |
− | {{ic|/etc/security}} には認証メソッドが用意している変数のシステム |
+ | {{ic|/etc/security}} パスには、認証メソッドが用意している変数のシステム固有の設定が含まれます。ベースインストールでは、デフォルトの上流の設定ファイルが生成されます。 |
− | Arch Linux は |
+ | 注意点として、Arch Linux はこれらのファイルに対してディストリビューション固有の設定を提供しません。例えば、{{ic|/etc/security/pwquality.conf}} ファイルを使うことで、パスワードの品質に関するシステム全体のデフォルト設定を定義することができます。ただし、この設定を有効にするには {{ic|pam_pwquality.so}} モジュールをモジュールの [[#PAM ベーススタック]] に追加しなくてはなりません。このモジュールはデフォルトでは追加されていません。 |
− | + | 利用可能な設定のいくつかは [[#セキュリティパラメータの設定]] を見てください。 |
|
=== PAM ベーススタック === |
=== PAM ベーススタック === |
||
+ | {{ic|/etc/pam.d/}} パスは、アプリケーションを各システムの認証スキームとリンクさせるための PAM 設定専用です。システムベースをインストールする際に以下のパッケージによって作成されます: |
||
− | The {{ic|/etc/pam.d/}} path is exclusive for the PAM configuration to link the applications to the individual systems' authentication schemes. During installation of the system base it is populated by: |
||
+ | * {{Pkg|pambase}} パッケージ。アプリケーションによって使用される、Arch Linux 固有の PAM 設定のベーススタックが含まれています。 |
||
− | * the {{Pkg|pambase}} package, which contains the base-stack of Arch Linux specific PAM configuration to be used by applications, and |
||
+ | * 他のベースパッケージ。例えば、{{Pkg|util-linux}} は ''login'' などのプログラムの設定を追加し、{{Pkg|shadow}} パッケージはユーザーデータベースを防護・修正する Arch Linux のデフォルト設定を追加します ([[ユーザーとグループ]]を参照)。 |
||
− | * other base packages. For example, {{Pkg|util-linux}} adds configuration for the central ''login'' and other programs, the {{Pkg|shadow}} package adds the Arch Linux defaults to secure and modify the user database (see [[Users and groups]]). |
||
+ | ベースインストールの様々な設定ファイルは互いにリンクしており、実行時にスタックされます。例えば、ローカルユーザのログオン時、''login'' アプリケーションは {{ic|system-local-login}} ポリシーを読み込んでから、他のファイルを読み込みます: |
||
− | The different configuration files of the base installation link together, are stacked during runtime. For example, on a local user logon, the ''login'' application sources the {{ic|system-local-login}} policy, which in turn sources others: |
||
{{hc|/etc/pam.d/| |
{{hc|/etc/pam.d/| |
||
login -> system-local-login -> system-login -> system-auth}} |
login -> system-local-login -> system-login -> system-auth}} |
||
+ | アプリケーションによって、使用されるパスも様々です。例えば、{{pkg|openssh}} は {{ic|sshd}} PAM ポリシーをインストールします: |
||
− | For a different application, a different path may apply. For example, {{pkg|openssh}} installs its {{ic|sshd}} PAM policy: |
||
{{hc|/etc/pam.d/| |
{{hc|/etc/pam.d/| |
||
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}} に変更を加えた場合、ローカルログインとリモートログインに影響します。 |
||
− | Consequently, the choice of the configuration file in the stack matters. For the above example, a special authentication method could be required for {{ic|sshd}} only, or all remote logins by changing {{ic|system-remote-login}}; both changes would not affect local logins. Applying the change to {{ic|system-login}} or {{ic|system-auth}} instead would affect local and remote logins. |
||
+ | {{ic|sshd}} の例でわかる通り、'''pam を利用する'''アプリケーションは、PAM スタックと適切に統合・利用するために、ポリシーを {{ic|/etc/pam.d}} にインストールする必要があります。アプリケーションがこれを行わない場合、ログインを拒否し警告をログに記録する {{ic|/etc/pam.d/other}} デフォルトポリシーが適用されます。 |
||
− | Like the example of {{ic|sshd}}, any '''pam-aware''' application is required to install its policy to {{ic|/etc/pam.d}} in order to integrate and rely on the PAM stack appropriately. If an application fails to do it, the {{ic|/etc/pam.d/other}} policy is applied per default. A permissive policy for it is installed per default ({{Bug|48650}}). |
||
+ | {{Tip|PAM は実行時に動的にリンクされます。例えば: |
||
− | {{Tip|PAM is dynamically linked at runtime. For example: |
||
− | {{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 を利用するため、ポリシーが'''必ず'''必要です。}} |
||
− | the ''login'' application is pam-aware and '''must''', therefore, have a policy.}} |
||
+ | PAM パッケージのマニュアルページ {{man|8|pam}} と {{man|5|pam.d}} には、設定ファイルの標準的な内容について説明があります。特に、4つの PAM グループ (account、authentication、password、そして session management) と、モジュールのスタックと挙動を設定する制御値について詳しく書かれています。 |
||
− | The PAM package manual pages ''pam(8)'' and ''pam.d(5)'' describe the standardized content of the configuration files. In particular they explain the four PAM groups: account, authentication, password, and session management, as well as the control values that may be used to configure stacking and behaviour of the modules. |
||
+ | さらに、各標準モジュールのブラウズ可能な man ページが様々なガイドと共に含まれている広範なドキュメントが {{ic|/usr/share/doc/Linux-PAM/index.html}} にインストールされます。 |
||
− | Additionally, an extensive documentation is installed to {{ic|/usr/share/doc/Linux-PAM/index.html}} which, among various guides, contains browsable man pages for each of the standard modules. |
||
+ | {{Warning|PAM 設定に対して変更を加えると、ユーザ認証に根本的な影響を及ぼします。誤った変更を加えてしまうと、'''すべて'''のユーザがログインできなくなってしまったり、'''すべて'''のユーザがログインできるようになってしまったりする可能性があります。}} |
||
− | {{Warning|Changes to the PAM configuration fundamentally affect user authentication. Erroneous changes can result in that '''no''' or '''any''' user can log in. Since changes are not effective for already authenticated users, a good precaution is to perform changes with one user and test the result with another user in a separate console.}} |
||
+ | {{Tip|設定を変更しても、すでに認証されているユーザには影響しません。PAM の動作確認をするには、テスト対象のマシンにできればローカルにログインして、そのセッションを維持した状態で開発を行い、別のコンソールで他のユーザとしてログインして結果を確認すると良いでしょう。}} |
||
− | ==== サンプル ==== |
||
+ | ==== 例 ==== |
||
− | Two short examples to illustrate the above warning. |
||
+ | {{Accuracy|(1) nullok の使用 (2) pam が optional なモジュールを処理する方法。英語版の議論ページ: [[:en:Talk:PAM#Accuracy of PAM#Examples]]}} |
||
− | First, we take the following two lines: |
||
+ | |||
+ | 上の警告について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}} によると: |
||
− | From {{ic|man pam_unix}}: "The authentication component {{ic|pam_unix.so}} performs the task of checking the users credentials (password). The default action of this module is to not permit the user access to a service if their official password is blank. " - the latter being what {{ic|pam_permit.so}} is used for. Simply swapping the control values {{ic|required}} and {{ic|optional}} for both lines is enough to disable password authentication, i.e. any user may logon without providing a password. |
||
+ | :認証コンポーネント {{ic|pam_unix.so}} はユーザーの認証情報 (パスワード) を確認するタスクを実行します。ユーザの公式パスワードが空の場合、モジュールはデフォルトでユーザーからサービスへのアクセスを許可しません。 |
||
+ | - 後者が {{ic|pam_permit.so}} が使われている理由です。上記の2行の制御値 {{ic|required}} と {{ic|optional}} を取り替えるだけでパスワード認証は無効化されます。つまり、すべてのユーザはパスワードを入力しなくてもログインできるようになります。 |
||
+ | 次に、反対の例として、/etc/pam.d/ にある {{ic|pam_nologin.so}} のデフォルト設定を使って、以下のファイルを作成すると: |
||
− | Second, as the contrary example, per default configuration creating the following file: |
||
# touch /etc/nologin |
# touch /etc/nologin |
||
+ | root 以外の全ユーザはログインできなくなります (root ログインが許可されている場合。これは Arch Linux のデフォルトです)。再びログインできるようにするには、このファイルを削除してください。可能であれば、このファイルを作成したコンソールから。 |
||
− | results in that no user other than root may login (if root logins are allowed, another default for Arch Linux). To allow logins again, remove the file from the console you created it with. |
||
+ | 上記の説明を踏まえて、特定のユースケースにおける設定について [[#PAM スタックとモジュールの設定]] を見てください。 |
||
− | With that as background, see [[#PAM stack and module configuration]] for particular use-case configuration. |
||
== 設定方法 == |
== 設定方法 == |
||
− | このセクションでは |
+ | このセクションでは、PAM の設定に変更を適用する方法や新しい特別な PAM モジュールを PAM スタックに追加する方法が載っている記事をまとめています。大抵の場合、モジュールの man ページは {{ic|.so}} 拡張子を省くことで閲覧することができます。 |
=== セキュリティパラメータの設定 === |
=== セキュリティパラメータの設定 === |
||
94行目: | 105行目: | ||
:{{ic|pam_cracklib.so}} を使って強固なパスワードを強制する方法。 |
:{{ic|pam_cracklib.so}} を使って強固なパスワードを強制する方法。 |
||
* [[セキュリティ#3回ログインを失敗したユーザーをロックアウトする]] |
* [[セキュリティ#3回ログインを失敗したユーザーをロックアウトする]] |
||
− | :{{ic| |
+ | :{{ic|pam_faillock.so}} を使ってログインの試行回数を制限する方法。 |
* [[セキュリティ#特定のユーザーだけに許可を与える]] |
* [[セキュリティ#特定のユーザーだけに許可を与える]] |
||
:{{ic|pam_wheel.so}} を使ってユーザーのログインを制限する。 |
:{{ic|pam_wheel.so}} を使ってユーザーのログインを制限する。 |
||
− | * [[ |
+ | * [[リアルタイムプロセス管理#PAM の設定]] と [[セキュリティ#プロセスの数を制限する]] |
− | :{{ic|pam_limits.so}} を |
+ | :{{ic|pam_limits.so}} を使ってシステムのプロセス数を制限する方法。 |
+ | * [[環境変数#pam_env を使う]] |
||
+ | :{{ic|pam_env.so}} を使って環境変数を設定する方法。 |
||
− | === PAM スタックとモジュールの設定 === |
+ | === PAM スタックとモジュールの設定 === |
− | 以下の記事では特 |
+ | 以下の記事では、特殊なユースケースにあわせて [[#PAM ベーススタック]] を変更する方法が載っています。 |
+ | ; [[pam_mount]]: {{ic|pam_mount.so}} を使って、暗号化されたディレクトリパスをユーザーのログイン時に自動的にマウントする例が載っています。 |
||
− | [[公式リポジトリ]]に存在する PAM モジュール: |
||
+ | ; [[ECryptfs#自動マウント]]: {{ic|pam_ecryptfs.so}} を使用して、暗号化されたディレクトリを自動でマウントします。 |
||
− | * [[pam_mount]] |
||
− | :{{ic| |
+ | ; [[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_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| |
+ | ; [[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:// |
+ | * {{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:// |
+ | * [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 パッケージのマニュアルページ 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 デバイスを使って認証 (任意で二要素認証) を行うように
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 - 入門記事