プル時にgitがアクセス許可と所有権を変更しないようにする方法はありますか?


11

私がやるたびgit pullまたはgit resetgitリセットは私が作ったアクセス権と所有権を変更します。自分で見て:

#!/usr/bin/env bash
rm -rf 1 2

mkdir 1
cd 1
git init
echo 1 > 1 && git add 1 && git ci -m 1

git clone . ../2
cd $_
chmod 0640 1
chgrp http 1

cd ../1
echo 12 > 1 && git ci -am 2

cd ../2
stat 1
git pull
stat 1

出力:

$ ./1.sh 2>/dev/null | grep -F 'Access: ('
Access: (0640/-rw-r-----)  Uid: ( 1000/    yuri)   Gid: (   33/    http)
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    yuri)   Gid: ( 1000/    yuri)

それを回避する方法はありますか?

一部のファイル/ディレクトリをWebサーバーが書き込み可能にしたい。

回答:


4

これは、実行しているユーザーのデフォルトグループがに設定されているようyuriです。これは次のように確認できます。

$ id -a
uid=1000(saml) gid=1000(saml) groups=1000(saml),10(wheel),989(wireshark)

アカウントのUIDは次のとおりです。uid=1000(saml)デフォルトグループはでgit=1000(saml)あり、セカンダリグループはそれ以降です。

注: gitクローンに特定の所有権を持たせたい場合は、少なくとも2つのオプションがあります。

オプション1

次のように、必要な権限を持つ親ディレクトリを設定します。

$ mkdir topdir
$ chgrp http topdir
$ chmod g+s topdir

$ cd topdir
$ git clone ....

これにより、ディレクトリtopdirは、その下の子ディレクトリにグループをhttp適用するように強制しました。これは全体的には機能しますが、ファイルをこのgit cloneワークスペースに移動すると、これらのファイルは上記の変更によってグループが適用されないため、問題が発生する可能性があります。

オプション#2

作業を行う前に、デフォルトグループを次のhttpように変更します。

$ newgrp http
$ git clone ...

この方法では、作成されたすべての新しいファイルのhttpグループが通常のデフォルトグループの代わりに設定されますyuriが、これはnewgrp、このワークスペースで作業する前に行うことを忘れない限り機能します。

他のオプション

これらのどちらも受け入れられない場合は、代わりにgitワークスペースディレクトリでACLを使用してみてください。これらは、このサイトの複数のQ&Aで説明されています。たとえば、次のQ&Aというタイトルの「Linuxでグループのアクセス許可を継承するための新しいファイルの取得」です


まず、あなたが意味する必要がありnewgrpます。次に、現在のシェルのみのグループを変更しますか?そして最後に、ポイントはWebサーバーによる書き込みのために特定のファイル/ディレクトリのみにアクセスできるようにすることでした。結局のところ、おそらく手動で修正するか、gitフックを設定する必要があります...
x-yuri 2014年

@ x-yuri-はい、申し訳ありませんが、ここは午前5時で、ベッドに行くところです8-)。はい、これは現在のシェルでのみ持続するため、そのアプローチの欠点となります。Webサーバーへの特定のアクセスのみを意図している場合、それはトリッキーになるため、おそらくACLを使用することになります。また、これらの詳細をQに追加することもできます。現状では、意図する目的が明確でないため、具体的な言葉でのみ回答することができます。
slm

1
@ x-yuri-次のような更新後のフックの方が適しているかもしれません:stackoverflow.com/questions/9613545/…–
slm

1
@ X-ゆり-制御権限がフックの下にgitの本の中で議論されていますgit-scm.com/book/en/Customizing-Git-Git-Hooks
SLM

正直に言うと、現在のシェルのみのグループを変更することがどのようにマイナスになるかは実際にはわかりません。他のアプリの動作方法が変わらないか心配でした。
x-yuri 2014年

2

私が使用する解決策は、保持したい権限を持つユーザーとしてコマンド実行することです。

sudo -u user command

これにより、権限が変更されなくなります。私はVPSのgitリポジトリを更新するときに、ファイルの権限をwebserverユーザーに設定したままにします。

また、同じ質問を参照してくださいここに

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.