この記事では、オフラインでハードウェア セキュリティ キーを使用して SSH ホストに緊急アクセスするための手順を開発します。 これは XNUMX つのアプローチにすぎず、ニーズに合わせて変更できます。 ホストの SSH 認証局をハードウェア セキュリティ キーに保存します。 このスキームは、シングル サインオンを備えた SSH を含む、ほぼすべての OpenSSH で機能します。
これは一体何のためにあるのでしょうか? まあ、これは最後の手段です。 これは、何らかの理由で他に何も機能しないときにサーバーにアクセスできるようにするバックドアです。
緊急アクセスに公開鍵/秘密鍵の代わりに証明書を使用するのはなぜですか?
- 公開キーとは異なり、証明書の有効期間は非常に短い場合があります。 1 分間または 5 秒間有効な証明書を生成できます。 この期間を過ぎると、証明書は新しい接続に使用できなくなります。 緊急時のアクセスに最適です。
- ホスト上の任意のアカウントの証明書を作成し、必要に応じてそのような「ワンタイム」証明書を同僚に送信できます。
必要なもの
- 常駐キーをサポートするハードウェア セキュリティ キー。
常駐キーは、セキュリティ キー内に完全に保存される暗号キーです。 場合によっては、英数字の PIN によって保護されています。 常駐キーの公開部分は、オプションで秘密キー ハンドルとともにセキュリティ キーからエクスポートできます。 たとえば、Yubikey 5 シリーズの USB キーは常駐キーをサポートしていますが、ホストへの緊急アクセスのみを目的としていることをお勧めします。 この投稿ではキーを XNUMX つだけ使用しますが、バックアップ用に追加のキーが必要です。 - それらの鍵を保管する安全な場所。
- ローカル コンピューターおよび緊急アクセスが必要なサーバー上の OpenSSH バージョン 8.2 以降。 Ubuntu 20.04 には OpenSSH 8.2 が同梱されています。
- (オプションですが推奨) 証明書を確認するための CLI ツール。
訓練
まず、ハードウェア セキュリティ キーに配置される証明機関を作成する必要があります。 キーを挿入して実行します。
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
コメント (-C) として示しました [メール保護]そのため、この認証局がどのセキュリティ キーに属しているかを忘れることはありません。
Yubikey にキーを追加することに加えて、XNUMX つのファイルがローカルに生成されます。
- sk-user-ca、セキュリティ キーに保存されている秘密キーを参照するキー ハンドル、
- sk-user-ca.pub、これが認証局の公開キーになります。
ただし、心配しないでください。Yubikey には、取得できない別の秘密キーが保存されています。 したがって、ここではすべてが信頼できます。
ホスト上で、root として、SSHD 構成 (/etc/ssh/sshd_config) に次の内容を追加します (まだ追加していない場合)。
TrustedUserCAKeys /etc/ssh/ca.pub
次に、ホスト上で公開キー (sk-user-ca.pub) を /etc/ssh/ca.pub に追加します。
デーモンを再起動します。
# /etc/init.d/ssh restart
これで、ホストへのアクセスを試行できるようになりました。 しかし、まず証明書が必要です。 証明書に関連付けられるキー ペアを作成します。
$ ssh-keygen -t ecdsa -f emergency
証明書とSSHペア
場合によっては、公開キーと秘密キーのペアの代わりに証明書を使用したくなることがあります。 ただし、証明書だけではユーザーを認証するのに十分ではありません。 各証明書には、それに関連付けられた秘密キーもあります。 このため、証明書を発行する前に、この「緊急」キー ペアを生成する必要があります。 重要なことは、秘密鍵を持っている鍵ペアを示す署名付き証明書をサーバーに示すことです。したがって、公開鍵交換はまだ健在です。 これは証明書でも機能します。 証明書を使用すると、サーバーが公開キーを保存する必要がなくなるだけです。
次に、証明書自体を作成します。 10分間隔でubuntuのユーザー認証が必要です。 あなたのやり方でできます。
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
指紋を使用して証明書に署名するように求められます。 追加のユーザー名をカンマで区切って追加できます (例: -n ubuntu,carl,ec2-user)。
これで証明書が完成しました。 次に、正しい権限を指定する必要があります。
$ chmod 600 emergency-cert.pub
この後、証明書の内容を表示できます。
$ step ssh inspect emergency-cert.pub
これが私の外観です:
emergency-cert.pub
Type: [email protected] user certificate
Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
Key ID: "test-key"
Serial: 0
Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
Principals:
ubuntu
Critical Options: (none)
Extensions:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rc
ここで、公開キーは作成した緊急キーであり、sk-user-ca は認証局に関連付けられています。
最後に、SSH コマンドを実行する準備が整いました。
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- 認証局を信頼するホスト上の任意のユーザーの証明書を作成できるようになりました。
- 緊急事態を解除することができます。 sk-user-ca を保存することもできますが、セキュリティ キーにも含まれているため、保存する必要はありません。 緊急アクセスに使用した場合は、元の PEM 公開キーをホスト (たとえば、ubuntu ユーザーの ~/.ssh/authorized_keys 内) から削除することもできます。
緊急アクセス: 行動計画
セキュリティ キーを貼り付けて、次のコマンドを実行します。
$ ssh-add -K
これにより、認証局の公開キーとキー記述子が SSH エージェントに追加されます。
次に、公開キーをエクスポートして証明書を作成します。
$ ssh-add -L | tail -1 > sk-user-ca.pub
たとえば、有効期限が XNUMX 時間以内の証明書を作成します。
$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pub
そして再び SSH 接続します。
$ ssh -i emergency username@host
.ssh/config ファイルが接続時に問題を引き起こしている場合は、-F none オプションを指定して ssh を実行すると、このファイルをバイパスできます。 同僚に証明書を送信する必要がある場合、最も簡単で安全なオプションは次のとおりです。
このアプローチで私が気に入っている点は、ハードウェアのサポートです。 セキュリティ キーを金庫に保管しておけば、どこにも消えてしまうことはありません。
広告の権利について
エピックサーバー - です
出所: habr.com