web-dev-qa-db-ja.com

パスワードを設定していないユーザーはsshでログインできますか?

まず、明確にしておきたいのですが、プロンプトなしで公開鍵認証を使用することだけを求めているのではありません。ユーザーにSSH公開鍵認証によるアクセスのみを許可する必要があるユースケースがあります。シリアル端末でパスワードを使用してログインすることは、このユーザーに対して無効にしたいものです。私は独自のLinuxカーネルを構築しているので、authorized_keysファイルを含むホームディレクトリでユーザーが作成されます。/etc/shadowに、ユーザーはパスワードのないエントリ<username>:!:...を持っています。

私のsshd_configにはPasswordAuthentication noPermitEmptyPasswords yesが含まれていますが、それでもユーザーは、そのユーザーの〜/ .ssh/authorized_keysファイルと一致する正しい秘密鍵IDファイルで拒否されます。 UsePAM noは、このバージョンのSSHサーバーではサポートされていません(少なくともそれが報告されています)。ユーザーのファイル/フォルダーサーバー側のすべての所有権とアクセス許可が検証されました。

OpenSSHサーバー(sshd)コードと思われるものを確認した後、/ etc/shadowパスワードファイルでロックされたアカウントをチェックします。

https://github.com/openssh/openssh-portable/blob/V_7_4_P1/auth.c#L141

これは、この方法で試すのは愚かだと私に信じさせます。パスワードを設定し、別の方法でシリアルログインを無効にする必要があります。

これは直感的に理解できますが、カーネル(およびopenssh)が、パスワードが設定されていない限りユーザーがログインできないように設計されていることを確認したいと思いました。これに関する公式のドキュメントやWordはありますか?前もって感謝します。

1
Danny A

どちらの動作も構成できます。

/etc/shadowのパスワードフィールドが感嘆符で始まる場合、アカウントはロックされています。アカウントはSSHでログインできず、通常、root以外でアカウントにアクセスしようとすると失敗します。

パスワードに別の無効なパスワードが含まれている場合(通常、Linuxでは単一のアスタリスク)、アカウントにはパスワードがありません(アスタリスクは暗号化されたパスワードの有効なエンコーディングではないため)が、SSH公開鍵認証またはその他の方法でアクセスできます。パスワード以外の意味。

DebianまたはUbuntuを使用している場合は、これらの動作をadduser --disabled-loginおよびadduser --disabled-passwordで構成できます。

カーネルはこれに関与していません。決定はPAMとsshdによって行われます。

0
bk2204

クライアントの公開鍵を$HOME/.ssh/authorized_keysファイルに追加します。これにより、あらゆる種類のパスワードプロンプトが無効になります。秘密鍵がパスフレーズで保護されている場合は、ssh-agentを使用してもらいます。

0
TLane