特定のディレクトリの既存または将来のサブディレクトリにある特定のユーザーに読み取り/書き込み権限を付与する方法は?

特定のディレクトリの既存または将来のサブディレクトリにある特定のユーザーに読み取り/書き込み権限を付与する方法は?

VPSで独自のgitリポジトリをホストしています。私のユーザーがジョンだとしましょう。

私のgitリポジトリにアクセスするためにSSHプロトコルを使用しているので、私のURLは 。ssh://[email protected]/path/to/git/myrepo/

ルートはその下のすべてのコンテンツの所有者です。/path/to/git

Johnに以下のすべての項目に対する読み取り/書き込みアクセス権を付与しようとしています。/path/to/git/myrepo

chmodアクセスを制御しようとしましたが、setfaclどちらも同じ方法で失敗しました。正しいオプションを使用してすべての権限を再帰的に適用します。現在の既存のサブディレクトリしかし、/path/to/git/myrepo新しいディレクトリが作成されると、私のユーザーは新しいディレクトリに書き込むことができません。

私はコミットするたびに権限を再適用できるいくつかのフックがgitにあることを知っていますが、非常に基本的な目的に比べて複雑すぎるため、間違った方向に行っていると思い始めました。

尋ねる/path/to/git/myrepo:rwがjohnの下のすべてのエントリにアクセスし、ツリー構造の変更に適応できるように、私の権限をどのように設定する必要がありますか?

第2四半期:一歩退いて一般的なアプローチを変えなければならない場合は教えてください。

編集する:質問はそのまま回答しましたが、質問が間違っています。正しい質問は、「Sshアクセス用にサーバーでデフォルトのgitリポジトリをどのように設定しますか?」です。私の答えを参照してください。

答え1

myrepousersたとえば、グループを作成し、gitユーザーをグループに追加します。

次に、/path/to/git/myrepoの下のすべてのグループをmyrepousersに変更します。

chown -R .myrepousers /path/to/git/myrepo

次に権限を変更します。

chmod -R g+w /path/to/git/myrepo
find /path/to/git/myrepo -type d -exec chmod g+s {} \;

すべてが準備されなければなりません。

答え2

実際、これは間違ったアプローチです。さらなる調査の最後に、私の場合、リポジトリのファイルシステムに対する権限を処理するためにgitの組み込み機能を使用する必要があることを発見しました。

これはデフォルトで次の値を持つことができるsharedオプションを介して行われます。git init

  • group:ファイルとディレクトリにユーザーとグループの書き込み権限があり、他のすべてのユーザーに読み取り権限があるようにリポジトリを初期化します。
  • 0660:同じですが、他の人は読み取り権限を持っていません。

新しく作成されたディレクトリとファイルには自動的に正しい権限が付与されます。git init既存のリポジトリを使用してコンテンツを失うことなく再構成することもできます。

それで結局私がしなければならないことは次の通りでした。

  • グループの作成mygitrepo
  • ユーザーを追加してください。
  • chmod -R gitリポジトリroot:mygitrepo

これで、グループ内のすべてのユーザーはファイルシステムの権限に影響を与えず、他の誰もプル/プッシュできません。

git init --bare --shared=0660

http://www.kernel.org/pub/software/scm/git/docs/git-init.htmlより多くの情報を知りたいです。

答え3

ACLがサポートされている場合は、デフォルトのACLを使用してこれを実行できます。を実行すると、これらのことを忘れやすいですls -l

find /path/to/git/myrepo -type d -exec setfacl -m d:u:john:rwx {} +

しかし、私はあなたがより体系的な仕事をしたいと思います。 Gitoliteを展開すると、より良いソリューションが提供される可能性があります。

関連情報