web-dev-qa-db-ja.com

SSHの公開鍵認証を設定したら、ユーザーのパスワードを削除する必要がありますか?

SSHには公開鍵を使用するのが最善です。したがって、私のsshd_configにはPasswordAuthentication noがあります。

一部のユーザーはログインしません(例: Shell /usr/sbin/nologinを持つsftpユーザー。または、システムアカウント。

そのため、adduser gary --Shell /usr/sbin/nologin --disabled-passwordを使用すると、パスワードなしでそのようなユーザーを作成できます。

それは良い/悪い考えですか?考慮していない影響はありますか?

20
lonix

サーバーへのrootアクセス権があり、ユーザーがそれらを失った場合に備えてユーザーのSSH鍵を再生成できる場合

[〜#〜]および[〜#〜]

ユーザー(人として)が複数のユーザーアカウントを持たず、SSHセッションでそれらを切り替える必要があると確信している(まあ、必要に応じて、複数SSHセッションを開くこともできます)

[〜#〜]および[〜#〜]

それらはneverサーバーへの「物理」アクセス(キーボード+モニター経由またはVMのリモートコンソール経由)を必要とします

[〜#〜]および[〜#〜]

パスワードでゲートされたSudoアクセス権を持つユーザーはいない(つまり、Sudoアクセス権をまったく持っていないか、NOPASSWDでSudoアクセス権を持っている)

元気になると思います。

多くのサーバーがこのように構成されています(一部のアカウントのみVMにアクセスする必要があり、他のアカウントはpubkey authのSSH経由でのみ接続します)。

35
Mr Shunz

この質問は、最初に_passwd --delete <username>_と記述されていて、安全ではありません:これにより、_/etc/shadow_の暗号化されたパスワードフィールドは完全に空になります。

_username::...
_

sshdでパスワード認証を拒否するように設定している場合は、SSHを使用しても安全です。ただし、システムのany otherサービスがパスワード認証を使用し、nullパスワードを拒否するように設定されていない場合、これパスワードなしでアクセスを許可します!これは必要ありません。


_adduser --disabled-passwd_は_/etc/shadow_エントリを生成します。ここで、暗号化されたパスワードフィールドは単なるアスタリスクです。

_username:*:...
_

これは「正常に入力できない暗号化されたパスワード」です。つまり、アカウントは有効であり、技術的にはログインを許可しますが、パスワードによる認証を実行できません。したがって、サーバー上に他のパスワード認証ベースのサービスがある場合、このユーザーはそれらからブロックされます。

このシステムでシステムパスワードファイルを使用するすべてのサービスで、このユーザーに対しては、標準のアカウントパスワード以外の何か(SSHキーなど)を使用する認証方法のみが機能します。 SSHキーでのみログインできるユーザーが必要な場合、これが必要です。

既存のアカウントをこの状態に設定する必要がある場合は、次のコマンドを使用できます。

_echo 'username:*' | chpasswd -e
_

暗号化されたパスワードフィールドには3番目の特別な値があります。_adduser --disabled-login_の場合、フィールドには感嘆符が1つだけ含まれます。

_username:!:...
_

アスタリスクと同様に、これによりパスワード認証が成功しなくなりますが、追加の意味もあります。これは、一部の管理ツールでパスワードを「ロック済み」としてマークします。 _passwd -l_は、既存のパスワードハッシュの前に感嘆符を付けることでほぼ同じ効果があり、パスワード認証を使用できなくなります。

しかし、ここにunwaryのトラップがあります:2008年に、古いpasswdパッケージからのshadowコマンドのバージョンがreに変更されました-define _passwd -l_を「アカウントのロック」から単に「パスワードのロック」に変更します。 記載されている理由は、「他のパスワードバージョンとの互換性のため」です。

あなたが(私のように)ずっと前にこれを学んだなら、それは厄介な驚きとなるかもしれません。 adduser(8)がこの違いをまだ認識していないことも問題にはなりません。

すべての認証方法でaccountを無効にする部分は、実際にはアカウントの有効期限の値を1に設定しています:_usermod --expiredate 1 <username>_。 2008年より前は、これを行うために使用されたshadowソースキットに由来する_passwd -l_ に加えてパスワードの前に感嘆符を付けていますが、もうそうしていません。

Debianパッケージの変更ログによると:

  • debian/patches/494_passwd_lock-no_account_lock:以前のpasswd -l(#389183で変更)の動作を復元:ユーザーのアカウントではなく、ユーザーのパスワードのみをロックします。また、違いを明確に文書化します。これにより、以前のバージョンのpasswdおよび他の実装と共通の動作が復元されます。閉じる:#492307

Debianバグ492307 および bug 38918 のバグ履歴は、この背後にある考え方を理解するのに役立ちます。

27
telcoM