Pengguna yang masuk di server Linux saya harus ssh ke mesin jarak jauh tertentu dengan akun default. Otentikasi pada mesin jarak jauh menggunakan kunci publik, jadi pada server kunci pribadi yang sesuai tersedia.
Saya tidak ingin pengguna server benar-benar dapat membaca kunci pribadi. Pada dasarnya, fakta bahwa mereka memiliki akses ke server memungkinkan mereka ssh benar, dan menghapusnya dari server juga harus melarang koneksi ke mesin jarak jauh.
Bagaimana saya bisa mengizinkan pengguna untuk membuka koneksi ssh tanpa memberi mereka akses baca ke kunci pribadi?
Pikiranku sejauh ini: jelas ssh executable harus dapat membaca kunci privat, sehingga harus dijalankan di bawah pengguna lain di server yang memiliki hak tersebut. Setelah koneksi ssh dibuat, saya kemudian dapat "meneruskan" ke pengguna sehingga ia dapat memasukkan perintah dan berinteraksi dengan mesin jarak jauh.
- Apakah ini pendekatan yang baik?
- Bagaimana saya harus menerapkan maju?
- Bagaimana pengguna dapat memulai koneksi (yaitu, eksekusi ssh oleh pengguna yang memiliki hak baca pada kunci)?
- Apakah ada celah keamanan? - jika pengguna dapat menjalankan ssh sebagai pengguna lain, dapatkah mereka melakukan semua yang dapat dilakukan pengguna lain (termasuk, membaca kunci pribadi)?
sumber
~/.ssh/authorized_keys
file?Jawaban:
Itulah salah satu alasan yang
sudo
ada. Cukup izinkan pengguna Anda untuk menjalankan 1 perintah tunggal dengan hanya opsi baris perintah pra-resmi dan pengelakan paling jelas diselesaikan. misalnyamengatur
sudo
agar semua anggota grupusers
dapat menjalankan perintah ssh sebagai pengguna some_uid tanpa memasukkan kata sandi mereka sendiri (atau akun some_uid) ketika mereka menjalankan:Hapus
NOPASSWD:
opsi untuk memaksa pengguna memasukkan kata sandi mereka sendiri sebelum masuk ke host jarak jauh.Mungkin mengatur alias atau skrip pembungkus sebagai kenyamanan bagi pengguna Anda karena
sudo
cukup pilih-pilih tentang menggunakan argumen yang benar.sumber
Ini sepertinya kasus penggunaan yang baik untuk otentikasi berbasis host. Ini adalah metode otentikasi di mana SSH tidak menggunakan kunci pengguna individu pada mesin lokal (dalam hal ini, server Anda) untuk mengotentikasi; sebaliknya, ia menggunakan kunci pribadi host , yang disimpan
/etc/ssh/
dan yang hanya dapat dibaca olehroot
.Untuk mengatur ini, Anda harus membuat file bernama
.shosts
pada mesin jarak jauh, di direktori home pengguna yang Anda ingin orang-orang untuk login (tidak di~/.ssh
). File tersebut harus memiliki kontendi mana
server-hostname
nama server Anda, dan+
merupakan tanda plus literal yang berfungsi sebagai wildcard yang berarti "pengguna mana pun".Anda juga harus memastikan bahwa mesin jarak jauh dapat memverifikasi kunci host server, yang berarti kunci host server harus terdaftar di salah satu
/etc/ssh/ssh_known_hosts
atau~/.ssh/known_hosts
di mesin jarak jauh. Jika ini belum terjadi, Anda dapat mengaturnya dengan masuk ke mesin jarak jauh dan menjalankannyaSetelah mengatur langkah-langkah ini, Anda dapat menghapus kunci pribadi di server sepenuhnya, jika Anda tidak memerlukannya untuk hal lain. (Dan jika Anda melakukannya, Anda selalu dapat mengaturnya agar hanya dapat dibaca oleh
root
atau sesuatu.)Anda juga dapat dengan mudah melakukan hal-hal seperti mengizinkan atau menolak akses pengguna tertentu ke mesin jarak jauh. Lihat halaman manual
ssh
danhosts.equiv
untuk detailnya.Satu masalah dengan pengaturan ini adalah bahwa pengguna yang masuk ke mesin jarak jauh dapat memodifikasi
.shosts
. Tidak ada yang dapat mereka lakukan yang memungkinkan mereka untuk masuk ke mesin jarak jauh sebagai pengguna yang berbeda, tetapi mereka dapat memotong akses mereka sendiri atau orang lain ke mesin jarak jauh. Jika ini masalah, Anda mungkin dapat membuat.shosts
hanya dapat ditulis olehroot
atau sesuatu - Saya tidak yakin apakah ini berhasil, tetapi Anda bisa mencobanya dan melihatnya. (Metode lain sepertisudo
yang rentan terhadap risiko yang sama, karena pengguna selalu dapat menghapus~/.ssh/authorized_keys
.)sumber
sudo
pilihan bisa lebih baik untuk lingkungan terkunci-down, meskipun ...