Aman membatasi akses ke repositori Debian pribadi

9

Saya sedang mencari metode untuk membatasi akses ke repositori Debian pribadi dan dapat mengautentikasi non-interaktif (yaitu menggunakan skrip)

Artikel paling berguna yang saya temukan sebenarnya dari situs administrasi Debian tetapi metode aman menggunakan ssh dan kunci publik / pribadi. Ini berfungsi dengan baik tetapi kunci publik setiap host harus berada di dalam file otor_keys jarak jauh untuk berhasil mengotentikasi. Itu tidak mengatakan apa-apa tentang memberikan kata sandi ke ssh: // tapi saya kira itu harus dimungkinkan.

Sudahkah Anda mencoba alternatif lain (misalnya ftps)?

Terima kasih sebelumnya

Humber
sumber
Masalah yang saya miliki dengan artikel di atas adalah bahwa ia tidak hanya memberikan akses repositori APT - itu memberikan akses shell ke mesin repositori APT saya. Itu risiko yang tidak bisa diterima.
BobDoolittle

Jawaban:

5

Jika Anda selalu berjalan apt-getdi server Anda dengan tangan (tidak ada apt-getperintah otomatis yang diluncurkan oleh crons), maka Anda dapat mempertimbangkan untuk menggunakan penerusan ssh agent . Ini menghindari keharusan mengelola satu kunci publik / privat per server yang Anda kelola, dan mungkin lebih aman daripada meninggalkan kunci pribadi di setiap server.

Konfigurasi awal - sambungkan ke server yang ingin Anda kelola, dan tambahkan sesuatu seperti ini /etc/apt/sources.list(contoh ini mengasumsikan Anda ingin server Anda terhubung ke managerakun):

    deb ssh://[email protected]/path other stuff
  • buat sepasang kunci privat / publik di komputer Anda sendiri, dengan login Anda johndoemisalnya (asalkan komputer Anda berjalan di debian: jika tidak, Anda dapat melakukan ini dari server debian yang didedikasikan untuk manajemen):

    ssh-keygen
    
  • pastikan dilindungi oleh frasa unik
  • salin kunci publik Anda ke server repositori di /home/manager/.ssh/authorized_keys:

    ssh-copy-id [email protected]
    

Sekali per sesi manajemen

  • mulai agen ssh di mesin Anda dengan mengetik:

    eval `ssh-agent`
    
  • tambahkan kunci Anda ke agen (ini akan memerlukan kata sandi Anda):

    ssh-add
    

Mengelola server

  • terhubung ke server yang ingin Anda kelola menggunakan ssh -A( -Amengaktifkan penerusan agen):

    ssh -A some.server.org
    
  • beralih ke root (jika Anda ingin menggunakan, sudoAnda perlu mengonfigurasi /etc/sudoersatau jika tidak sudoakan merusak penerusan agen, baca ini ):

    su
    
  • Anda sekarang harus dapat terhubung ke akun manajer repositori menggunakan ssh tanpa mengetikkan kata sandi Anda lagi, berkat penerusan agen. Karena itu, apt-getharus berfungsi dengan baik:

    apt-get udate
    

Mengakhiri sesi manajemen Anda

  • Setelah Anda selesai mengelola server Anda, hapus kunci Anda dari agen:

    ssh-add -D
    

Keuntungan

  • Tidak diperlukan konfigurasi awal
  • Hanya diperlukan satu kunci pribadi
  • Kunci pribadi dilindungi oleh frasa sandi yang kuat
  • Jika seseorang mendapatkan akses root ke salah satu server Anda, mereka tidak akan memiliki akses langsung ke server repositori Anda.
    • Perhatikan bahwa jika peretas bersabar dan memenuhi syarat, ia dapat menunggu hingga Anda terhubung ke server menggunakan penerusan agen, dan ia dapat membajak mekanisme penerusan untuk mendapatkan akses ke server repositori Anda.
    • Untuk mencegahnya, Anda dapat menggunakan ssh-askuntuk menerima / menolak setiap upaya untuk menggunakan kunci Anda.
    • Bagaimanapun, peretas tidak akan mendapatkan akses ke kunci pribadi itu sendiri: ia hanya akan dapat membajak mekanisme penerusan untuk menggunakan kunci, dan hanya selama waktu Anda terhubung ke server.
