id_rsa.pub
信頼できないユーザー、見知らぬ人が私のサーバーと特定のユーザーauthorized_keys
(git
私の場合はユーザー)にアップロードすることを許可する必要があります。手動で何もせずにこれを達成するための最も安全な方法は何ですか?
私は具体的にWebインターフェースを検討していますが、他のアプローチに強力な利点がある場合は、アイデアにオープンです。
httpデーモンはユーザーとして実行され、http
損傷を防ぐためにgit
ユーザー攻撃に対して脆弱ではありません。http
http
答え1
他のプロセスをブローカーとして使用します。 Webサービス(または他のサービス)は、どこかにあるスプールに新しい要求を書き込みます。中間子(man-in-the-middle)はスプールを監視し、新しいエントリを削除し、完全性チェックを実行し、git
Authorized_keysファイルにペイロードを追加します。同じブローカーは、Webサービスが読めるフィードバックを提供できます。ただし、感染したhttp
ユーザーはブローカーやgitユーザーを操作できません。ブローカーはデーモンでも、クローン操作でもかまいません。
git
または明らかに悪い考えがあるので:)1)ユーザーはとにかく自分のファイルへの書き込みアクセス権を持ち、authorized_keys
2)ユーザーがいるすべての人にSSHで許可されているアクセス権を持つという事実を利用できます。git
。したがって、ユーザーhttp
は「誰でも」に属するので、ユーザーhttp
にSSHキーペアを提供し、公開キーをgit
ユーザーの認証キーファイルに追加します。今、Webサービスは単にssh -n git@localhost echo $key >> ~/.ssh/authorized_keys
。
git
オープンアクセスユーザーがシェルを取得したくない場合(セキュリティが重要であるため)、まだgit push
SSH経由で公開を許可している場合は、公開鍵送信のみを作成して実際のメタデータを取得できます。リポジトリ。ユーザーhttp
はこのリポジトリのレプリカを持ち、Webサービスはコミットとプッシュを実行します。その後、サーバー側のフックは送信されたキーに対して完全性チェックを実行し、git
検証後にユーザーのAuthorized_keysファイルに追加できます。
しかし、すべてが何とか終わったとしましょう。あなたは誰でもあなたのユーザーに自分のSSHアクセス権を与えることができるシステムを持つでしょうgit
。それでは、SSH認証のポイントは正確に何ですか?見知らぬ人にシェルのアクセス権を持たせたいですか?git
ユーザーパスワードを消去して空のパスワードを許可しないのはなぜですか?あるいは、これらのユーザーにSSHを介したレプリケーション以外の機能を提供したくない場合は、httpまたはgitプロトコルを介してリポジトリを提供し、混乱を避けることはどうですか?
答え2
authorized_keys
信頼できないユーザーが自分の公開鍵をユーザーのファイルに追加できるようにする可能性があるため、そのgit
ユーザーにパスワードを知らせることをお勧めしますgit
。