ある時点で pam 処理を終了するには、 pam_exec を使用します。

ある時点で pam 処理を終了するには、 pam_exec を使用します。

ユーザーがシリアルコンソールを介してLinuxホストにログインできる方法を制限/定義するためのカスタムpamルールを作成しています。

ユーザーゲストログイン後、他のユーザーが自分のパスワードを確認し、pam_unix.so私のカスタム認証者が同じことをします。身元確認の最終決定つまり、後続のpamモジュールがまったく呼び出されたくありません。

これは私の最小作業/etc/pam.d/loginファイルです。

# On success skip the next rule
auth [success=1 default=ignore] pam_succeed_if.so user in guest
auth [success=done default=ignore] pam_exec.so expose_authtok /usr/bin/custom-pam.sh
auth [success=1 default=ignore] pam_unix.so nullok 
auth requisite pam_deny.so
auth required pam_permit.so

上記の設定は、ゲストとしてログインすると期待どおりに機能しますが(/var/log/journalこれも確認しました)、他のユーザーには失敗します。

0 で終了すると、/usr/bin/custom-pam.sh後続のモジュールの処理が停止すると予想されます。私が理解したものはsuccess=doneすぐに返されるべきですが、そうではありません。

答え1

PAMsufficientコントロールを使ってみましたか?すべてpam.conf(5)

   sufficient
       if such a module succeeds and no prior required module has failed
       the PAM framework returns success to the application or to the
       superior PAM stack immediately without calling any further modules
       in the stack. A failure of a sufficient module is ignored and
       processing of the PAM module stack continues unaffected.

これにより、カスタム行の処理が停止します。

auth sufficient pam_exec.so expose_authtok /usr/bin/custom-pam.sh

失敗しない限り、これは後続のnope-denying-you-here行で処理できます。

関連情報