มีวิธีป้องกันไม่ให้คอมไพล์เปลี่ยนสิทธิ์และความเป็นเจ้าของแบบดึงได้หรือไม่?


11

ทุกครั้งที่ผมทำgit pullหรือgit reset, gitการตั้งค่าใหม่เปลี่ยนเป็นสิทธิ์และความเป็นเจ้าของฉันทำ ดูตัวเอง:

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

มีวิธีแก้ไขไหม?

ฉันต้องการให้บางไฟล์ / ไดเรกทอรีสามารถเข้าถึงได้สำหรับการเขียนโดยเว็บเซิร์ฟเวอร์

คำตอบ:


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 clone มีความเป็นเจ้าของเฉพาะคุณมีอย่างน้อย 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ก่อนที่จะทำงานในพื้นที่ทำงานนี้

ตัวเลือกอื่น

หากไม่มีสิ่งใดที่ยอมรับได้คุณสามารถลองใช้ ACL แทนในไดเรกทอรีพื้นที่ทำงาน git เหล่านี้จะกล่าวถึงในหลาย Q & A ในเว็บไซต์นี้เช่นใน Q & A นี้หัวข้อ: รับไฟล์ใหม่เพื่อสืบทอดสิทธิ์ของกลุ่มบน Linux


newgrpครั้งแรกที่คุณจะต้องมีความหมาย จากนั้นจะเปลี่ยนกลุ่มสำหรับเชลล์ปัจจุบันเท่านั้นหรือไม่ และท้ายที่สุดประเด็นก็คือเพื่อให้สามารถเข้าถึงไฟล์ / ไดเรกทอรีเฉพาะสำหรับการเขียนโดยเว็บเซิร์ฟเวอร์ ท้ายที่สุดฉันอาจจะแก้ไขด้วยตนเองหรือตั้งgitเบ็ด ...
x-yuri

@ x-yuri - ใช่ขอโทษที่ 5am นี่และฉันกำลังจะไปนอน 8-) ใช่สิ่งนี้ยังคงมีอยู่สำหรับเชลล์ปัจจุบันเท่านั้นดังนั้นนั่นอาจเป็นข้อเสียของวิธีการนั้น หากคุณตั้งใจที่จะเข้าถึงเว็บเซิร์ฟเวอร์เพียงอย่างเดียวนั่นก็จะเป็นเรื่องยุ่งยากและคุณอาจต้องการใช้ ACL ในตอนนั้น นอกจากนี้คุณอาจต้องการเพิ่มรายละเอียดเหล่านี้ลงในคำถามของคุณเนื่องจากมันไม่ชัดเจนว่าจุดประสงค์ของคุณคืออะไรดังนั้นฉันสามารถตอบคุณในเงื่อนไขที่ไม่เฉพาะเจาะจงเท่านั้น
slm

1
@ x-yuri - การอัปเดตเบ็ดเช่นนี้อาจจะฉลาดมากขึ้น: stackoverflow.com/questions/9613545/…
slm

1
@ x-yuri - การควบคุมสิทธิ์ถูกกล่าวถึงในหนังสือ git ภายใต้ hooks: git-scm.com/book/en/Customizing-Git-Git-Hooks
slm

ฉันไม่เห็นจริง ๆ ว่าการเปลี่ยนกลุ่มสำหรับเชลล์ปัจจุบันเพียงอย่างเดียวอาจเป็นข้อเสียได้อย่างไร ฉันกังวลว่าจะไม่เปลี่ยนวิธีการทำงานของแอพที่เหลือ
x-yuri

2

โซลูชันที่ฉันใช้คือเรียกใช้คำสั่งในฐานะผู้ใช้ที่มีสิทธิ์ที่คุณต้องการเก็บไว้:

sudo -u user command

สิ่งนี้จะป้องกันไม่ให้สิทธิ์เปลี่ยนแปลง ฉันใช้เมื่ออัปเดตที่เก็บ git บน VPS ของฉันในขณะที่ยังคงการตั้งค่าการอนุญาตไฟล์ไว้ที่ผู้ใช้เว็บเซิร์ฟเวอร์

ดูเพิ่มเติมคำถามเดียวกันที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.