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
ssh
biner itu sendiri, karena Anda tidak akan ingat untuk menyalinnya kembali setiap kali Anda menerapkan pembaruan keamanan.
- Dan jangan gunakan
root
sebagai pengguna yang lebih istimewa, karena alasan yang saya percayai sudah jelas.
Ini adalah alternatif yang setara secara fungsional untuk digunakan sudo
untuk meningkatkan hak istimewa dengan support-ssh
akun 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 HOME
ke support-ssh
direktori home pengguna, sehingga ssh
akan mengambil ssh_config
kunci 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_PATH
dan LD_PRELOAD
sangat berbahaya.
Program pembungkus serupa dapat disediakan scp
jika 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 sudo
sesuai untuk situasi yang disajikan.