「PAM」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:カーネル Category:セキュリティ en:PAM {{Related articles start}} {{Related|セキュリティ}} {{Related|pam_mount}} {{Related|pam_usb}} {...」)
 
35行目: 35行目:
 
=== 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:
 
   
* the {{Pkg|pambase}} package, which contains the base-stack of Arch Linux specific PAM configuration to be used by applications, and
+
* {{Pkg|pambase}} パッケージ。アプリケーションによって使用される Arch Linux PAM 設定のベーススタックが含まれています。
  +
* 他のベースパッケージ。例えば、{{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-aware''' アプリケーションはポリシーを {{ic|/etc/pam.d}} にインストールして PAM のスタックに依拠・統合する必要があります。アプリケーションがポリシーをインストールしなかった場合、デフォルトで {{ic|/etc/pam.d/other}} ポリシーが適用されます。既定では許容的なポリシーがインストールされます ({{Bug|48650}})。
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)}}
the ''login'' application is pam-aware and '''must''', therefore, have a policy.}}
+
''login'' アプリケーションは pam-aware であり、ポリシーが必ず必要です。}}
   
  +
PAM パッケージに付属しているマニュアルページ ''pam(8)'' と ''pam.d(5)'' には設定ファイルの標準的な内容について説明があります。特に、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.}}
 
   
 
==== サンプル ====
 
==== サンプル ====
   
  +
上の警告について2つの例で説明します。
Two short examples to illustrate the above warning.
 
   
  +
まず、以下の2行について:
First, we take the following two lines:
 
 
{{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}}
   
  +
{{ic|man pam_unix}} より: "認証コンポーネント {{ic|pam_unix.so}} はユーザーのログイン情報 (パスワード) を確認するタスクを実行します。公式パスワードが空の場合、モジュールはデフォルトでユーザーからサービスへのアクセスを許可しません"。後者が {{ic|pam_permit.so}} が使われている理由です。上記の2行の制御値 {{ic|required}} と {{ic|optional}} を取り替えるだけでパスワード認証は無効化されます。パスワードを入力しなくても誰でもログインできるようになります。
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.
 
   
  +
次に、反対の例として、デフォルト設定で以下のファイルを作成した場合:
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 スタックとモジュールの設定|PAM スタックとモジュールの設定]]を見てください。
With that as background, see [[#PAM stack and module configuration]] for particular use-case configuration.
 
   
 
== 設定方法 ==
 
== 設定方法 ==

2016年5月29日 (日) 18:32時点における版

関連記事

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 スタックとモジュールの設定

以下の記事では特定のユースケースにあわせて 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 による二段階認証を使用するソフトウェアを実装する例。

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

参照