SSH を介してリモートでアクセスできる git リポジトリがいくつかあり、それらの一部を読み取り専用にして、これ以上のプッシュを防止したいと考えています。これらのリポジトリを指すリモートを持っている人もいます。
これらのベア リポジトリは初期化さ--shared=group
れたので、すべてのファイルのファイル アクセス許可を 660 に設定しても、SSH アクセスは許可するが、書き込みは禁止するのに十分でしょうか? それとももっと簡単な方法がありますか?
乾杯。
これを行う方法は複数あります。
ユーザーがそれぞれシェル アカウント (おそらく制限付き) を持っていて、それぞれが自分のアカウントを介して 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>.insteadOf
SSH から GIT プロトコルへの移行を容易にする方法については、config 変数のドキュメントを参照してください。
Scott Chacon によるPro Git book の第 4 章「Git on the Server」も参照してください (CC-BY-NC-SA ライセンス)。
pre-receive
単に有益なメッセージを出力し、ゼロ以外のステータスで終了するフックが仕事をします。
メッセージに意味のある情報を入れたと仮定すると、欲求不満のユーザーからプッシュできない理由を尋ねるクエリも削減されます。
#!/bin/bash
echo "=================================================="
echo "This repository is no longer available for pushes."
echo "Please visit blah blah yadda yadda ...."
echo "=================================================="
exit 1
スクリプトの実行権限を設定し、適切なユーザーまたはグループによって所有されていることを確認してください。そうしないと、スクリプトは実行されず、警告も表示されません。
chmod -R a-w /path/to/repo.git
git は主にアクセス制御のためにファイルシステムに依存しているため、それは機能します。あなたの許可では、世界はファイルにアクセスできませんが、ユーザーとグループには読み取り/書き込みアクセス権があることに注意してください。誰でも読み取り可能にする場合は、パーミッションを0444
.
0664
ユーザーがどこにいて、nobody
グループがgitdevs
. 次に、gitdevs
グループ内のユーザーのみがレポに書き込むことができますが、他のユーザーはレポから読み取ることができます。
フォローアップ ここには、リポジトリを共有するさまざまな方法をカバーするリンクがあり、長所と短所、およびアクセス制御機能について説明しています。
アクセス制御も必要な場合は、gitosisをチェックしてください。セットアップは非常に簡単で、簡単なスクリプトを使用して、誰が何をできるかを制御できます。
別の可能性は git プロトコルですが、git デーモンが実行されている必要があります。