Linuxの各アプリケーションが共通して利用する「PAM認証」について


投稿日:2012年11月7日
  • 15
  • 0


Linuxのユーザ認証に関することならPAM認証におまかせ!

前回はスパムメール対策にユーザー認証を利用することを解説しました。
Linuxではメールサーバだけでなく、多くのアプリケーションでユーザー認証を行います。ユーザー認証が必要なソフト全てに、別々の認証機構やデータベースを追加するというのは無駄が多くなります。

そのため「PAM(パム:Pluggable Authentication Modules)」という「各ソフト共通で利用できる認証システム」が用意されています。これからメールサーバにSMTP認証を導入するにあたって「PAM認証」を利用するので、仕組みを理解しておきましょう。


PAM認証について

PAM認証」を簡単に解説すると下の図のようになります。
このイラストの例で言えば、「DNSサーバ」と「SMTPサーバ」が共にPAM認証を利用。「PAM認証」に利用されている認証機構はシャドウパスワードなどを利用する「UNIXユーザー認証」という構成になっています。

実際にはソフトごとに参照するユーザーデータベースを変えたり、許可の範囲を限定したりと柔軟に構成することができます。
PAM認証の設定ファイルは「/etc/pam.d/」に保存されています。雰囲気をつかむために実際にファイルを開いて確認してみます。

※コマンドラインの見方
コマンド」「引数、その他」「コメント」「#(rootユーザ)」「$(一般ユーザ)」

# cd /etc/pam.d/ ←PAM認証の設定ファイルがあるディレクトリに移動

# ls ←リスト表示(ズラーッとソフトの名前が出てくると思います)

# vi webmin ←試しにwebminの設定ファイルを開きます。
#%PAM-1.0
auth    required        pam_unix.so     nullok
account required        pam_unix.so
session required        pam_unix.so

このように、スペース区切りで、4つのフィールドに別れているのが分かると思います。これがPAM認証の設定ファイルの書式です。この設定は「認証にUNIXユーザー認証を使う(パスが空欄でも許可)」という指定になります。

「/etc/pam.d/」の書式

PAM認証は以下のような4つのセクションで構成されています。
<module interface> <control flag> <module name> <module arguments>
各セクションについて詳しく見ていきます。

module interface(PAMモジュールインターフェース)

認証プロセスにおいてモジュールをどのように利用するのかを指定します。

auth 認証の許可、認証の方法などに関するモジュール
account アカウント有効期間や有効性に関するモジュール
password パスワードの設定、確認に関するモジュール
session ユーザーセッションを設定、管理に関するモジュール

上から順番に「auth」でユーザーの確認が成功すると次の「account」へ。アカウントの有効性が確認されると「password」でパスワードを確認して、「session」で接続許可するパスを確認。という流れでユーザー認証を行います。

control flag(制御フラグ)

各モジュールが「成功」した場合、「失敗」した場合にどのような処理を行うかを指定します。

required このモジュールが成功しないと全体は認証されない。失敗しても次のモジュールがある場合、続けてそちらを参照する。requiredエラーになる。
requisite 同じく許可されないと認証されないが、失敗した時点で次を参照すること無くエラーになる。先にrequiredが失敗していればrequired。このフラグで初めて失敗すればrequisiteエラーになる。
sufficient 他のモジュールが成功して、このモジュールも成功すると、以降のモジュールは参照せず認証されます。失敗した場合optionalエラーになる。
optional 他に参照すべきモジュールがない場合だけ、成功すると認証される。その他のモジュールがある場合は無視される。

module name(モジュール名)

/lib64/security(32bitの場合は/lib/security)」にあるモジュールを指定します。

module arguments(モジュールの引数)

ユーザーIDが何番以上」「再度パスワードを要求」「パスワードなしでも許可」など、モジュールに引数を渡します。


PAMによる認証の流れ

文章だけだとわかりにくいので、サンプルでPAM認証の流れを見てみます。

以下のようなPAM設定ファイルがあるとします。

auth		required		pam_env.so
auth		requisite		pam_unix.so
auth		sufficient	pam_unix.so
auth		optional		pam_unix.so
account	sufficient		pam_unix.so

