Buat pengguna SSH dengan hak istimewa terbatas untuk hanya menggunakan repositori Git

12

Saya memiliki repositori git yang di-host di server SunOS saya, yang saya gunakan dari jarak jauh melalui ssh

git clone ssh://[email protected]/path/to/git

Sekarang saya perlu menambahkan lebih banyak pengguna untuk dapat mengakses repositori itu, tetapi tidak yakin bagaimana caranya.

Saya telah menambahkan satu testUser ke ssh, tapi sepertinya saya tidak bisa membatasi hak pengguna untuk hanya menggunakan git.

testUser dapat melakukan ssh dan menelusuri seluruh server.

Bagaimana saya bisa membuat pengguna yang hanya dapat mengakses git dari jarak jauh, untuk mengkloning / menarik / mendorong dll ...

Terima kasih

Bach
sumber

Jawaban:

12

Anda dapat mempertimbangkan menggunakan gitolite di bawah satu pengguna daripada mengatur beberapa pengguna git-shell (dan izin grup dan grup yang diperlukan sehingga mereka dapat berbagi akses ke repositori).

gitolite berjalan di bawah satu pengguna biasa di server dan menggunakan kunci publik SSH untuk membedakan akses ke repositori Git (lihat “ bagaimana gitolite menggunakan ssh ” untuk beberapa detail bagaimana gitolite melakukan identifikasi berbasis SSH-nya). gitolite menawarkan per-repositori, per-cabang, dan bahkan beberapa kontrol akses per-path.

Chris Johnsen
sumber
1
+1 untuk gitosis ... Itu dibuat persis untuk pengaturan ini.
Jeremy Bouse
12

Anda pada dasarnya memiliki dua opsi.

  1. Seperti yang disebutkan oleh topdog, saat Anda membuat pengguna di server, atur shell mereka ke git-shell ( entri buku di sini ). Ini akan memungkinkan pengguna untuk masuk melalui SSH, tetapi alih-alih menjalankan shell normal, fitur lengkap (misalnya sh, bash, dll.) Ia akan berjalan, git-shell, yang hanya menyediakan akses ke fungsionalitas git.

  2. Atau, Anda dapat membuat repositori Anda tersedia melalui protokol lain, seperti TCP (menggunakan git-deamon ) atau HTTP / HTTPS. Saya hanya merekomendasikan skenario seperti itu untuk akses hanya baca.

Anda menyebutkan ingin mendukung fungsionalitas 'push' untuk pengguna Anda, jadi Anda harus benar-benar menggunakan opsi # 1.

chuckx
sumber
5

Anda perlu mengganti shell mereka menjadi git-shell, yang hanya akan memberi mereka akses ke fungsi git saja.

topdog
sumber
Terima kasih topdog. Pada dasarnya pengguna akan menggunakan git shell-nya sendiri di Mac-nya. Saya tidak benar-benar ingin dia dapat ssh ke server. Jadi jika git repo ada di mydomain.com dari testUser computer / Mac, di terminal dia bisa saja git clone ssh: //[email protected]/path/to/git diminta kata sandinya, lalu unduh repo. Saya baru saja mencoba mengatur cangkangnya ke git-shell. Itu meminta saat memanggil klon tetapi kata sandi ditolak.
Bach
Anda perlu mengatur shell myUsers ke git-shell jika semua yang Anda ingin mereka lakukan di server adalah menjalankan perintah git dan tidak dapat masuk. Untuk kata sandi, mohon gunakan kunci. Untuk cakupan git yang lebih terperinci pada server, lihatlah buku git gratis progit.org/book/ch4-0.html
topdog
terima kasih untuk referensi buku! sangat membantu. Akhirnya menggunakan gitolite, masih memiliki masalah dengan pengaturannya.
Bach
git-shell : "Ini adalah shell login untuk akun SSH untuk menyediakan akses Git terbatas. Ini hanya memungkinkan eksekusi perintah Git sisi-server yang mengimplementasikan fungsionalitas pull / push, ditambah perintah kustom yang ada di subdirektori bernama git-shell-commands di direktori home pengguna. " Di Linux, tambahkan "/ bin / git-shell" ke "/ etc / shells" dan kemudian "usermod --shell / bin / git-shell $ USER". Btw, buku git sekarang ada di git-scm.com/book/en/ch4-0.html
David Tonhofer
0

Cara lain untuk melakukannya adalah dengan membatasi akses pengguna dalam ssh.

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

Contohnya hanya dengan menggunakan hanya satu pengguna, tetapi jika pengguna berada di grup yang sama Anda dapat memfilternya dengan menggunakan arahan grup. Sesuatu seperti

AllowTcpForwarding yes
X11Forwarding yes

Match Group Users
         AllowTcpForwarding no
         X11Forwarding no
         $Here is a directive for git$
Nikolaidis Fotis
sumber