60

SSH を介してリモートでアクセスできる git リポジトリがいくつかあり、それらの一部を読み取り専用にして、これ以上のプッシュを防止したいと考えています。これらのリポジトリを指すリモートを持っている人もいます。

これらのベア リポジトリは初期化さ--shared=groupれたので、すべてのファイルのファイル アクセス許可を 660 に設定しても、SSH アクセスは許可するが、書き込みは禁止するのに十分でしょうか? それとももっと簡単な方法がありますか?

乾杯。

4

10 に答える 10

53

これを行う方法は複数あります。

  • ユーザーがそれぞれシェル アカウント (おそらく制限付き) を持っていて、それぞれが自分のアカウントを介して git リポジトリにアクセスしている場合、ファイルシステムのアクセス許可を使用して、git リポジトリへの SSH アクセスを制御できます。Unix では、それらはディレクトリに対する書き込み権限であり、おそらくグループを作成し、グループの特定の権限 (「スティッキー グループ ID」を設定) を使用します。

  • プッシュするgit-receive-packには、ユーザーの $PATH にあり、実行可能である必要があります...ただし、このアプローチがどれほど実現可能かはわかりません。

  • updateまたはpre-receiveフックを使用して、リポジトリへのアクセス制御を行うことができます。たとえば、git ソースの update-paranoidサンプル フックを使用します。contrib/hooks

  • ユーザー数が多い場合は、 Gitosis (Python の場合、setuptools が必要) やGitolite (Perlの場合)などのgit リポジトリへのアクセスを管理するためのツールを使用することをお勧めします。

  • 読み取り専用アクセスの場合、SSH プロトコルを介したアクセスではなく、プロトコルを介した読み取り専用の匿名 (および非認証) アクセスを提供するようにgit デーモンをセットアップできます。git://

    url.<base>.insteadOfSSH から GIT プロトコルへの移行を容易にする方法については、config 変数のドキュメントを参照してください。


Scott Chacon によるPro Git book の第 4 章「Git on the Server」も参照してください (CC-BY-NC-SA ライセンス)。

于 2009-11-02T20:19:40.883 に答える
13

pre-receive単に有益なメッセージを出力し、ゼロ以外のステータスで終了するフックが仕事をします。

メッセージに意味のある情報を入れたと仮定すると、欲求不満のユーザーからプッシュできない理由を尋ねるクエリも削減されます。

#!/bin/bash
echo "=================================================="
echo "This repository is no longer available for pushes."
echo "Please visit blah blah yadda yadda ...."
echo "=================================================="
exit 1

スクリプトの実行権限を設定し、適切なユーザーまたはグループによって所有されていることを確認してください。そうしないと、スクリプトは実行されず、警告も表示されません。

于 2016-10-26T00:24:26.167 に答える
8
chmod -R a-w /path/to/repo.git
于 2009-11-02T16:44:03.300 に答える
3

git は主にアクセス制御のためにファイルシステムに依存しているため、それは機能します。あなたの許可では、世界はファイルにアクセスできませんが、ユーザーとグループには読み取り/書き込みアクセス権があることに注意してください。誰でも読み取り可能にする場合は、パーミッションを0444.

0664ユーザーがどこにいて、nobodyグループがgitdevs. 次に、gitdevsグループ内のユーザーのみがレポに書き込むことができますが、他のユーザーはレポから読み取ることができます。

フォローアップ ここには、リポジトリを共有するさまざまな方法をカバーするリンクがあり、長所と短所、およびアクセス制御機能について説明しています。

于 2009-11-02T16:23:06.763 に答える
1

アクセス制御も必要な場合は、gitosisをチェックしてください。セットアップは非常に簡単で、簡単なスクリプトを使用して、誰が何をできるかを制御できます。

于 2009-11-02T16:38:37.280 に答える
0

別の可能性は git プロトコルですが、git デーモンが実行されている必要があります。

于 2009-11-02T16:34:55.603 に答える