以下のように上から順番に処理されていきます。赤い矢印モジュールによる認証に成功した場合灰色の矢印失敗した場合です。

  1. control flagがrequiredなので成功しても失敗しても次のモジュールへ移動します。例えば、認証には失敗しても続けてエラーに関する処理を行いたいときなどに利用します。
  2. requisiteなので成功すれば次のモジュールへ。失敗すると認証処理を停止します。例えば、認証自体はrequiredで行い、本フラグではユーザーIDを限定する、という場合に利用します。
  3. sufficientなので上(required)の処理が全て成功して、本フラグも成功すれば次のモジュールを無視して、次のmodule interfaceであるaccountへ処理を移します。失敗の場合は次のモジュールを参照します。
  4. optionalなので他のモジュールがない場合だけ認証の成否に関係します。この場合、結果は無視されます。
  5. 上のauthが認証に成功すれば、accountの処理に入る。

このように「PAM認証」ではモジュールの組み合わせによって柔軟な認証が可能です。
この柔軟な仕組みによって、ソフトの環境に合わせたユーザー認証機構を構築することができます。

PAM認証」に関する各設定ファイルは「/etc/pam.d」、各モジュールは「/lib64/security(32bitの場合は/lib/security)」にあります。さらに詳しく構造を知りたい方は調べてみてください。合わせて下記リンクも目を通すと理解が深まります。

PAMについて参考になるWebサイト

Red Hat Enterprise Linux 4: リファレンスガイド
oracle Solaris のシステム管理 (セキュリティサービス)


これで「UNIX認証」に続き「PAM認証」についても学びました。PostfixでSMTP認証を利用するには最後に1つ「SASL認証」についても理解する必要があります。
次は「PostfixのSMTP認証で利用するCyrus SASLライブラリについて」解説します。



現在のページを共有する



現在のページに関連する記事

Linuxの各アプリケーションが共通して利用する「PAM認証」について PostfixのSMTP認証で利用するCyrus SASLライブラリについて
Linuxの各アプリケーションが共通して利用する「PAM認証」について SMTPサーバのスパムメール対策「OP25B」と「ユーザー認証」について
Linuxの各アプリケーションが共通して利用する「PAM認証」について メールサーバ構築のためOpenSSL、Postfix、Dovecotのインストールと設定
Linuxの各アプリケーションが共通して利用する「PAM認証」について Linuxの基本の基本。Linuxの基本的なディレクトリ構成
Linuxの各アプリケーションが共通して利用する「PAM認証」について wp_remote_get()でAuthentication required!が出る場合の対処法
Linuxの各アプリケーションが共通して利用する「PAM認証」について Capability Moduleをモジュール化することで起こる様々な不具合
Linuxの各アプリケーションが共通して利用する「PAM認証」について サーバのログを監視するSwatchの導入方法と使い方を解説

おすすめの記事

WordPressの新・旧ループからカスタムクエリ・アーカイブまで徹底解説

WordPressの新・旧ループからカスタムクエリ・アーカイブまで徹…

今さら聞けない、変数や関数の命名規則と、まず覚えるべき英単語200

今さら聞けない、変数や関数の命名規則と、まず覚えるべき英単…

サーバで管理していたWordPressをローカル環境に移行する方法

サーバで管理していたWordPressをローカル環境に移行する方法

Windows 10でpsd形式のファイルをサムネイル表示する方法

Windows 10でpsd形式のファイルをサムネイル表示する方法

公式ドキュメントよりも詳しいTinyMCEの使い方(基本編)

公式ドキュメントよりも詳しいTinyMCEの使い方(基本編)

シンプルなスパムコメント対策プラグイン「Simple AntiSpam」を作成しました

シンプルなスパムコメント対策プラグイン「Simple AntiSpam」を…

ページ編集の手間を劇的に減らす、Custom Field Templateでカスタムフィールドを作る方法

ページ編集の手間を劇的に減らす、Custom Field Templateでカス…

fluentdとNorikraでDoS攻撃を遮断し、メールで通知する方法

fluentdとNorikraでDoS攻撃を遮断し、メールで通知する方法


いただいたコメントなど

  1. 匿名 のコメント:

    「以下のようなPAM設定ファイルがあるとします。」のところで
    account required pam_unix.so
    と書いてありますが、その下の図の⑤では
    account sufficient pam_unix.so
    に変わっているようですが…

コメントを残す

コメントは認証制のため、すぐには反映されません。

プログラミングに関する質問は「日本語でプログラミングの悩みを解決するQ&Aサイト sukegra」をご利用ください。