git cloneで作成されたディレクトリには「setfacl」権限が適用されませんか?

git cloneで作成されたディレクトリには「setfacl」権限が適用されませんか?

~/public_html私のWebサイトのルートディレクトリ(私のWebサイトが提供するファイルがある場所)の権限を設定する方法は次のとおりです。

sudo chgrp -R www-data ~/public_html
chmod g+s ~/public_html
chmod g+rwx ~/public_html
setfacl -m d:g:www-data:rwx ~/public_html
  • コマンド#1「www-data」グループに所有権アクセス権を付与します~/public_html
  • #2グループ内のすべての新しいディレクトリ/ファイルも、「www-data」グループが所有するようにグループIDを設定します。
  • #サムディレクトリ内の「www-data」グループのアクセス権を775に設定します。
  • #4これがにも適用されることを確認してください~/public_html

期待どおりにうまく動作します。新しく作成されたすべてのディレクトリとファイルは必須権限を継承します。

問題は生成されたディレクトリにありましたgit clone(私以降)。cd ~/public_html && git clone ....

修正する:目次するグループIDを継承します(たとえば、「www-data」は新しく作成されたディレクトリを所有しています)。しかし、アクセス権(ディレクトリの場合は775、ファイルの場合は664)また、これはgitが生成した最上位ディレクトリにすぎません。継承された権限が必要なすべてのディレクトリとファイル。 Debianのgitパッケージにこれがないかもしれませんか?このエラーを修正してくださいしかし、?

私は何が間違っていましたか?その代わりに一体どうすればいいですか?

答え1

gitファイルが作成されたら、GIDとACLを上書きできます(mvデバイス間を移動するときの簡単な作業と同じです)。 strace() を実行してstrace -f -o git.strace -e trace=fileこれを確認できます。

答え2

他の権限が使用されている場合は、git clone次のような場合である可能性が高くなりますumask

$ umask
0002

このコマンドを実行したときに生成される新しいファイルは、指定した権限に従って生成されますgit cloneumaskUmask はどのビットをマスクすべきかを示します。したがって、上記の例では、umaskを使用して作成したすべての新しいファイルは0002他の書き込みビットをオフにします。

引用する

答え3

ディレクトリの拡張属性の複製に失敗する可能性がgitありますpublic_html

Linuxでは、ACL(およびSELinuxファイルタグ)はファイルシステムベースの拡張属性を使用して実装されています(attr、getfattr、およびsetfattrのマニュアルページを参照)。拡張属性を保存するには、明示的にコピーする必要があります。ほとんどの最新のLinuxディストリビューションのほとんどのファイルユーティリティ(mv、cp、tar、rsync、rmなど)は、拡張属性(および拡張ACL)をサポートするように更新されました。

strace を再実行しますが、その-e trace=file部分を無視して にパイプしてgrep xattrから setxattr への呼び出しがあることを確認してください。

strace -f 2>&1 git clone | grep xattr

出力が表示されない場合は、git(または少なくとも使用されているgit)は拡張属性をサポートしていません。

関連情報