PAMのpam_faillockの設定

最新のDebian Linux (Debian 11 bullseye)を新規インストールしたら、PAMのpam_tallyモジュールがなくなっていました。代替モジュールはpam_faillockモジュールです。このモジュールの設定をします。

前回の投稿では、最新のLinuxを新規インストールしたらpam_tallyがなくなっており、pam_faillockに置き換わっていたことについてでした。今回の投稿はpam_faillockの設定についてです。

pamの設定

pam_faillockモジュールの設定の前に、PAMの設定について確認します。

pamの設定は、/etc/pam.d/ 内のファイルとして設定するときは、ファイル内の書式は以下の通りとなります。

type control module-path module-arguments

type

typeは、管理グループのタイプとなり、 auth / account / password / session のいずれかとなります。

control

controlは、制御フラグとなり、モジュールの処理が成功または失敗したときの振る舞いを定義します。

シンプルな構文では、required / requisite / sufficient / optional のいずれかとなります。また、外部ファイルに書かれたルールを取り込むためのinclude / substack があります。

複雑な構文では、[]内に、詳細な制御を設定します。詳細な制御とは、モジュールの処理の結果に対する挙動を定義する形(result=behavior)となります。シンプルな構文を複雑な構文で記述すると以下のようになります。

シンプルな構文複雑な構文
required[success=ok new_authtok_reqd=ok ignore=ignore default=bad]
requisite[success=ok new_authtok_reqd=ok ignore=ignore default=die]
sufficient[success=done new_authtok_reqd=done default=ignore]
optional[success=ok new_authtok_reqd=ok default=ignore]

behaviorに数値を設定した場合は、指定した行数をスキップして、その次の行を実行することを表します。たとえば success=2 の場合、モジュールの処理結果がsuccessだった場合、次に処理するのは2行スキップして3行目となります。

module-path

module-path は、使用するモジュールへのパスであり、既定のフォルダーにモジュールがある場合は、モジュールファイル名のみの指定でも問題ありません。

module-arguments

module-arguments は、使用するモジュールへ渡すパラメータとなります。

pam_tally / pam_tally2の設定

まずは、以前のモジュールであるpam_tally / pam_tally2について確認します。pam_tally / pam_tally2 のときは、authaccount の設定がひとつづつすれば問題ありませんでした。

  • auth * pam_tally.so
  • account * pam_tally.so

controlフラグはモジュールスタック構造(同じtypeの設定の並び順)によって、使用すべき値が異なるため ‘*‘ としています。実際の書式には ‘*‘ はありません。

pam_faillockの設定

次にpam_faillockの設定を確認します。

pam_faillockでは、通常の使い方では、3つの設定が必要となります。

設定方法にも、大きく分けると二つの方法があります。

一つの方法はauthを3つ設定する方法です。

  • auth * pam_faillock.so preauth
  • auth * pam_faillock.so authfail
  • auth * pam_faillock.so authsucc

もう一つは、authを二つとaccountを一つ設定する方法です。

  • auth * pam_faillock.so preauth
  • auth * pam_faillock.so authfail
  • account * pam_faillock.so

controlフラグはモジュールスタック構造(同じtypeの設定の並び順)によって、使用すべき値が異なるため ‘*‘ としています。実際の書式には ‘*‘ はありません。

auth * pam_faillock.so preauth

preauth引数付きのauth設定は、認証処理が始まる前に配置します。 pam_unix.so で認証してる場合はpam_unix.soの設定より前に配置します。

auth * pam_faillock.so authfail

authfail引数付きのauth設定は 、認証処理が失敗したときの後処理として配置します。 pam_unix.so で認証してる場合は 、pam_unix.soの設定より後ろで、 認証が 失敗したときに実行されるように配置します。

auth * pam_faillock.so authsucc

authfail引数付きのauth設定は 、認証処理が成功したときの後処理として配置します。 pam_unix.so で認証してる場合は 、pam_unix.soの設定より後ろで、認証が成功したときに実行されるように配置します。

account * pam_faillock.so

account設定は、accountのモジュールスタックのいずれかの場所に配置します。このモジュールが実行されるタイミングで、試行カウンターがリセットされます。試行カウンターをリセットしたい場所に配置します。

ssh用のPAMの設定

ssh用のPAMの設定は、/etc/pam.d/sshd となります。Debian 11 bullseyeではこのファイルは以下の内容です。シンプルにするため#から始まるコメント行は削除してます。

