私の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.so
pam_permit.so
pam_unix
default=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.