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


投稿日:2012年11月7日
  • 9
  • 2
  • 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ライブラリについて」解説します。



現在のページを共有する



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


おすすめの記事


いただいたコメントなど

  1. 匿名 のコメント:

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

コメントを残す

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