web-dev-qa-db-ja.com

gitリポジトリでグループファイルの権限を正しく使用するにはどうすればよいですか?

--shared = groupで作成されたさまざまな理由から、ファイルパスを介して共有gitリポジトリにアクセスしています。

さまざまなUNIXグループがありますが、すべてが共通のグループを共有しています。 gitリポジトリでchgrp -Rを実行すると、誰でもそれを読み取ることができますが、誰かが書き込みを行うと、共通のグループを使用しない新しいファイルが作成されます。

この問題は、プライマリグループが共有グループではなく、newgrpを実行した場合、すべてが正常に機能しているためと考えられます。

ただし、このアプローチには問題があります。 newgrpは遅く、新しいシェルを生成します。これにより、.bash_profileでそれを呼び出すことは悪い考えだと思います。使用する新しいファイルall共通のグループ。 gitの作業を行う前にメモリを使用して実行することも、惨事のレシピのようです。

だから...何か提案はありますか?

26
rich

グループにも setgidビット を設定する必要があります。

 chgrp -R GROUP /path/to/repo
find/path/to/repo -type d -print0 | xargs -0 chmod g + s 
22
Wes Hardaker

--sharedで作成されていない既存のリポジトリは、次のコマンドを使用して共有にすることができます。

# make the repository shared
git config core.sharedRepository group # or whatever other sharing option
# fix the setgid bit
find . -type d | xargs chmod g+s
# repair the permissions
chmod -R g+r *
22
fikovnik

これは裸のリポジトリですか?それが裸のリポジトリであり、作成時に--sharedを使用した場合、これは発生していないはずなので、私が尋ねています。

ベアリポジトリの場合、ディレクトリの一部がg-sに変更されている可能性があります。これが発生した場合は、chmod g+xすべてのディレクトリのみ。どのファイルにも実行しないようにしてください。それよりも簡単な方法は、git init --bare --shared=group新しいリポジトリと、コンテンツをsomebodiesクローンからプッシュして戻します。

9
Arrowmaster

上記の回答の組み合わせを使用する必要がありました。

git config core.sharedRepository group
chgrp -R GROUP /path/to/repo
find /path/to/repo -type d -exec chmod g+rwxs {} \;
5
chovy

ベアリポジトリにshared=groupフラグが設定されると、残りはgitが処理するため、以下の作業は1回だけ実行する必要があります。また、setgidは、この用途では非推奨です。ここにコピー/貼り付け serverfaultからの私の回答

repogroupがグループで、repoディレクトリにcdがあると仮定します。

最初に共有フラグをgroupに変更します。

git config core.sharedRepository group 

注:ここでは、グループ名ではなく、キーワードgroupを使用する必要があります。これは、オプション--shared=groupを使用してベアリポジトリを作成するのと同じです。

次に、リポジトリ全体のグループを変更します。

chgrp -R repogroup .

既存のディレクトリがグループ書き込み可能(g+w)であり、既存の実行可能ファイルもグループ実行可能(g+X)になることを確認するには、次の操作も必要です。

chmod -R g+wX .

これを実行すると、gitはshared=groupフラグを尊重し、既存のファイルと新しいファイルの両方について、以下のグループ権限を処理します。そのため、umaskまたはchgrpに再度アクセスする必要はありません。

見つかった場合は、コメントにソースを追加します。

4
ggll