Apakah ada cara untuk mencegah git mengubah izin dan kepemilikan saat menarik?


11

Setiap kali saya melakukan git pullatau git reset, gitme-reset perubahan untuk izin dan kepemilikan yang saya buat. Lihat diri mu sendiri:

#!/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

Hasil:

$ ./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)

Apakah ada cara untuk mengatasinya?

Saya ingin membuat beberapa file / direktori dapat diakses untuk ditulis oleh server web.

Jawaban:


4

Ini terdengar seperti pengguna yang Anda jalankan memiliki set grup default yuri. Anda dapat mengkonfirmasi seperti ini:

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

UID akun Anda adalah ini: uid=1000(saml)sedangkan grup default adalah git=1000(saml)dan semua grup sekunder sesudahnya.

CATATAN: Jika Anda ingin git clone memiliki kepemilikan spesifik, maka Anda memiliki setidaknya 2 opsi.

Pilihan 1

Atur direktori induk dengan izin seperti yang Anda inginkan seperti:

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

$ cd topdir
$ git clone ....

Ini memaksa direktori topdiruntuk menegakkan direktori anak apa pun di bawahnya agar grup httpditerapkan. Ini akan bekerja secara luas tetapi dapat menyebabkan masalah, karena jika Anda memindahkan file ke ruang kerja klon git ini, file-file itu tidak akan memiliki kelompok mereka ditegakkan oleh perubahan yang dibuat di atas.

Pilihan 2

Sebelum melakukan pekerjaan, ubah grup default Anda menjadi httpseperti itu:

$ newgrp http
$ git clone ...

Metode ini akan memaksa semua file baru yang dibuat untuk mengatur grup mereka httpalih-alih grup standar normal Anda yuri, tetapi ini hanya akan berfungsi selama Anda ingat untuk melakukan newgrpsebelum bekerja di ruang kerja ini.

Pilihan lain

Jika tak satu pun dari ini tampaknya dapat diterima, Anda dapat mencoba menggunakan ACL sebagai gantinya di direktori work git. Ini dibahas dalam beberapa Tanya Jawab di situs ini, seperti dalam Tanya Jawab yang berjudul: Mendapatkan file baru untuk mewarisi izin grup di Linux .


Pertama, Anda harus bermakna newgrp. Lalu, apakah itu mengubah grup hanya untuk shell saat ini? Dan terakhir, intinya adalah membuat hanya file / direktori tertentu yang dapat diakses oleh server web. Bagaimanapun, saya mungkin harus memperbaikinya secara manual, atau mengatur beberapa gitkait ...
x-yuri

@ x-yuri - ya maaf jam 5 pagi di sini dan saya akan tidur 8-). Ya ini hanya berlaku untuk shell saat ini, jadi itu akan menjadi kelemahan dari pendekatan itu. Jika Anda berniat hanya untuk akses tertentu untuk server web maka itu akan sulit, dan Anda mungkin ingin menggunakan ACL kemudian. Anda juga mungkin ingin menambahkan rincian ini ke Q. Karena, tidak jelas apa tujuan yang Anda maksudkan, jadi saya hanya bisa menjawab Anda dalam istilah non-spesifik.
slm

1
@ x-yuri - kait pembaruan posting seperti ini mungkin lebih tepat: stackoverflow.com/questions/9613545/…
slm

1
@ x-yuri - izin kontrol dibahas dalam buku git di bawah kait: git-scm.com/book/en/Customizing-Git-Git-Hooks
slm

Saya tidak benar-benar melihat bagaimana mengubah grup hanya untuk shell saat ini mungkin merupakan kerugian, jujur ​​saja. Saya khawatir tidak mengubah cara kerja aplikasi lainnya.
x-yuri

2

Solusi yang saya gunakan adalah menjalankan perintah sebagai pengguna yang memiliki izin yang ingin Anda pertahankan:

sudo -u user command

Ini menjaga izin dari perubahan. Saya menggunakannya ketika memperbarui repositori git di VPS saya, sambil menjaga hak akses file disetel ke pengguna server web.

Lihat juga pertanyaan yang sama di sini .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.