MiniQuark
sumber
Terima kasih lagi MiniQuark. Sebenarnya, pembaruan tidak dijaga, tetapi ini adalah metode hebat yang bisa saya terapkan untuk tujuan pengujian.
Humber
Dengan senang hati! :) Senang jika itu membantu.
MiniQuark
4

Salah satu cara untuk melakukan ini adalah dengan hanya membiarkan satu set IP tertentu untuk mengakses repositori. Ini bekerja sangat baik untuk LAN dan VPN.

Sederhana dan efisien.

Antoine Benkemoun
sumber
1
Terima kasih Antoine :). Sebenarnya, repositori yang saya miliki sekarang dapat diakses menggunakan metode itu (http melalui koneksi OpenVPN). Saya membatasi IP milik VPN. Kekurangannya di sini adalah bahwa setiap host perlu terhubung ke VPN untuk mengakses repo, dengan sedikit mengganggu (mengelola beberapa sertifikat / kunci). Maaf karena tidak menyebutkannya dalam pertanyaan.
Humber
Benar, itu merepotkan untuk mengelola OpenVPN tetapi itu membuat mengelola keamanan ke repositori Anda sangat sederhana. Selain itu, pengguna tidak perlu repot dengan kredensial sekali di dalam VPN.
Antoine Benkemoun
2

Solusi ssh + kunci publik / pribadi tidak terlalu buruk:

  • login sebagai root di mesin klien
  • ketik ssh-keygen, lalussh-copy-id [email protected]
  • edit /etc/apt/sources.listdan tambahkan sesuatu seperti:

    deb ssh://[email protected]/path other stuff
    

Memang, ini mengharuskan Anda untuk meletakkan kunci publik setiap server dalam ~/.ssh/authorized_keysfile di server, tetapi itu tidak rumit (lihat di atas) dan itu memberi Anda kontrol atas server yang Anda izinkan atau tidak pada waktu tertentu (Anda dapat menghapus kunci di kapan saja masuk authorized_keys).

MiniQuark
sumber
Terima kasih MiniQuark. Ya, solusi ini tidak terlalu buruk, tetapi ssh-copy-id tidak berfungsi jika otentikasi kata sandi dinonaktifkan di server openssh. Saya berpikir untuk menyebarkan file kunci yang sama pada setiap klien menggunakan repositori untuk dapat menggunakannya. Untuk keamanan lebih lanjut, pengguna dengan izin minimal akan digunakan. Ini hampir sama dengan berbagi kredensial. Saat ini saya sedang menguji metode ini untuk memeriksa bagaimana berperilaku / bekerja.
Humber
1

Anda dapat mengatur akses https ke repositori Anda, dijamin dengan login / kata sandi (otentikasi dasar). Masalahnya adalah Anda harus memasukkan login / kata sandi cleartext /etc/apt/sources.list(catatan: ada tambalan untuk mengizinkan login / kata sandi dimasukkan /root/.netrcsebagai gantinya).

MiniQuark
sumber
Ini mungkin solusi terbaik, juga bukan netrc tetapi /etc/apt/auth.conf. Documents di sini: manpages.debian.org/testing/apt/apt_auth.conf.5.en.html
Nicholi
0

Tautan dalam pertanyaan Anda menunjukkan beberapa metode. Anda ingin nomor 2, https + otentikasi dasar.

Justin
sumber
Terima kasih Justin. Saya pikir https transport dengan apt hanya berfungsi jika apt-transport-https diinstal. Ini merupakan alternatif yang menarik. Satu-satunya kelemahan adalah kredensial di sources.list
Humber
chmod 600 /etc/apt/sources.list
Justin