SSH tidak mengizinkan penggunaan kunci dengan izin grup yang dapat dibaca

9

Saya memiliki server git pengembangan yang menyebarkan ke server hidup ketika livecabang didorong ke. Setiap pengguna memiliki login sendiri dan oleh karena itu post-receivehook yang melakukan penyebaran langsung dijalankan di bawah pengguna mereka sendiri.

Karena saya tidak mau harus mempertahankan kunci publik pengguna sebagai kunci resmi pada server live jarak jauh, saya telah membuat satu set kunci yang termasuk dalam sistem git untuk ditambahkan ke server live jarak jauh (Dalam post-receivekait saya menggunakan $GIT_SSHuntuk mengatur kunci pribadi dengan -iopsi).


Masalah saya adalah karena semua pengguna mungkin ingin menyebarkan untuk hidup, kunci pribadi sistem git harus setidaknya dapat dibaca oleh grup dan SSH benar-benar tidak menyukai ini.

Berikut contoh kesalahan:

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

Saya telah melihat sekitar berharap untuk menemukan sesuatu dengan cara memaksa ssh untuk hanya melalui koneksi tetapi saya tidak menemukan apa pun kecuali orang-orang yang secara membabi buta mengatakan bahwa Anda seharusnya tidak membiarkan akses ke apa pun kecuali satu pengguna.

Jessie Ross
sumber

Jawaban:

5

Inilah cara sederhana dan aman yang bagus.

Buat pengguna baru untuk transfer ssh, saya akan menyebutnya git-sync. Buat pengguna serupa di server dengan keanggotaan grup untuk repositori git. Tambahkan kunci publik untuk pengguna sinkronisasi ke file yang diotorisasi pengguna tersebut2. Saya berasumsi bahwa pengguna git semuanya adalah anggota gitgroup. Pastikan pengguna git-sync juga anggota grup ini.

Sekarang edit file / etc / sudoers Anda untuk memasukkan baris seperti:

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

Ini akan memungkinkan anggota grup gitgroup untuk menjalankan perintah / usr / bin / bit sebagai git-sync tanpa kata sandi.

Sekarang masukkan sesuatu seperti ini di kail pasca-terima Anda:

sudo -u git-sync /usr/bin/git push origin
Kent Hulick
sumber
Ini lebih baik daripada yang saya cari, terima kasih!
Jessie Ross
11

Anda BISA menggunakan file identitas yang dapat dibaca grup, KECUALI Anda pemilik kuncinya. Jadi, cukup atur file identitas yang akan dimiliki oleh, misalnya, pengguna root dan kemudian semua pengguna repositori git Anda diatur untuk pergi.

Manfaat yang bagus untuk ini adalah Anda tidak perlu sudo - solusinya akan lebih sederhana.

Perhatikan bahwa ini akan mengalami masalah asli lagi jika Anda menggunakan root untuk mendorong repo git Anda.

Linus Swälas
sumber
2
Ini luar biasa, dan jauh lebih baik daripada jawaban "jangan lakukan itu". Terima kasih!
Ian McGowan
2
Permissions 0640 for 'id_rsa' are too open.

Kunci pribadi harus tetap pribadi. Anda seharusnya tidak membiarkan siapa pun membacanya.

Karena saya tidak mau harus mempertahankan kunci publik pengguna sebagai kunci resmi pada server live jarak jauh, saya telah membuat satu set kunci yang termasuk dalam sistem git untuk ditambahkan ke server live jarak jauh (Dalam post-receivekait saya menggunakan $GIT_SSHuntuk mengatur kunci pribadi dengan -iopsi).

  1. atur pasangan kunci ke ssh dari dev ke server produksi
  2. di post-receiveskrip kait, coba sesuatu seperti ini:

    if [ "live" == "$branch" ]; then
        ssh -t user@prod "git --work-tree=... --git-dir=... checkout -f"
    fi
    
kuanta
sumber
Bagaimana saya bisa "mengatur pasangan kunci ke ssh dari dev ke server produksi", ini adalah masalah yang saya alami. Saya sudah memiliki 2 di tempat.
Jessie Ross
1
Tentang dev: ssh-keygen, ssh-copy-id user@prod. Pada prod: chmod 700 ~/.ssh, chmod 600 ~/.ssh/authorized_keys.
quanta
1
Masalahnya adalah ada banyak pengguna, oleh karena itu saya harus mengulanginya untuk setiap pengguna yang ingin mengedit waktu oleh setiap proyek yang ada di server.
Jessie Ross
Tidak. Anda hanya perlu mengatur dua pengguna lagi: satu untuk ssh dari dev ke prod, dan yang lain untuk menjalankan git checkout...(pada prod).
quanta
The post-receivehook (mesin dev) dijalankan oleh pengguna yang mendorong perubahan (karena itu di bawah izin pengguna) sehingga mereka semua akan memiliki kunci yang berbeda, saya tidak bisa membantu yang pengguna akan. Ada dua post-receivekait di dua server yang berbeda beraksi.
Jessie Ross