@include common-auth

account required pam_nologin.so
@include common-account

session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
@include common-session
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so noupdate
session optional pam_mail.so standard noenv # [1]
session required pam_limits.so
session required pam_env.so # [1]
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
session [success=ok ignoe=ignore module_unknown=ignore default=bad] pam_selinux.so open

@include common-password

今回、pam_faillockの設定に関係するのは、typeがauthaccountです。この二つのtypeはsshdファイルでは、common-authファイルおよびcommon-accountファイルを読み込んでいるのみです。そのため、pam_faillockの設定をするためには、common-authファイル、common-accountファイルを確認する必要があります。

pam_faillockのauthの設定

pam_faillockのauth設定をするためには、common-authファイルを確認する必要があります。

Debian 11 bullseyeでのcommon-authファイルは、コメント行を除くと下記の3行の設定です。

auth [success=1 default=ignore] pam_unix.so nullok
auth requisite pam_deny.so
auth required  pam_permit.so

1行目は、pam_unix.soモジュールで認証を行います。認証に成功したら1行スキップして3行目へ移動(success=1)します。認証に失敗したら2行目へ移動(default=ignore)します。

2行目は、pam_deny.soモジュールのため、このモジュールの結果は、常に失敗となります。制御フラグがrequisite(このモジュールの結果が失敗なら後続の処理はしない)のため、失敗なら後続の行は実行されず、auth処理の結果は失敗となり、auth処理は終了となります。

3行目は、pam_permit.soモジュールのため、このモジュールの結果は、常に成功となります。制御フラグはrequired(このモジュールの結果にかかわらず後続の処理を実行する)ですが、後続のauthの設定はないため、このモジュールの結果が、auth処理の結果となります。

pam_faillockのauth処理としては、認証前の設定と認証に失敗したときの設定です。これらを上記の処理に追加するには、1行目の前にpreauthを追加し、1行目の後ろにauthfailを追加します。ただし、1行目の設定であるsuccess=1(1行スキップ)は、間に1行追加されることになるので、success=2(2行スキップ)に変更になります。

pam_faillockのauth処理を追加したcommon-authファイルは以下の通りとなります。

auth required pam_faillock.so preauth silent
auth [success=2 default=ignore] pam_unix.so nullok
auth required pam_faillock.so authfail
auth requisite pam_deny.so
auth required  pam_permit.so

この設定では、pam_faillock.soの引数の設定は必要最少限にしています。そのため、その他の設定は/etc/security/faillock.confに記載されている値が利用されます。たとえば、debian 11 bullseyeでの既定値はアカウントロックするまでの試行回数は3回、自動アンロックまでの秒数は600秒となります。

もし、明示的に設定する場合は「deny=5 unlock_time=300」のように引数を追加します。

pam_faillockのaccountの設定

pam_faillockのaccount設定をするためには、common-accountファイルを確認する必要があります。

Debian 11 bullseyeでのcommon-accountファイルは、コメント行を除くと下記の3行の設定です。

account [success=1 new_authok_reqd=done default=ignore] pam_unix.so
account requisite pam_deny.so
account required  pam_permit.so

1行目は、pam_unix.soモジュールでの処理です。処理に成功したら1行スキップして3行目へ移動(success=1)します。処理に失敗したら2行目へ移動(default=ignore)します。

2行目は、pam_deny.soモジュールのため、このモジュールの結果は、常に失敗となります。制御フラグがrequisite(このモジュールの結果が失敗なら後続の処理はしない)のため、失敗したら、後続の行は実行されず、account処理の結果は失敗となり、 account処理は終了となります。

3行目は、pam_permit.soモジュールのため、このモジュールの結果は、常に成功となります。制御フラグはrequired( このモジュールの結果にかかわらず後続の処理を実行する)ですが、後続の accountの設定はないため、このモジュールの結果が、 account 処理の結果となります。

pam_faillockの account 処理としては、試行カウンターのリセットの設定です。それを上記の処理に追加するには、1行目の前に追加します。

pam_faillockのaccount処理を追加したcommon-accountファイルは以下の通りとなります。

account required  pam_faillock.so
account [success=1 new_authok_reqd=done default=ignore] pam_unix.so
account requisite pam_deny.so
account required  pam_permit.so

以上、今回の投稿はpam_faillockモジュールを使ったアカウントロックの設定について説明しました。

“PAMのpam_faillockの設定” への1件の返信

コメントを残す