web-dev-qa-db-ja.com

SSH秘密鍵が失われた場合のセキュリティ

ユーザーAは2つのSSH秘密鍵を持っており、時間の経過とともに、この公開鍵をいくつかのサーバーで使用してきました。彼はそのうちの1つを失い、新しいペアを作成しました。

ユーザーAは、キーを紛失したことをどのように通知しますか(sysadmin)、アクセスしたすべてのサーバーを管理するにはどうすればよいですか(ユーザーAがアクセスできるすべてのサーバーのリストはありません)。つまり、この秘密鍵に関連付けられている公開鍵をどのように呼び出すことができますか。

LDAPベースの認証では、すべてのサーバーが認証のために単一のサーバーリポジトリと通信します。サーバー上のアクセスを削除するかパスワードを変更すると、ユーザーAがパスワードを紛失したときに、このLDAPを認証に使用するすべてのシステムが保護されます。

7
Shree Mandadi

どのバージョンのsshdを使用していますか? OpenSSH 5.4には、明らかにキー失効オプションがあります。

* Add the ability to revoke keys in sshd(8) and ssh(1). User keys may
be revoked using a new sshd_config(5) option "RevokedKeys". Host keys 
are revoked through known_hosts (details in the sshd(8) man page).   
Revoked keys cannot be used for user or Host authentication and will  
trigger a warning if used.

以前のバージョンを使用している場合は、疑わしい公開鍵を探して削除するために、すべてのサーバーで可能なすべてのauthorized_keysファイルを実行する必要があります。これには、rootを含め、User-AがSSHで接続できるすべてのアカウントが含まれます。これは、一元化されたauthoried_key管理を使用していないことを前提としています。

4
cjc

この状況に対する1つの可能な短期的な修正は、いくつかの構成管理ツールを使用することです( ansible はここでは良い賭けかもしれません)。

特に、authorized_keyモジュール( https://docs.ansible.com/ansible/authorized_key_module.html )を使用して、特定のユーザーの1つ(または複数)の特定の公開鍵指紋を削除できます。 authorized_keyファイル。

例はあなたのニーズに欠けていますが、このようなものがうまくいく可能性があります:

- name: Set authorized key took from url
  authorized_key:
    user: charlie
    state: absent
    key: https://github.com/charlie.keys

/ etc/passwdを照会することにより、(少なくともansibleで)コマンドを実行して、システム上のすべてのユーザーのリストを作成することもできます。

キーの新しいホワイトリストを作成して他のすべてを削除することもできますが、それはあなたの状況では実用的ではないかもしれません。

Ansibleのドキュメントには、それがどのように機能するかについての大まかな例が示されています。

- name: Set authorized key, removing all the authorized key already set
  authorized_key:
    user: root
    key: '{{ item }}'
    state: present
    exclusive: True
  with_file:
    - public_keys/doe-jane

長期的には、ジャンプホストを持つことを検討することをお勧めします-私は見つけました テレポート はかなり良いです。

1

OpenSSHとPuTTYの両方で、秘密鍵から公開鍵を再生成できますが、その逆はできません。

Ssh-keygen -y -ffilenameを使用します

PuttyGenで鍵をインポートすると、公開鍵が表示されます。

0
TheVyom

これがユーザーキーである場合(表示されているとおり)、ユーザーがアクセスしたユーザーIDのauthorized_keysファイルにあります。ホームディレクトリの.sshサブディレクトリを検索する必要があります。 (自動マウントされたホームディレクトリがある場合は、1つのサーバー上のディレクトリを検索するだけで済みます。それ以外の場合は、アクセスできた可能性のあるすべてのサーバーを検索する必要があります。)

問題は、古いキーの最初のコピーを見つけることです。一般的にアクセスされるシステム上のユーザーのホームディレクトリは、開始するのに適した場所です。キーを取得したら、他のシステムやユーザーIDでそのキーをgrepできます。コメントではなくキー値を検索すると、すべてのキーが見つかる可能性が高くなります。

0
BillThor

この秘密鍵に関連付けられている公開鍵を呼び出すにはどうすればよいですか。

SSHキーを取り消すことは確かに悪い考えではありませんが、より良い(またはよりスケーラブルな)ソリューションはMFA(多要素認証システム、別名2要素認証)を実装することです。これは、(1)追加の要素を満たさない限りユーザーがログインできないため、キーの価値を下げる効果があります。

GoogleAuthenticatorやOathのようないくつかのオープンソースソリューションが存在します。次に、Duoのようなハイブリッドオープンソース/商用ソリューション。 Duoを使用すると、ログインやプッシュ通知をジオフェンスすることもできます。

100%機能する実装例については、Dockerコンテナとして実装されたこの要塞をチェックアウトしてください: https://github.com/cloudposse/bastion

0
Erik Osterman