プロジェクト用の単一の SSH アカウントを使用して、SSH 経由で Git サーバーをセットアップしたいと思います。すべてのプロジェクト メンバーは authorized_keys に SSH キーをリストする必要があります。ロックダウンにより、アクセスを Git 関連の作業のみに制限し、専用ディレクトリ内でのみアクセスできるようにする必要があります。
このようなセットアップを作成するための最良の方法は何ですか? git-shell があり、これは git コマンドのみを実行するようにロックダウンできるようですが、単一のディレクトリへのアクセスを制限する方法がわかりません。さまざまな Python および Ruby ラッパーもありますが、どれを信頼すればよいでしょうか?
答え1
答え2
あなたの脅威モデルは何ですか?
善良な人が誤って Git リポジトリやその他のデータを破壊した場合:ユーザーが自分のホームディレクトリ、tmp、git リポジトリにのみ書き込み可能であることを確認してください。コミットするたびにリポジトリをバックアップし、定期的にリカバリ手順を実行してください。
悪意のある人物が誰かの秘密鍵を盗み、システムを所有しようとします。攻撃対象領域は、認証によって保護されている sshd の部分と、使用するシェル インターフェイスに制限されるため、攻撃対象領域をできるだけ小さくしてください。Python/Ruby ラッパーには大量のコードが含まれており、エラーが発生する余地も大きくなっています。git-shell を使用するか、sshd_config の Match および ChrootDirectory ディレクティブを使用して、ユーザーがアクセスできるファイルシステムの部分を制限することを検討してください。
悪意のある人物が誰かの秘密鍵を盗み、ソースコードを入手します。ユーザーに秘密鍵を保護する方法を教え、鍵を迅速に失効させる手順を確立します (例: 午前 4 時に誰に電話して鍵を失効させるか)。
を使用しないでください.ssh/authorized_keys
。代わりに、AuthorizedKeyfile
sshd_config で キーワードを使用して、ユーザーが書き込みアクセス権を持たないパスを指定します (例: ) /etc/ssh/keys/%u
。ユーザーが自分のコピーで .ssh/authorized_keys を上書きできないようにすることは困難です。
また、監査を可能にするために、ユーザーのキーファイルと sshd_config をバージョン管理された状態に保ちます。