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


19

SSHには公開鍵を使用するのが最善です。だから私のsshd_config持っていPasswordAuthentication noます。

一部のユーザーはログインしません/usr/sbin/nologin。たとえば、shellを使用したsftpユーザーです。または、システムアカウント。

そのため、パスワードを使用せずにこのようなユーザーを作成できますadduser gary --shell /usr/sbin/nologin --disabled-password

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


3
これらが実際のユーザーのアカウントでない場合、またはsudoアクセスにパスワードが必要ない限り(sudo権限がないため、またはsudo権限があるためNOPASSWD)、選択した答えが適切です。私はその答えを編集してsudoの懸念事項を含めましたが、その間にここであなたに電話することにしました。
ドクターJ

回答:


35

サーバーへのルートアクセスがあり、ユーザーが失った場合に備えてユーザーのsshキーを再生成できる場合

そして

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

そして

彼らがします決して(キーボード+モニターを介して、またはVM用のリモートコンソール経由で)サーバへのアクセスを「物理」必要はありません

そして

パスワードでsudoアクセスするユーザーはいません(つまり、sudoアクセスがまったくない、またはsudoアクセスがありますNOPASSWD

あなたは良くなると思います。

このように構成された多くのサーバーが職場にあります(vmwareリモートコンソール経由でVMにアクセスする必要があるアカウントのみがあり、他のアカウントはpubkey authを使用してSSH経由でのみ接続します)。


9
また、「ユーザーがSSH秘密キーを持たないリモートシステムからシステムにアクセスする必要がないことを知っている」と付け加えます。そして、「あなたが思いもしなかった状況に陥ったユーザーに喜んで対処します。」
アンドリューヘンレ

7
最初の条件は、IMOが不要であることです。ユーザーは自分でキーを作成する必要があります。彼らはあなたにそれらを与えると同時に彼らの公開鍵を承認します。キーを失った場合、別のキーを生成するだけで、サーバー上の古いキーを置き換えることができます。
クリストフドレヴェドロゲ

1
@AndrewHenleこれは良い点ですが、sshdに PasswordAuthentication no問題がある場合は別の問題です(ユーザーはとにかくログインできません)。
lonix

1
「決して」はそんなに長い時間ではありません。管理者は、必要に応じて簡単にパスワード認証を追加できます。
ハイド

2
さて、質問は明らかに、特定のサービスやsftpのみのユーザーが使用するシステムアカウントのように、絶対にログインしない(そしておそらくそうすべきではない)アカウントに関連しています。質問には、ユーザーにはログインシェルがないことも記載されています。これらのタイプのユーザーの場合、パスワードによるログインを明示的に無効にすることをお勧めします。
クリスチャンゴーロン

27

もともとpasswd --delete <username> 安全でないこの質問に言及しました。それで、暗号化されたパスワードフィールドは/etc/shadow完全に空になります。

username::...

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


adduser --disabled-passwd/etc/shadow暗号化されたパスワードフィールドが単なるアスタリスクであるエントリを生成します、すなわち

username:*:...

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

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

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

echo 'username:*' | chpasswd -e

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

username:!:...

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

しかし、ここに不注意な落とし穴があります。 2008年に、passwd古いshadowパッケージからのコマンドのバージョンがpasswd -l「アカウントのロック」から「パスワードのロック」に再定義するように変更されました。述べられた理由は「他のpasswdバージョンとの互換性のため」です。

あなた(私のように)ずっと前にこれを学んだなら、それは厄介な驚きとして来るかもしれません。adduser(8)明らかにこの区別にまだ気付いていない問題も助けにはなりません。

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

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

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

Debianバグ492307およびバグ389183のバグ履歴は、この背後にある考え方を理解するのに役立つ場合があります。


警告をありがとう...質問を編集して、だれもその間違いを犯さないようにします!
lonix

あなたの警告は私が使用する場合にも当てはまります adduser --disabled-passwd-他のサービスがパスワード認証を許可している場合、ユーザーはパスワードなしでログインできますか?
lonix

1
いいえ、adduser --disabled-passwordそのアカウントのパスワード認証を成功させることはできません。
telcoM

パスワードの削除は非常に無害に思えますが、非常に危険な*ので、使用に関する段落でそれについての段落を切り替えることをお勧めします。
キャプテンマン

1
うわー、それは起こるのを待っている厄介な驚きです...そしていつものように、明らかにそれのせいにする互換性の問題があります。2008年passwdソースコードに登場しました。一度学んだことを頼りにしたものが、もはやそうではないことが判明したとき、あなたはそれを愛していませんか?
telcoM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.