ฉันจะป้องกันไม่ให้คอมไพล์ต้องการ sudo ในทุกคำสั่ง git ได้อย่างไร


11

ฉันสร้างไดเรกทอรี/var/wwwเพื่อเก็บโคลนแอปพลิเคชันเว็บของฉันเมื่อฉันเริ่มต้นโคลนแอพจาก GitHub มันต้องการให้ฉันใช้ sudo และทุกครั้งที่ทำgit pullมันต้องใช้ sudo ฉันพบปัญหาบางอย่างเพราะสิ่งนี้ ตัวอย่างเช่นคีย์ ssh ของฉันไม่ตรงกัน ดังนั้นเมื่อฉันทำgit pullฉันต้องใช้ HTTPS แทน ssh และป้อนชื่อผู้ใช้และรหัสผ่านของฉันทุกครั้งที่ฉันต้องการดึงและอัปเดตแอป ฉันจะกำหนดค่านี้ได้อย่างไรฉันจึงไม่ต้องใช้ sudo ทุกครั้งที่ฉันใช้ git

คำตอบ:


13

มีสองสิ่งเกิดขึ้นที่นี่:

  • เมื่อคุณsudo git checkout ...ไฟล์เหล่านั้นทั้งหมดเป็นของผู้ใช้รูทและกลุ่มรูท ด้วยสิทธิ์มาตรฐานนั่นคือสาเหตุที่การเปลี่ยนแปลงไฟล์เหล่านั้นต้องการให้คุณรูท

  • /var/www/โดยค่าเริ่มต้นเป็นของwww-dataกลุ่ม สิ่งที่ผู้ใช้ของคุณไม่ได้เป็นค่าเริ่มต้น

วิธีที่ง่ายที่สุดที่จะเขียนใน/var/www/เป็นเพียงการเพิ่มผู้ใช้ของคุณในกลุ่ม www-ข้อมูล แน่นอนคุณสามารถเปลี่ยนไดเรกทอรีที่ผู้ใช้ของคุณเป็นเจ้าของได้ แต่สิ่งนี้อาจมีผลกระทบที่น่ารังเกียจบางอย่างหากคุณไม่ได้ทำการล้างข้อมูลล่วงหน้า

คุณจะต้องลงชื่อเข้าใช้อีกครั้งหลังจากเพิ่มผู้ใช้ของคุณในกลุ่ม www-data

ในกรณีของคุณโดยเฉพาะคุณจะต้องแก้ไขระเบียบปัจจุบันของข้อมูลที่เป็นเจ้าของรูท คุณสามารถลบมันในฐานะรูท (และชำระเงินอีกครั้ง) แต่ถ้าคุณมีงานที่ยังไม่ได้บันทึกมันจะสะอาดกว่าที่จะดึงทุกอย่างกลับไปยังผู้ใช้ของคุณ ตัวอย่างต่อไปนี้ขี้เกียจสุด ๆ และถือว่าสิ่งที่เรากำลังพูดถึงเป็นสิ่งเดียวใน / var / www /:

sudo chown -R www-data: /var/www/

ตกลงมันจะดีกว่าหรือไม่ที่จะsudo git checkoutเข้าไปในไดเรกทอรีอื่นแล้วปรับใช้แอปของฉันในไดเรกทอรี / var / www ฉันเพิ่งอ่านที่ไหนสักแห่งที่มันไม่ได้เป็นความคิดที่ดีที่จะเช็คเอาต์โครงการในไดเรกทอรี var เพื่อเริ่มต้น บุคคลหนึ่งแนะนำให้ตรวจสอบโครงการในโฮมได
ตอรี่

2
มันจะดีที่สุดถ้าคุณหยุดการใช้คอมไพล์เป็นรูท มีจุดมุ่งหมายเพื่อที่ แผนใด ๆ ที่ทำให้คุณรันในฐานะรูทล้มเหลว สิ่งที่คุณกำลังพูดเกี่ยวกับการตรวจสอบออกไป webdirectory เป็นที่ถูกต้อง - ให้คนเข้าถึงของคุณ.gitไดเรกทอรีสามารถให้เข้าถึงพวกเขาไปยังสิ่งที่คุณไม่ต้องการที่จะให้คนเข้าถึง แต่คุณสามารถป้องกันการเข้าถึง.git/dirซึ่งช่วยลดผลกระทบปัญหาทั้งหมด
Oli

นอกจากนี้ยังมีโครงสร้างไดเรกทอรีอื่น ๆ ที่ยอมรับได้ที่คุณมีไดเรกทอรีสำหรับเว็บไซต์ของคุณซึ่งสิ่งที่ไม่โฮสต์ไป (รวมถึง. git ของคุณ) และภายในที่มีสาธารณะ / ไดเรกทอรีที่คุณบอก Apache ให้เป็นเจ้าภาพ ร๊อคของการรักษาหนึ่งเว็บไซต์ใน / var / www / เป็นสิ่งที่โบราณมาก
Oli

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

@Scott ฉันพบปัญหาเดียวกันนี้ คำสั่งย่อยที่ตามมาใน repo (ในกรณีของฉัน) จะเรียก git และพยายามโคลน repos อื่น ๆ วิธีแก้ปัญหาเพื่อจัดตำแหน่งคีย์ SSH ใหม่ตามที่คุณระบุคือเริ่มกระบวนการโดยไม่ใช้ sudo คำถามและคำตอบมากมายเกี่ยวกับเรื่องนี้เป็นวิธีแก้ไขปัญหาที่อาจทำให้คุณชนกำแพงได้
Jordan Stefanelli

0

หืมเปลี่ยนเจ้าของโฟลเดอร์หรือไม่ ฉันย้ายโฟลเดอร์ www ของฉันใน / home / ชื่อผู้ใช้คุณสามารถเปลี่ยนตำแหน่งได้ใน / etc / apache2 / sites-enabled / 000-default


ดังนั้นจะต้องทำอย่างไรกับไดเรกทอรีที่ฉันเก็บโคลนของฉัน?
สกอตต์

ใช่แล้ว โดยค่าเริ่มต้น/var/wwwไม่สามารถเขียนได้
Joyfulgrind

0

ฉันสายไปเล็กน้อยกับคำตอบนี้ แต่ฉันพบว่าเพื่อหลีกเลี่ยงการป้อนรหัสผ่านทุกครั้งที่ฉันต้องเปลี่ยน repo จาก https เป็น ssh

จากส่วนช่วยเหลือ Github.com:

คำสั่งgit remote set-urlเปลี่ยน URL ที่เก็บรีโมตที่มีอยู่

เปิด Terminal

เปลี่ยนไดเรกทอรีการทำงานปัจจุบันเป็นโครงการท้องถิ่นของคุณ

แสดงรายการรีโมตที่มีอยู่ของคุณเพื่อรับชื่อรีโมตที่คุณต้องการเปลี่ยน

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

เปลี่ยน URL ของรีโมตจาก HTTPS เป็น SSH ด้วยคำสั่ง git remote set-url

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

ตรวจสอบว่า URL ระยะไกลมีการเปลี่ยนแปลง

git remote -v

# ยืนยัน URL ระยะไกลใหม่

origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
origin  git@github.com:USERNAME/REPOSITORY.git (push)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.