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
以下のように上から順番に処理されていきます。赤い矢印がモジュールによる認証に成功した場合。灰色の矢印が失敗した場合です。
- control flagがrequiredなので成功しても失敗しても次のモジュールへ移動します。例えば、認証には失敗しても続けてエラーに関する処理を行いたいときなどに利用します。
- requisiteなので成功すれば次のモジュールへ。失敗すると認証処理を停止します。例えば、認証自体はrequiredで行い、本フラグではユーザーIDを限定する、という場合に利用します。
- sufficientなので上(required)の処理が全て成功して、本フラグも成功すれば次のモジュールを無視して、次のmodule interfaceであるaccountへ処理を移します。失敗の場合は次のモジュールを参照します。
- optionalなので他のモジュールがない場合だけ認証の成否に関係します。この場合、結果は無視されます。
- 上の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ライブラリについて」解説します。
「以下のようなPAM設定ファイルがあるとします。」のところで
account required pam_unix.so
と書いてありますが、その下の図の⑤では
account sufficient pam_unix.so
に変わっているようですが…
失礼しました。修正しておきました。