PAMでオプションが無視されるにもかかわらず、なぜ使用するのですか?

PAMでオプションが無視されるにもかかわらず、なぜ使用するのですか?

私たちはoptionalPAM設定ファイルの制御値の1つであることを知っています。

~からlinux-pam.org:

任意に選択できる:
このモジュールの成功または失敗は、このサービス+タイプに関連付けられているスタックの唯一のモジュールである場合にのみ重要です。

混乱しています。

これは/etc/pam.d/login

session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    include      postlogin
-session   optional     pam_ck_connector.so

optional私は制御と公正な行動の2つの規則を見ます。

私たちは、optional認証されていない目的でのみルールを使用していると仮定します。そうなんですか?

答え1

重要:オプションのモジュールは無視されず、処理されます。結果無視されます。つまり、失敗しても認証プロセスは中断されません。

多くの場合、認証中に特定のタスク(実行するモジュール)を実行したいが、認証プロセスが失敗しても認証プロセスを中断したくない場合があります。

実際の例は、pamを使用してユーザーパスワードと同じパスワードを使用してログイン中にdm-crypt暗号化デバイスを自動的に開く場合です。

auth optional pam_exec.so expose_authtok quiet /usr/sbin/cryptsetup --allow-discards open UUID=... /home/username

requiredここで代わりにifを使用すると、optionalcryptsetupは終了コードとして0を返すため、最初のログインは成功しますが、ユーザーがログアウトしてから再度ログインすると、デバイスがオンになっていてcryptsetupが返されるため、ログインは失敗します。ゼロ以外の終了コード。ただし、この場合でもログインが成功したいと思います。

これは実際に使用してから思い出させる例です。つまり、理論的な状況ではありませんが、失敗したモジュールが認証プロセスを中断しないことを望む多くの状況の1つです。

答え2

これに加えて、他の実用的な用途があります。マルセロの答え:

$ grep 'auth.*optional' /etc/pam.d -R
/etc/pam.d/lightdm:auth    optional        pam_gnome_keyring.so
/etc/pam.d/lightdm:auth    optional        pam_kwallet.so
/etc/pam.d/lightdm:auth    optional        pam_kwallet5.so
/etc/pam.d/gnome-screensaver:auth optional pam_gnome_keyring.so
/etc/pam.d/login:auth       optional   pam_faildelay.so  delay=3000000
/etc/pam.d/login:auth       optional   pam_group.so
/etc/pam.d/lightdm-greeter:auth    optional        pam_gnome_keyring.so
/etc/pam.d/lightdm-greeter:auth    optional        pam_kwallet.so
/etc/pam.d/lightdm-greeter:auth    optional        pam_kwallet5.so
/etc/pam.d/unity:auth optional pam_gnome_keyring.so

これらはすべてUbuntu 16.04 VMからインポートされ、PAM設定に触れたことはありません(この行pam_kwallet*のソースが疑われるインストール済みパッケージを除く)。

  • GNOMEキーリングとKDEウォレットモジュールは理解しやすいです。 SSHキーとGPGキーとブラウザのパスワードを保持できるログインキーリングのロックを解除します。
  • pam_faildelay.so即時かつ明確なフィードバックを提供する無視されたモジュールの良い例を提供します。つまり、間違ったパスワードを入力した場合は待機します。optional成功や失敗はあまり重要ではないため、これは一般的に使用されるモジュールです。しかし!pam_faildelay.soのみサポートするauthのでどのただ通常どおり使用してくださいauth optional

関連情報