条件付きPAM認証を実装するには?

条件付きPAM認証を実装するには?

私は現在使用しています

auth required pam_unix.so try_first_pass nullok
auth optional pam_ssh.so  use_first_pass

(そしてArch Linuxがデフォルトで追加するいくつかの関連していないものも含む)これは、私のログインパスワードが次のおかげで保存された(またはリンクされた)SSHキーのロックを解除するためにも使用されることを意味します~/.ssh/login-keys.d/pam_ssh(ログインパスワードでSSHキーをロック解除できない場合は、try_first_passそれを使用してパスワードプロンプトを受信することもできます。)

SSHキーのパスワードがログインパスワードと同じ場合は正常に動作します。しかし、私が望むものは何ですか?良い私が達成したいのは、基本的に2つのうちの1つを使用してログインできることです。その他パスワード - 私のログインパスワードの1つまたはSSHキーの1つです。

pam_sshだから最初にSSHキーをロック解除する必要があると思いました。〜しない限り失敗した項目はpam_unix必須項目でなければならず、そうでなければスキップする必要があります。これは何とか達成できますか?


最初は最初に配置するのが解決策だと思いましたが、追加で代わりに作成するpam_ssh必要がありました。sufficientoptional

auth sufficient pam_ssh.so  try_first_pass
auth required pam_unix.so try_first_pass nullok

requiredしかし、実際のファイルには異なる行があります。次のような required pam_unix.so、例えばrequired pam_env.so今は無視されます!では、どうすればいいですか?本物この問題を解決しますか?

答え1

他の2つのSE投稿に感謝します(たった一つだけSFエクスプレス1号)、答えは使用にあります高度なcontrol構文。これ

auth required pam_unix.so try_first_pass nullok
# and sometime later
auth optional pam_ssh.so  use_first_pass

したがって、それを行う必要があります

auth [success=1 new_authtok_reqd=1 ignore=ignore default=ignore] pam_unix.so try_first_pass nullok
auth required pam_ssh.so use_first_pass

この行はこの行のpam_ssh直前になければなりません。これは後続のモジュールをスキップすることを意味します。pam_unixsuccess=NN

session pam_ssh.soまた、行を書くときは、行を書くことを忘れないでください!


最初の試みでは、

auth [success=1 default=ignore] pam_ssh.so try_first_pass
auth required pam_unix.so use_first_pass nullok

逆に、この方法はSSHキーを持たないすべてのユーザーをロックします!これだけではdefault=ignore十分ではなく、auth_err=ignore明確なので追加する必要があります。いいえの一部と見なされますdefault。また、この試みは、ユーザーがログインしているかどうかに応じて、「パスワード」または「SSHパスワード」のプロンプトが表示されることを意味します。持つSSHキー!


Arch Linuxでpam_unix使用される行はチェーンにloginあります。include

login -> system-local-login -> system-login -> system-auth

system-login他にもありますrequired 今後含まれているため、以前は簡単に入力することはsystem-authできません。エラーをスキップして幸いにも(代わりに)まだログインパスワードでのみログインできます!一方、 を変更すると、次も許可されます。auth [success=1 default=ignore] pam_ssh.so try_first_passloginauth include system-local-loginrequiredpam_unix.so use_first_passtry_first_passsystem-authその他sshdSSHキーをログインパスワードとして使用する認証オプションなどのサービス。本当に直接使用したい場合は、loginチェーンを壊してすべてを手動includeで。authlogin

関連情報