|
|
 |
| >IT技術情報>システム/サーバ運用>PAM認証 |
 |
 |
PAM認証
小川 典嗣
株式会社アイティーブースト
2003/10/22 |
|
 |
|
 |
 |
【 目次 】
1.はじめに
2.PAMの歴史
3.PAMの概要
4.PAM認証の流れ
5.PAM設定ファイル
6.system-auth
7.PAMモジュール
8.認証を他のサーバに依存するモジュール
9.最後に
|
 |
1.はじめに
Linuxでtelnetやftpなどを使用したい場合は基本的にログインという作業が必要なのは皆さんご存知でしょう。しかし、ユーザはなぜ同じパスワードでtelnetやftpなど別々のサービスにログインできるのでしょうか。
システムを利用するにはシステム上に登録された本人であることを証明する必要があります。Linuxではログインプロセスによって本人であることを検証します。ユーザがシステムにログインする際にはユーザ名とパスワードの提示を行い、システムの利用の可否や割り当てられた権限での作業を行うことができます。
Linuxでそのような認証処理を一元的に管理してくれるのがPAMと呼ばれる仕組みです。PAMの機能について理解しましょう。 |
2. PAMの歴史
従来のUNIXの認証方式は単純に/etc/passwdを参照するというものでした。しかし、現在のLinuxはセキュリティ確保のためMD5やシャドーパスワードなど様々な認証方法を採用するようになっています。
そのような状況ではユーザ認証が必要なプログラムは個別に 様々な認証方式に対応する必要が出てきます。これでは開発の手間ばかり増加してしまいます。
そこでアプリケーションからより簡単にユーザ認証のカスタマイズを行うために最近のLinuxおよびUNIXではPAMが利用されています。現在ではほとんどのディストリビューションのデフォルトで利用されており、また従来の認証が必要な際もPAMから呼び出されて利用されます。 |
3.PAMの概要
PAM(Pluggable
Authentication Modules)とは個々のサービスに必要な認証機能を提供してくれるものです。認証部分をサービスから切り離して管理しているので、認証方式を柔軟にカスタマイズすることができます。また設定ファイルも全て同じ書式で書かれているので設定を変更することも比較的簡単です。
このPAMの仕組みを適切に扱うにはサービスから認証モジュールへの流れを理解することが非常に重要です。プログラムにアクセスがあった場合の認証処理は認証モジュールが請け負います。つまり、認証モジュールはアプリケーションのプラグインとして動作します。このことについて詳しくは後程解説していきますが、このようにアプリケーションから認証処理を独立させることによって、認証方式を動的に変更することができます。(PAMの設定変更に関する特定のサービスの再起動などは不要です。)
またアプリケーションから見たインターフェイスが標準化されていますので、様々な認証を必要とするアプリケーションから利用することが可能です。よって、アプリケーションを作成する側にとっては、ユーザ認証の仕組みを考える必要がほとんどなくなるメリットもあります。
|
4. PAM認証の流れ
|
Linuxが起動してLoginプロンプトが表示されシステム上に登録されているユーザ名とパスワードを入力するとそのユーザに応じた権限でシステムを利用することができます。この当たり前の作業を日頃から行っていますが、このようなログインのプログラムやftpなどの特定のアプリケーションを利用する際にユーザ認証のプロセスが必要になります。まず大まかな認証手順について見ていきましょう。(図1)
【図1】PAM認証の流れ
|
|
まず(1)ではそのサービス自体が提供されていなければ接続を拒否されますが、特にPAMとは関係ないのでここでは言及しません。提供されていれば認証プロセスがPAMを呼び出します。
次に(2)でPAMは/etc/pam.d/ディレクトリにあるサービス固有の設定ファイルが存在するか確認します。存在すればその設定ファイルの内容に従い認証作業を行います。この認証作業はモジュールと呼ばれる様々な認証方法を定義したライブラリにより行われます。
サービス固有の設定ファイルが存在しなければ(3)の/etc/pam.d/otherファイルを確認します。このotherファイルは(2)のサービス固有の設定ファイルと同じ役目を果たします。しかしデフォルトで全ての認証を拒否する内容になっている為、サービス固有の設定ファイルが存在しなければ全て拒否をされる仕組みになっています。もちろん/etc/pam.d/otherの内容を変更して、寛容な認証を提供することもできますが、一般的に好ましくありません。
この仕組みを利用すると、サービスの設定ファイルの名前を変更や削除することで、認証プロセスを行った上でアクセス不可にすることも可能です。rexec
rlogin rshが/etc/pam.d/に存在する場合は隠しファイルに変更するなど利用できないようにするべきです。(リスト1)もっともサービスを停止させるなど他の方法でアクセスを拒否することの方が多いと思われますが。
|
5.PAM設定ファイル
|
loginやftpなどのPAMに認証を任せるプログラムをPAMクライアントと呼びます。PAMクライアントは自分自身のセキュリティを管理させる為にPAMライブラリを呼び出します。PAMライブラリは/etc/pam.d/ディレクトリ内のPAMクライアントと同じ名前の設定ファイルを参照してセキュリティーポリシーを実行するためのライブラリとライブラリを呼び出す順序が指定されます。この設定ファイルの内容によって様々な認証が行われます。
では実際に設定ファイルの内容を確認していきましょう。設定ファイルは複数行のモジュールで定義されます。各行は「タイプ」、「コントロールフラグ」、「モジュールパス」、「引数」で構成されており、上の行から順番に処理されていきます。(リスト2)はloginプログラムが利用する設定ファイルの内容です。
|
【リスト1】PAMの一般的な設定ファイル
| chfn chsh ftp kbdrate login other
passwd fexec rlogin rsh ssh su |
【リスト2】/etc/pam.d/login
|
タイプ |
コントロールフラグ
|
モジュールパス
|
引数
|
|
auth |
required
|
/lib/security/pam_securetty.so |
|
| auth |
required
|
/lib/security/pam_stack.so
|
service=system-auth
|
| auth |
required
|
/lib/security/pam_nologin.so |
|
| account |
required
|
/lib/security/pam_stack.so |
service=system-auth
|
| password |
required
|
/lib/security/pam_stack.so |
service=system-auth
|
| session |
required
|
/lib/security/pam_stack.so |
service=system-auth
|
| session |
optional
|
/lib/security/pam_console.so |
|
|
【リスト3】/etc/pam.conf
| サービス |
タイプ コントロールフラグ
|
モジュールパス
|
引数
|
|
login |
auth required
|
/lib/security/pam_stack.so |
service=system-auth |
|
|
本稿ではRedHat Linuxの7.2を例に説明をしていきます。ディストリビューションやバージョンの違いによっては多少設定内容やインストールされているモジュールの種類なども異なることがあるかもしれません。また/etc/pam.dディレクトリが存在しない場合もあります。その時は/etc/pam.confファイルの内容を確認してください。pam.confは複数のプログラムに対するPAMの設定を一つのファイルで行います。その為にどのプログラムの設定であるかをそれぞれのモジュールに指示をする必要があります。それ以外の仕組みは同じです。(リスト3)
|
● タイプ
タイプではどのように(何をする時に)その行のモジュールを利用するのか指定します。提供されるタイプには「auth」、「account」、「password」、「session」の4種類があります。この4つの役割を(リスト4)に記述しているので適宜参照して下さい。ここでは簡単な説明のみさせていただきます。
「auth」は主にログインなどのパスワード入力でユーザ認証を行う際にこのタイプで指定されたモジュールが参照されます。
「account」は「auth」以外の方法でユーザ認証を行うモジュールが参照されます。ユーザ認証の一部である為に「auth」タイプでの認証が成功した場合に引き続いて「account」が行われます。例えば時刻や利用する資源、ユーザの場所などでのチェックが主なものになります。またパスワードの有効期限なども/etc/shadowファイルを利用して確認します。
「password」はパスワードの設定や変更に使用されます。利用できるモジュールはあまり多くありません。
「session」はサービスに対する権限がユーザに実行される前、或いは実行された後に行われるモジュールです。ログインやログアウトの記録、ユーザが必要としている時にユーザの認証方法を更新します。
|
【リスト4】 タイプの種類
|
タイプ
|
内容
|
| auth |
認証を許可するかどうかです。ユーザが本物であるかを、パスワードなどの入力によって確認をします。また認証方法を変更することも可能です。 |
| account |
パスワードの有効期間や認証時の時間などでアカウントの有効性をチェックします。authとセットで使用されます。 |
| password |
認証方法を変更するメカニズムを提供します。通常はパスワードの設定/変更する場合です。 |
| session |
ユーザの認証前または認証後で実行することを指定します。
ユーザディレクトリのマウントやアンマウント、 ログインやログアウト時のログ記録、 ユーザが利用できるサービスの制限、といったことが含まれます。 |
|
● コントロールフラグ
上述したようにPAMの設定ファイルは利用されるタイプごとに上の行から順に実行されていきます。このコントロールフラグでは認証の成否に対してどのような動作をするかを定義します。このコントロールフラグですが「requisite」、「required」、「sufficient」、「optional」の4種類があります。
まず「requisite」ですが、このフラグ行に記述されたモジュールを経由して認証に成功した場合には同じタイプのモジュールに移ります。認証に失敗した場合には即座に認証を拒否します。しかしこのフラグではどの段階によって拒否をされているのかが、ユーザにわかる為にセキュリティ上あまり好ましくありません。このような理由により実際にあまり使われることもありません。
「required」は「requisite」と似た動きをしますがこのフラグ行に記述されたモジュールを経由して認証に失敗しても同じタイプの残りのモジュールを全て実行してからユーザに通知されます。「requisite」とは違いどの段階で拒否されているかをユーザは知ることができない為セキュリティ上好ましく、ほとんど全ての設定ファイルで利用されています。「requisite」及び「required」は全て許可される必要があります。
「sufficient」はそれより上の「required」行が全て許可されている場合に有効になります。「sufficient」のフラグ行が許可をすればそれ以降、他のライブラリを呼び出す必要がなくなります。また「sufficient]が失敗した場合には無視されますが、その下の行のモジュールで全てを拒否する設定がされていることが多いようです。
「optional」は「optional」タイプのモジュールで全て許可あるいは拒否された場合にのみ意味を持つものです。「optional」のモジュール全体のPAM認証が決定されます。
|
● モジュールパス
|
モジュールパスは利用するモジュールを指定する為に利用します。一般的なモジュールは/lib/security/ディレクトリに存在します。モジュールパスは絶対パスでの記述をしますが、相対パスでの記述(先頭に“/”がない)を行った場合には/lib/security/からの相対パスでの表記と認識されます。実際のモジュールに関しては後ほどいくつか説明をします。
|
● 引数
| モジュールによっては引数を設定することができます。その引数をモジュールに渡すことで特定の条件を有効にすることや、モジュールの動作を正反対にすることができます。また(リスト2)のloginファイルの設定では「pam_stack.so」モジュールの引数として「service=system-auth」が記述されています。これは「/etc/pam.d/system-auth」に再帰的に認証を依頼しています。誤った引数は全て無視されます。 |
6. system-auth
|
いくつかのサービス(login、gdm、xdmなど)は/etc/pam.d/system-authを用いて再帰的に処理がされています。このファイルは今まで説明してきた設定ファイルと設定方法は同じものですが、複数の設定ファイルから再帰的に読み込まれる設定ファイルになる為、非常に重要な意味を持ちます。(リスト5)この設定ファイルの内容を誤って記述してしまうとLinuxにアクセスすることができなくなります。設定を変更する際には作業をするコンソールとは別にrootユーザでログインしておく事をお勧めします。
|
【リスト5】/etc/pam.d/system-auth
(1)auth
|
required
|
/lib/security/pam_env.so |
(2)auth
|
sufficient
|
/lib/security/pam_unix.so likeauth nullok
|
(3)auth
|
required
|
/lib/security/pam_deny.so
|
(4)account
|
required
|
/lib/security/pam_unix.so
|
(5)password
|
required
|
/lib/security/pam_cracklib.so
retry=3 type=
|
(6)password
|
sufficient |
/lib/security/pam_unix.so
nullok use_authtok md5 shadow |
(7)password
|
required |
/lib/security/pam_deny.so |
(8)session
|
required
|
/lib/security/pam_limits.so
|
(9)session
|
required |
/lib/security/pam_unix.so
|
|
(1):成功なら2へ (2):成功なら4へ、失敗なら3へ (3):条件に限らず拒否 (4):成功なら許可
このファイルはLinuxのインストール時に行う認証方法の設定により自動生成されます。(RedHat系のディストリビューションではauthconfigコマンドで再度設定を変更することも可能です)
このファイルは1行目から3行目までがユーザ認証で、主にユーザ名とパスワードの確認をする処理、4行目はアカウントのパスワードの有効期限などを確認する処理、5行目から7行目はユーザがパスワードを変更する場合にどのようなパスワードを許可するかなどを指定しています。また8行目から9行目はプロセスの制限やログを指定しています。
これらのモジュールに対する詳細な設定は補助設定ファイルの内容が参照されます。補助設定ファイルの多くは/etc/security/ディレクトリに存在しています。(リスト6)
補助設定ファイルについてもそれぞれのモジュールで説明していきます。 |
【リスト6】/etc/security/*
|
設定ファイル |
ライブラリ |
|
access.conf |
pam_access.so |
|
console.perms |
pam_console.so |
|
group.conf |
pam_group.so |
|
limits.conf |
pam_limit.so |
|
pam_env.conf |
pam_env.so |
|
time.conf |
pam_time.so |
|
>>次のページへ
|
 |
【 ページ 】 | 1 | 2
|
|
 |
|
|
|
 |
 |
|
サイト内全文検索 |
| スタックアスタリスクのサイトを検索します。検索には、Googleを利用しています。そのため、最新の情報で検索されない可能性があります。 |
|