ログイン失敗時にPAMを正しく使用してスクリプトを実行する方法

ログイン失敗時にPAMを正しく使用してスクリプトを実行する方法

私のArch Linuxシステムでログインに失敗した場合は、プラグイン認証モジュールを使用してスクリプトを実行しようとしています。 Arch Linuxには汎用検証ファイルがないため、作成しないことにしました。代わりに、PAMスタックが一部の機能にシステム認証ファイルを使用していることを発見し、それを編集することにしました。

元のシステム認証ファイルは次のとおりです。

#%PAM-1.0

auth      required  pam_unix.so     try_first_pass nullok
auth      optional  pam_permit.so
auth      required  pam_env.so

account   required  pam_unix.so
account   optional  pam_permit.so
account   required  pam_time.so

password  required  pam_unix.so     try_first_pass nullok sha512 shadow
password  optional  pam_permit.so

session   required  pam_limits.so
session   required  pam_unix.so
session   optional  pam_permit.so


ログイン失敗時にスクリプトを実行するために、認証ブロックを次のように変更しました。

auth      [success=1 default=ignore]  pam_unix.so     try_first_pass nullok
auth      optional  pam_exec.so <path to the script file>
auth      optional  pam_permit.so
auth      required  pam_env.so

account   required  pam_unix.so
account   optional  pam_permit.so
account   required  pam_time.so

password  required  pam_unix.so     try_first_pass nullok sha512 shadow
password  optional  pam_permit.so

session   required  pam_limits.so
session   required  pam_unix.so
session   optional  pam_permit.so

sudoコマンドは、私のシステムのPAMスタックにあるこのシステム認証ファイルを使用するコマンドの1つです。ただし、上記のようにファイルを編集した後にsudoコマンドを使用しようとすると、間違ったパスワードを入力してもsudoコマンドが実行されます。

誰でもここで何が間違っているのかを教えて修正するのを手伝ってくれたらとても感謝します。

答え1

~からman pam.d、説明するrequired

required
   [success=ok new_authtok_reqd=ok ignore=ignore default=bad]

を使用するとスクリプトが使用され、常に成功するため、失敗のdefault=ignoreためpam_unix認証が失敗しなくなります。以下も必要です。pam_permit.sopam_permit.sopam_unixdefault=bad

bad
   this action indicates that the return code should be thought of as
   indicative of the module failing. If this module is the first in
   the stack to fail, its status value will be used for that of the
   whole stack.

関連情報