PAM サブスタックを「必須」にするにはどうすればよいでしょうか?

PAM サブスタックを「必須」にするにはどうすればよいでしょうか?

PAM 構成の auth セクションなどでは、loginmdm呼び出しますcommon-auth。サブスタックとして ( として)common-auth以下を呼び出しています。auth substack krb5ldap-cache-auth

auth optional pam_echo.so Trying UNIX
# Try UNIX, empty passwords OK
auth sufficient pam_unix.so nullok

auth optional pam_echo.so Checking UID
# If the uid < 500 and UNIX didn't work, then die.
auth requisite pam_succeed_if.so uid >= 500 quiet_success

auth optional pam_echo.so Trying Kerberos
# Try Kerberos, using the same password
# If the password is correct (success), then skip next lines
# If the password is wrong (auth_err), then die
# If Kerberos can't connect (?), then ignore
auth [success=2 auth_err=die default=ignore] pam_krb5.so debug use_first_pass

# Try the cache, using the same password
# Last chance.
auth optional pam_echo.so Trying cache
auth [success=done default=die] pam_ccreds.so action=validate use_first_pass

# Kerberos validated our password.
auth optional pam_echo.so Kerberos validated
# Store the password hash.
auth optional pam_ccreds.so action=store use_first_pass
# See if we can mount user drives, since we have a Kerberos token.
auth optional pam_mount.so
auth optional pam_echo.so Done.

(pam_echo.soデバッグのみに使用します。)

これは、認証が成功するにはうまく機能するようです。サブスタック メカニズムは便利です。「sufficient」と「done」を使用して、より大きなスタックを終了せずにサブスタックを終了できるからです。

しかし、認証に失敗した場合、より大きなスタックは、終了するはずのときに継続します (たとえば、mdmは を無駄に呼び出しpam_gnome_keyring.sologinは を無駄に呼び出します)。pam_group.so

サブスタックが失敗した場合にスタックが終了されるようにサブスタックを呼び出す方法はありますか? 試してみましたauth requisite substack krb5ldap-cache-authが、これは単に PAM 構文が間違っているだけです。

答え1

PAM 管理者ガイドより:

substack

このコントロールへの引数として指定された構成ファイルから、指定されたタイプのすべての行を含めます。これは、includeサブスタック内の done アクションと die アクションの評価によって、モジュール スタック全体の残りがスキップされるのではなく、サブスタックのみがスキップされるという点で と異なります。

includeあなたの質問を読むと、ではなくを探しているように思えますsubstack。したがって、おそらく を置き換える必要があります...

auth substack krb5ldap-cache-auth

と...

auth include krb5ldap-cache-auth

ただし、Debian システムでは、代わりにこれを使用する必要があるかもしれません:

@include krb5ldap-cache-auth

また、RedHat システムやその派生システムでは、 を使用する必要がある場合もありますがpam_stack、これは非推奨とみなされることが多いです (include 再帰の処理に問題があるためだと思います)。

auth requisite pam_stack.so service=krb5ldap-cache-auth

このような場合、doneまたはdieアクションがトリガーされるとkrb5ldap-cache-auth、PAM はスタック全体、サブスタックだけではありません。

関連情報