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行目ではログイン認証のモジュールを列挙しています。

auth      required  /lib/security/pam_securetty.so

この行は、もしユーザーがrootとしてログインを試行し、かつ/etc/securettyファイルが存在するならば、ログイン試行時に使用されたttyがこのファイルに一覧表示されていることを確認します。

auth      required  /lib/security/pam_unix.so nullok

この行で、ユーザーはパスワードを要求され、/etc/passwdの情報ストア、あるいはファイルが存在する場合は、/etc/shadowを使って、そのパスワードがチェックされます。pam_unix.soモジュールは自動的に/etc/shadowに格納されているシャドーパスワードを認識し利用してユーザーの認証を行います。シャドーパスワードに関する詳細は、シャドウユーティリティ項第6章を参照してください。

引数nullokは、pam_unix.soモジュールがブランクパスワードを受け入れるということを示します。

auth      required  /lib/security/pam_nologin.so

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

注意注意
 

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

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引数は、ユーザーのパスワードが更新される時、シャドーパスワードを作るようにモジュールに要請します。

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

この行の最後の引数、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

1行目でpam_nologin.soは、/etc/nologinが存在するかどうかをチェックします。存在する場合、root以外はログインできません。

auth      required    /lib/security/pam_securetty.so

pam_securetty.soは、安全ではないターミナルからrootのログインが行われないようにします。これで、rootによるrlogin試行のすべてがセキュリティ上の理由から効果的に拒否されます。ルートとしてログインしたい場合は、代わりにOpenSSHを利用して下さい。OpenSSHプロトコルに関する詳細は、第10章を参照してください。

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は即座にrloginを認証します。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チェックが失敗し、ユーザーがrootとしてリモートからログインしようとしていることが判明したときに、パスワードの入力を要求したくない場合は、pam_securetty.soモジュールをrequiredからrequisiteに変更してください。