ユーザーが公開鍵をアップロードするための安全な方法

ユーザーが公開鍵をアップロードするための安全な方法

id_rsa.pub信頼できないユーザー、見知らぬ人が私のサーバーと特定のユーザーauthorized_keysgit私の場合はユーザー)にアップロードすることを許可する必要があります。手動で何もせずにこれを達成するための最も安全な方法は何ですか?

私は具体的にWebインターフェースを検討していますが、他のアプローチに強力な利点がある場合は、アイデアにオープンです。

httpデーモンはユーザーとして実行され、http損傷を防ぐためにgitユーザー攻撃に対して脆弱ではありません。httphttp

答え1

他のプロセスをブローカーとして使用します。 Webサービス(または他のサービス)は、どこかにあるスプールに新しい要求を書き込みます。中間子(man-in-the-middle)はスプールを監視し、新しいエントリを削除し、完全性チェックを実行し、gitAuthorized_keysファイルにペイロードを追加します。同じブローカーは、Webサービスが読めるフィードバックを提供できます。ただし、感染したhttpユーザーはブローカーやgitユーザーを操作できません。ブローカーはデーモンでも、クローン操作でもかまいません。

gitまたは明らかに悪い考えがあるので:)1)ユーザーはとにかく自分のファイルへの書き込みアクセス権を持ち、authorized_keys2)ユーザーがいるすべての人にSSHで許可されているアクセス権を持つという事実を利用できます。git。したがって、ユーザーhttpは「誰でも」に属するので、ユーザーhttpにSSHキーペアを提供し、公開キーをgitユーザーの認証キーファイルに追加します。今、Webサービスは単にssh -n git@localhost echo $key >> ~/.ssh/authorized_keys

gitオープンアクセスユーザーがシェルを取得したくない場合(セキュリティが重要であるため)、まだgit pushSSH経由で公開を許可している場合は、公開鍵送信のみを作成して実際のメタデータを取得できます。リポジトリ。ユーザーhttpはこのリポジトリのレプリカを持ち、Webサービスはコミットとプッシュを実行します。その後、サーバー側のフックは送信されたキーに対して完全性チェックを実行し、git検証後にユーザーのAuthorized_keysファイルに追加できます。

しかし、すべてが何とか終わったとしましょう。あなたは誰でもあなたのユーザーに自分のSSHアクセス権を与えることができるシステムを持つでしょうgit。それでは、SSH認証のポイントは正確に何ですか?見知らぬ人にシェルのアクセス権を持たせたいですか?gitユーザーパスワードを消去して空のパスワードを許可しないのはなぜですか?あるいは、これらのユーザーにSSHを介したレプリケーション以外の機能を提供したくない場合は、httpまたはgitプロトコルを介してリポジトリを提供し、混乱を避けることはどうですか?

答え2

authorized_keys信頼できないユーザーが自分の公開鍵をユーザーのファイルに追加できるようにする可能性があるため、そのgitユーザーにパスワードを知らせることをお勧めしますgit

関連情報