最新の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 のときは、auth
とaccount
の設定がひとつづつすれば問題ありませんでした。
- 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がauth
とaccount
です。この二つの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件の返信