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

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

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

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

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

auth      required  pam_securetty.so

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

auth      required  pam_unix.so shadow nullok

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

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

auth      required  pam_nologin.so

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

注記注記
 

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

account   required  pam_unix.so

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

password  required  pam_cracklib.so retry=3

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

password  required  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 pam_unix.so

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

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

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

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

auth      required    pam_securetty.so

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

ヒントヒント
 

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

auth      required    pam_env.so

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

auth      sufficient  pam_rhosts_auth.so

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

auth      required    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へ変更して下さい。