Gunakan biner pembungkus
Untuk kasus penggunaan khusus ini (lihat catatan penting di bawah), satu kemungkinan adalah membuat pengguna (katakanlah support-ssh) khusus untuk koneksi SSH keluar ini, kemudian instal biner pembungkus kecil yang dijalankan /usr/bin/ssh.
- Jangan menyalin + chmod
sshbiner itu sendiri, karena Anda tidak akan ingat untuk menyalinnya kembali setiap kali Anda menerapkan pembaruan keamanan.
- Dan jangan gunakan
rootsebagai pengguna yang lebih istimewa, karena alasan yang saya percayai sudah jelas.
Ini adalah alternatif yang setara secara fungsional untuk digunakan sudountuk meningkatkan hak istimewa dengan support-sshakun dengan trade-off berikut:
- Ini lebih kecil dan lebih ramping daripada
sudo, jadi ada sedikit risiko kesalahan konfigurasi yang membuka lebih dari yang Anda inginkan.
- Merupakan tanggung jawab Anda untuk mengkodekannya dengan benar - hanya lakukan ini jika Anda sangat berhati - hati dan (idealnya) memiliki pengalaman pengkodean yang sangat penting untuk keamanan.
- Itu dapat dirancang untuk menjadi lebih spesifik daripada
sudo(tetapi semakin banyak kode yang Anda tulis, semakin Anda perlu mengaudit untuk keamanan).
Biner pembungkus harus diatur HOMEke support-sshdirektori home pengguna, sehingga sshakan mengambil ssh_configkunci pribadi yang sesuai . Tetapi pengguna yang memohon sebaiknya tidak diizinkan membaca ~support-ssh/.ssh/atau kontennya.
Pembungkus bisa sesederhana:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv)
{
setenv("HOME", "/home/support-ssh", 1);
/* allow only a single, non-option argument */
if (argc!=2 || *argv[1]=='-') {
fprintf(stderr, "Usage: %s <hostname>", argv[0]);
exit(EXIT_FAILURE);
}
execv("/usr/bin/ssh", argv);
return EXIT_FAILURE;
}
Anda mungkin ingin menjadi lebih ketat, dan memeriksa apakah argumennya argv[1]adalah sekumpulan nama host yang diizinkan. Atau kurang membatasi, dan memungkinkan (sebagian) argumen opsi. Anda mungkin ingin sepenuhnya menggantikan variabel lingkungan (tapi tetap yang penting seperti TERM, LC_*, dll); perhatikan itu LD_LIBRARY_PATHdan LD_PRELOADsangat berbahaya.
Program pembungkus serupa dapat disediakan scpjika diperlukan.
Catatan tentang penerapan
Jawaban ini membahas keadaan khusus dari pertanyaan, di mana pengguna secara kontraktual diwajibkan untuk mengikuti prosedur, dan ada sanksi (misalnya pemecatan) karena melanggar mereka. Itu mengandaikan bahwa Anda ingin mencegah karyawan dengan mudah menyalin kunci privat di sekitar, daripada mencegah penyerang yang tekun mendapatkan akses yang tidak sah.
Saya mengambil pandangan bahwa keamanan dicapai melalui pertahanan teknis dan non-teknis, dan bahwa keseimbangan yang dicapai di sini atau dengan menggunakan sudosesuai untuk situasi yang disajikan.