私たちはoptional
PAM設定ファイルの制御値の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を使用すると、optional
cryptsetupは終了コードとして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
。