SSH ไม่อนุญาตให้ใช้คีย์ที่มีสิทธิ์อ่านได้แบบกลุ่ม


9

ฉันมีเซิร์ฟเวอร์คอมไพล์การพัฒนาที่ปรับใช้กับเซิร์ฟเวอร์สดเมื่อliveสาขาถูกส่งไป ผู้ใช้ทุกคนมีการเข้าสู่ระบบของตัวเองและดังนั้นpost-receiveตะขอซึ่งการปรับใช้สดจะถูกเรียกใช้ภายใต้ผู้ใช้ของตนเอง

เพราะฉันไม่ต้องการที่จะรักษากุญแจสาธารณะของผู้ใช้ในฐานะกุญแจที่ได้รับอนุญาตบนเซิร์ฟเวอร์ระยะไกลสดฉันได้สร้างชุดของคีย์ที่เป็นของระบบ git เพื่อเพิ่มไปยังเซิร์ฟเวอร์สดระยะไกล (ในpost-receiveเบ็ดฉันกำลังใช้$GIT_SSHเพื่อตั้งค่าไพรเวตคีย์ด้วย-iตัวเลือก)


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

นี่คือตัวอย่างข้อผิดพลาด:

XXXX@XXXX /srv/git/identity % ssh -i id_rsa XXXXX@XXXXX
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: id_rsa

ฉันได้มองไปรอบ ๆ โดยคาดหวังว่าจะพบบางสิ่งในทางที่บังคับให้ ssh เพิ่งผ่านการเชื่อมต่อ แต่ฉันไม่พบอะไรเลยนอกจากมีคนสุ่มสี่สุ่มห้าบอกว่าคุณไม่ควรอนุญาตการเข้าถึงอะไรนอกจากผู้ใช้คนเดียว

คำตอบ:


5

นี่เป็นวิธีที่ง่ายและปลอดภัยดี

สร้างผู้ใช้ใหม่สำหรับการถ่ายโอน ssh ฉันจะเรียกมันว่า git-sync สร้างผู้ใช้ที่คล้ายกันบนเซิร์ฟเวอร์ที่มีความเป็นสมาชิกกลุ่มสำหรับที่เก็บ git เพิ่มพับลิกคีย์สำหรับการซิงค์ผู้ใช้ลงในไฟล์ผู้ใช้ที่ได้รับอนุญาต _keys2 ฉันสมมติว่าผู้ใช้คอมไพล์เป็นสมาชิกของกลุ่ม gitgroup ตรวจสอบให้แน่ใจว่าผู้ใช้ git-sync เป็นสมาชิกของกลุ่มนี้ด้วย

ตอนนี้แก้ไขไฟล์ / etc / sudoers ของคุณเพื่อรวมบรรทัดดังนี้:

%gitgroup ALL=(git-sync) NOPASSWD: /usr/bin/git

สิ่งนี้จะทำให้สมาชิกของกลุ่ม gitgroup สามารถเรียกใช้คำสั่ง / usr / bin / bit เป็น git-sync โดยไม่ต้องใช้รหัสผ่าน

ตอนนี้ใส่อะไรแบบนี้ลงในตะขอหลังการรับของคุณ:

sudo -u git-sync /usr/bin/git push origin

นี่ดีกว่าสิ่งที่ฉันกำลังมองหาขอบคุณ!
Jessie Ross

11

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

ประโยชน์ที่ดีสำหรับสิ่งนี้คือคุณไม่จำเป็นต้องใช้ sudo - การแก้ปัญหาจะง่ายขึ้น

โปรดทราบว่าสิ่งนี้จะพบปัญหาเดิมอีกครั้งหากคุณใช้รูทเพื่อส่งไปยัง repo git ของคุณ


2
มันยอดเยี่ยมมากและดีกว่าคำตอบ "อย่าทำอย่างนั้น" ขอบคุณ!
เอียนแมคโกแวน

2
Permissions 0640 for 'id_rsa' are too open.

รหัสส่วนตัวจะต้องเป็นส่วนตัว คุณไม่ควรอนุญาตให้ทุกคนอ่าน

เนื่องจากฉันไม่ต้องการที่จะรักษากุญแจสาธารณะของผู้ใช้ในฐานะกุญแจที่ได้รับอนุญาตบนเซิร์ฟเวอร์ระยะไกลสดฉันได้สร้างชุดของคีย์ที่เป็นของระบบ git เพื่อเพิ่มไปยังเซิร์ฟเวอร์สดระยะไกล (ใน post-receiveเบ็ดฉันใช้$GIT_SSHเพื่อตั้งค่าไพรเวตคีย์ด้วย-iตัวเลือก)

  1. ตั้งค่าคู่คีย์เป็น ssh จาก dev ไปยังเซิร์ฟเวอร์ที่ใช้งานจริง
  2. ในpost-receiveสคริปต์ hook ลองใช้ดังนี้:

    if [ "live" == "$branch" ]; then
        ssh -t user@prod "git --work-tree=... --git-dir=... checkout -f"
    fi
    

ฉันจะ "ตั้งค่าคู่กุญแจเป็น ssh จาก dev ไปยังเซิร์ฟเวอร์การผลิต" ได้อย่างไรนี่คือสิ่งที่ฉันมีปัญหา ฉันมี 2 แล้ว
Jessie Ross

1
เมื่อวันที่ ssh-keygendev: ssh-copy-id user@prod, chmod 700 ~/.sshเมื่อวันที่แยง: chmod 600 ~/.ssh/authorized_keys,
ควอนตั้ม

1
ปัญหาคือมีผู้ใช้หลายคนดังนั้นฉันต้องทำซ้ำสำหรับผู้ใช้ทุกคนที่ต้องการแก้ไขเวลาโดยทุกโครงการที่มีอยู่บนเซิร์ฟเวอร์
Jessie Ross

ไม่คุณเพียงแค่ต้องตั้งค่าผู้ใช้อีกสองคนเท่านั้น: หนึ่งถึง ssh จาก dev ไปยัง prod และอีกอันเพื่อเรียกใช้git checkout...(บน prod)
quanta

post-receiveเบ็ด (เครื่อง dev) จะดำเนินการโดยผู้ใช้ที่จะผลักดันการเปลี่ยนแปลง (จึงอยู่ภายใต้การได้รับอนุญาตจากผู้ใช้) เพื่อให้พวกเขาทั้งหมดจะมีปุ่มที่แตกต่างกันผมไม่สามารถช่วยเหลือซึ่งผู้ใช้ก็จะเป็น มีสองpost-receivehooks บนเซิร์ฟเวอร์ที่ต่างกันสองตัวที่ทำงานอยู่
Jessie Ross
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.