以下に、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へ変更して下さい。 |