14.4. PAM設定ファイルのサンプル

以下に、PAMアプリケーションの設定ファイルのサンプルを示します。

#%PAM-1.0
auth      required  /lib/security/pam_securetty.so
auth      required  /lib/security/pam_unix.so shadow nullok
auth      required  /lib/security/pam_nologin.so
account   required  /lib/security/pam_unix.so
password  required  /lib/security/pam_cracklib.so retry=3
password  required  /lib/security/pam_unix.so shadow nullok use_authtok
session   required  /lib/security/pam_unix.so

最初の行は、行頭に「#」マークが付加されているコメントです。

2行目から4行目ではログイン認証のモジュールを3つスタックしています。

auth      required  /lib/security/pam_securetty.so

このモジュールは もしユーザーがrootとしてログインを試行し、 さらに/etc/securettyファイルが存在する場合、 ユーザーがログインしようとしているttyがこのファイルに一覧表示されていることを確認します。

auth      required  /lib/security/pam_unix.so shadow nullok

このモジュールはユーザーにパスワードを要求して、/etc/passwdに保存されている 情報を使用してそのパスワードをチェックします。パスワードが存在する場合、/etc/shadowを チェックします。pam_unix.soモジュールは自動的にシャドウパスワードを検出して使用し、 ユーザーの認証をします。シャドウパスワードに関する詳細は項6.5で 御覧下さい。

引数nullokは、pam_unix.soモジュールに対し、空白の パスワードを許可するように指示します。

auth      required  /lib/security/pam_nologin.so

これが最終認証ステップです。/etc/nologinファイルが存在するかどうかを確認します。 nologinが存在し、ユーザーがルートでない場合、認証は失敗します。

注意注意
 

この例では、最初のauthモジュールが失敗しても、 3つのauthモジュールすべてがチェックされます。これはユーザーに、 認証のどの段階で拒否されたかを悟られないようにするためです。そのような情報を アタッカーに渡す事は、彼らにシステムをクラックする方法をたやすく類推する事を許します。

account   required  /lib/security/pam_unix.so

このモジュールで、必要なアカウントの確証が実行されます。たとえば、シャドウパスワードが有効な場合、 pam_unix.soモジュールのアカウントコンポーネントは、アカウントの期限が切れて いないか、ユーザーがパスワード猶予期間内にパスワードを変更していないかをチェックします。

password  required  /lib/security/pam_cracklib.so retry=3

パスワードの期限が切れている場合、pam_cracklib.soモジュールのパスワード コンポーネントは新しいパスワードの要求をします。それから、新規に作成されたパスワードに対してテストを 実行することにより、それがパスワードに対する辞書型攻撃プログラムによって簡単に判明するものでないことを 確認します。最初にこのテストに失敗した場合、retry=3引数に従って、あと2回、強力な パスワードを作る機会があります。

password  required  /lib/security/pam_unix.so shadow nullok use_authtok

この行では、プログラムがユーザーのパスワードを変更する場合、pam_unix.soモジュールの passwordコンポーネントを使ってその変更を行わなければならないことを 指定します。これはパスワードを変更しなければならないとpam_unix.soモジュールの auth部が判断した場合のみ行われます。

引数shadowはユーザーのパスワードが更新される時、シャドーパスワードを作るように モジュールに指示します。

引数nullokは、 モジュールにユーザーがパスワードをブランクから変更するのを 許可するように指示します。さもなければ、ブランクのパスワードは固定アカウントとして取り扱われます。

この行の最後の引数、use_authtokはPAMモジュールのスタック順序の 良い例を示しています。この引数は、モジュールに対しユーザーの新しいパスワードを求めないように 伝えます。その代わりに、それ以前のパスワードモジュールで承認されたいかなるパスワードも受け入れます。 この方法では、全ての新しいパスワードが、受け入れられる前にセキュアなパスワードの pam.cracklib.soテストをパスしなければいけません。

session required /lib/security/pam_unix.so

最後の行は、pam_unix.soモジュールのセッションコンポーネントを使用してセッションを 管理することを指定しています。このモジュールは、各セッションの始めと終りで、/var/log/messagesに ユーザー名とサービスタイプのログを残します。他の機能が必要な場合は、他のセッションモジュールにスタックする事で、 補充できます。

次の設定ファイルの例は、rloginプログラム用の authモジュールスタックを表しています。

#%PAM-1.0
auth      required    /lib/security/pam_nologin.so
auth      required    /lib/security/pam_securetty.so
auth      required    /lib/security/pam_env.so
auth      sufficient  /lib/security/pam_rhosts_auth.so
auth      required    /lib/security/pam_stack.so service=system-auth

最初にpam_nologin.so/etc/nologinの存在を 知るためにチェックをします。存在する場合、root以外は誰もログイン出来ません。

auth      required    /lib/security/pam_securetty.so

pam_securetty.soは、安全ではないターミナルからrootのログインが行われないようにします。 これで、rootによるrlogin試行のすべてが、アプリケーションの限定的なセキュリティガードの 理由で、効果的に拒否されます。

ティップヒント
 

rootユーザーとしてリモートログインするには、代わりにOpenSSHを使用します。 SSHプロトコルの詳細に関しては第18章を御覧下さい。

auth      required    /lib/security/pam_env.so

この行はpam_env.soモジュールをロードして、それが /etc/security/pam_env.confに指定してある環境変数を設定します。

auth      sufficient  /lib/security/pam_rhosts_auth.so

pam_rhosts_auth.soモジュールは、ユーザーのホームディレクトリにある .rhostsを使用してユーザーを認証します。これが成功すると、PAMは即座に 認証の成功を認識します。pam_rhosts_auth.soがユーザーの認証に失敗すると 認証の試行は無視されます。

auth      required    /lib/security/pam_stack.so service=system-auth

pam_rhosts_auth.soモジュールがユーザーの認証に失敗すると、 pam_stack.soが通常のパスワード認証を実行します。

引数 service=system-authは、ユーザーが/etc/pam.d/system-authに あるシステム認証のPAM設定を経由してパスする必要があることを示します。

ティップヒント
 

securettyの結果が失敗になった時、PAMがパスワードを要求するのを防ぐ為に、 pam_securetty.soモジュールをrequiredから requisiteへ変更して下さい。