Apakah mungkin untuk mengambil kunci publik dari basis data alih-alih file yang diotorisasi?
Saya ingin menggunakan pengaturan seperti itu untuk mengelola akses ssh ke hal-hal seperti repositori git untuk banyak pengguna tanpa perlu membuat ulang file Authorized_key setiap kali kunci publik diubah atau ditambahkan.
database
ssh
public-key
Fionn
sumber
sumber
Jawaban:
Saya menemukan pertanyaan ini ketika mencoba menjawabnya sendiri. Setelah beberapa pencarian dan percobaan, saya menemukan beberapa opsi lain untuk ini. Saya akan melewatkan bagian tentang mendistribusikan kunci sebagai alternatif karena Matt Simmons membahasnya. Juga, saya tahu ada saat-saat itu tidak cukup baik. Sebagai contoh, jika Anda GitHub dan harus menyimpan jutaan kunci publik terhadap satu pengguna, terus memperbarui file SSH Authorized_keys dan menjaganya agar tetap disinkronkan di puluhan hingga ratusan kotak tepi yang tidak layak atau tidak diinginkan.
Begitu,
Pertama-tama, RedHat (dan varian) memiliki tambalan yang didukung untuk OpenSSH yang menambahkan opsi
AuthorizedKeysCommand
danAuthorizedKeysCommandRunAs
. Patch telah digabung hulu di openssh 6.2. Mengutip dari halaman manual :Dalam eksperimen saya malam ini, saya menemukan bahwa di luar kotak, ini tidak berfungsi karena kebijakan SELinux default. Anda dapat menyiasatinya dengan mematikan penegakan SELinux dengan
setenforce 0
. Karena memutar SELinux mungkin adalah ide yang buruk , Anda justru dapat menghasilkan kebijakan yang benar. Dalam kasus saya, itu sesederhana mencoba masuk denganAuthorizedKeysCommand
opsi yang diatur/etc/ssh/sshd_config
dan kemudian menggunakanaudit2allow -a -M local && semodule -i local.pp
. Ini pada dasarnya melihat melalui log audit dan menemukan hal-hal yang dicegah dan menghasilkan pengecualian untuk mereka. Jika Anda mungkin memiliki barang-barang lain di sana yang mungkin masuk daftar putih, Anda mungkin harus mempelajari lebih lanjutaudit2allow
untuk memastikan Anda mendapatkan kebijakan baru yang tepat.Ada berbagai tambalan lain (mungkin kurang teruji dan tepercaya) di luar sana untuk menambahkan fungsi serupa. Misalnya ada, openssh-script-auth . Anda juga dapat menemukan tambalan yang digunakan RedHat dan menerapkannya secara langsung. Pertarungan cepat Googling mengungkap https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patch dan https://launchpadlibrarian.net/10/103838151/openssh-authorized-keys-command.patch yang merupakan berdasarkan versi RH tetapi yang telah diperbarui untuk versi OpenSSH yang lebih baru.
Patch OpenSSH untuk melakukan pencarian kunci langsung dari beberapa toko (mis. Seperti GitHub dan CodeBaseHQ dan yang lainnya telah melakukannya). GitHub belum membuka patch ini, sepengetahuan saya, tapi saya tahu di masa lalu saya telah menemukan versi untuk pencarian kunci MySQL dan PostgreSQL. Saya mencoba untuk menemukan mereka lagi sekarang tetapi belum beruntung.
Ada juga beberapa opsi berbasis FUSE. Misalnya ada LPKFuse yang memungkinkan Anda menyajikan kunci publik dari LDAP dengan mengubah
AuthorizedKeysFile
lokasi menjadi satu di sistem file LPKFuse. LPKFuse FS membuat file virtual yang isinya didukung oleh bidang dari server direktori.Secara keseluruhan, saya pikir opsi # 1 sejauh ini adalah yang terbaik karena secara resmi didukung oleh RedHat. Selain itu, ini memungkinkan Anda untuk menempatkan logika apa pun yang Anda suka dalam skrip itu (termasuk berbicara ke database) dalam bahasa apa pun yang Anda inginkan.
sumber
OpenSSH tidak memiliki kemampuan ini, sejauh yang saya ketahui. Taruhan terbaik Anda mungkin memiliki skrip yang secara otomatis membuat ulang file setiap malam (atau sesering yang diperlukan).
Juga, Anda mungkin ingin melihat pertanyaan ini: Suatu sistem untuk mendistribusikan kunci publik SSH
sumber
Saya percaya bahwa dalam versi openssh yang lebih baru Anda dapat menyimpan kunci dalam entri LDAP pengguna. Jika Anda sudah menggunakan LDAP atau AD untuk manajemen akun, Anda juga harus dapat memanfaatkannya untuk manajemen kunci.
sumber