สร้างผู้ใช้ SSH ด้วยสิทธิ์แบบ จำกัด เพื่อใช้ที่เก็บ Git เท่านั้น


12

ฉันมีที่เก็บ git โฮสต์บนเซิร์ฟเวอร์ SunOS ของฉันที่ฉันใช้จากระยะไกลผ่าน ssh

git clone ssh://myUser@mydomain.com/path/to/git

ตอนนี้ฉันต้องเพิ่มผู้ใช้มากขึ้นเพื่อให้สามารถเข้าถึงที่เก็บ แต่ไม่แน่ใจว่าจะทำอย่างไร

ฉันเพิ่มหนึ่งผู้ใช้ทดสอบใน ssh แต่ดูเหมือนว่าฉันไม่สามารถ จำกัด สิทธิ์ผู้ใช้ให้ใช้ git ได้เท่านั้น

testUserสามารถ ssh ผ่านและเรียกดูเซิร์ฟเวอร์ทั้งหมด

ฉันจะสร้างผู้ใช้ที่สามารถเข้าถึง git จากระยะไกลเพื่อโคลน / ดึง / ดันเป็นต้นได้อย่างไร

ขอบคุณ

คำตอบ:


12

คุณอาจพิจารณาใช้gitoliteภายใต้ผู้ใช้คนเดียวแทนที่จะตั้งค่าผู้ใช้git-shellหลายคน (และสิทธิ์กลุ่มและกลุ่มที่ต้องการเพื่อให้พวกเขาสามารถแบ่งปันการเข้าถึงที่เก็บ)

gitoliteทำงานภายใต้ผู้ใช้คนเดียวบนเซิร์ฟเวอร์และใช้พับลิกคีย์ SSH เพื่อแยกการเข้าถึงที่เก็บ Git (ดู“ วิธีที่ gitolite ใช้ ssh ” สำหรับรายละเอียดบางส่วนของวิธีการที่gitoliteใช้รหัสประจำตัว SSH) gitoliteเสนอต่อพื้นที่เก็บข้อมูลต่อสาขาและแม้กระทั่งการควบคุมการเข้าถึงต่อเส้นทาง


1
+1 สำหรับ gitosis ... มันถูกสร้างขึ้นมาสำหรับการตั้งค่านี้
Jeremy Bouse

12

โดยทั่วไปคุณมีสองตัวเลือก

  1. ตามที่กล่าวไว้ข้างต้นเมื่อคุณสร้างผู้ใช้บนเซิร์ฟเวอร์ให้ตั้งค่าเชลล์เป็นgit-shell ( รายการหนังสือที่นี่ ) สิ่งนี้จะช่วยให้ผู้ใช้สามารถเข้าสู่ระบบผ่าน SSH แต่แทนที่จะใช้เชลล์แบบปกติที่มีคุณสมบัติครบถ้วน (เช่น sh, bash, ฯลฯ ) มันจะรัน git-shell ซึ่งให้การเข้าถึงการทำงานของ git เท่านั้น

  2. หรือคุณสามารถทำให้ที่เก็บของคุณพร้อมใช้งานผ่านโปรโตคอลอื่นเช่น TCP (ใช้git-deamon ) หรือ HTTP / HTTPS ฉันขอแนะนำเฉพาะสถานการณ์ดังกล่าวสำหรับการเข้าถึงแบบอ่านอย่างเดียวเท่านั้น

คุณพูดถึงว่าต้องการสนับสนุนฟังก์ชัน 'push' สำหรับผู้ใช้ของคุณดังนั้นคุณควรไปกับตัวเลือก # 1


5

คุณต้องเปลี่ยนเชลล์เป็น git-shell ซึ่งจะให้พวกเขาเข้าถึงฟังก์ชัน git เท่านั้น


ขอบคุณ topdog โดยทั่วไปผู้ใช้จะใช้เชลล์ git ของตัวเองบน Mac ของเขา ฉันไม่ต้องการให้เขาสามารถ ssh ไปยังเซิร์ฟเวอร์ได้ ดังนั้นถ้า git repo อยู่บน mydomain.com จาก testUser คอมพิวเตอร์ / Mac ในเทอร์มินัลเขาก็สามารถคอมไพล์ ssh: //myUser@mydomain.com/path/to/git เพื่อขอรหัสผ่านของเขาจากนั้นดาวน์โหลด repo ฉันเพิ่งลองตั้งค่าเปลือกของเขาเป็น git-shell มันจะแจ้งให้เมื่อโทรโคลน แต่รหัสผ่านจะถูกปฏิเสธ
Bach

คุณจำเป็นต้องตั้งค่า myUsers shell เป็น git-shell ถ้าสิ่งที่คุณต้องการให้พวกเขาทำบนเซิร์ฟเวอร์คือรันคำสั่ง git และไม่สามารถเชลล์ระบบได้สำหรับการแจ้งรหัสผ่านกรุณาใช้กุญแจ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ git บนเซิร์ฟเวอร์ดูที่หนังสือ git ฟรีprogit.org/book/ch4-0.html
topdog

ขอบคุณสำหรับการอ้างอิงหนังสือ! มีประโยชน์มาก ลงเอยด้วยการใช้ gitolite ยังคงมีปัญหากับการตั้งค่า
บัค

git-shell : "นี่คือเชลล์การเข้าสู่ระบบสำหรับบัญชี SSH เพื่อให้การเข้าถึง Git ที่ จำกัด มันอนุญาตให้เรียกใช้งานการทำงานของคำสั่ง Git ฝั่งเซิร์ฟเวอร์เท่านั้นที่ใช้ฟังก์ชันการดึง / ดันรวมทั้งคำสั่งที่กำหนดเองที่มีอยู่ในไดเรกทอรีย่อย ไดเรกทอรีบ้านของผู้ใช้ " บน Linux เพิ่ม "/ bin / git-shell" เป็น "/ etc / shells" จากนั้น "usermod --shell / bin / git-shell $ USER" Btw ตอนนี้หนังสือคอมไพล์อยู่ที่git-scm.com/book/en/ch4-0.html
David Tonhofer

0

อีกวิธีที่ทำได้คือ จำกัด การเข้าถึงของผู้ใช้ภายใน ssh

( http://prefetch.net/blog/index.php/2006/09/05/limiting-access-to-openssh-directives/ )

ตัวอย่างคือเพียงแค่ใช้ผู้ใช้เพียงคนเดียว แต่ถ้าผู้ใช้อยู่ในกลุ่มเดียวกันคุณสามารถกรองพวกเขาออกโดยใช้คำสั่งกลุ่ม สิ่งที่ต้องการ

AllowTcpForwarding yes
X11Forwarding yes

Match Group Users
         AllowTcpForwarding no
         X11Forwarding no
         $Here is a directive for git$
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.