Saya ingin membuat pengguna yang hanya dapat melakukan satu hal: melalui ssh tentukan skrip (dan argumen commandline ke skrip) yang berada di satu folder tertentu (untuk keperluan pertanyaan ini, sebut saja /local/remote_only_scripts/foo
) dan minta skrip dijalankan dan kembalikan hasilnya.
Untuk memperjelas beberapa contoh hal yang saya tidak ingin pengguna dapat lakukan:
- Masuk ke akun secara lokal. Aplikasi login adalah
/bin/login
. Ini bukan skrip di/local/remote_only_scripts/foo
folder, jadi tidak boleh dipanggil oleh pengguna. - Login ke akun dari jarak jauh. Sekali lagi masuk (apakah itu yang disebut dengan ssh?) Bukan skrip di folder yang relevan.
- Daftar isi direktori. ls adalah di
/bin/ls
. Ini bukan skrip di direktori yang sesuai. - Edit file di direktori itu. emacs, vi, gedit kebanyakan editor lain bukan skrip dalam directoy itu.
- Lihat konten file dalam direktori itu.
- Jalankan file dalam direktori itu yang tidak memiliki izin untuk dieksekusi.
Perhatikan bahwa ini adalah contoh ada banyak tindakan lain yang saya tidak ingin pengguna dapat melakukannya. Dalam mempertimbangkan tindakan, tanyakan "apakah ini dilakukan dengan skrip /local/remote_only_scripts/foo
?" jika jawabannya tidak, pengguna seharusnya tidak dapat melakukannya. Jika jawabannya adalah ya maka pengguna harus dapat melakukannya.
PS: Izinkan saya mengklarifikasi apa yang saya maksud dengan "menambahkan pengguna". Saya tidak bermaksud menambahkan pengguna ke beberapa subsistem ssh. Yang saya maksud adalah menambahkan pengguna ke sistem komputer. Jadi, misalnya, saya memiliki sistem yang menjalankan debian stable, sebut dengan alamatnya, www.hg.bar.com. Saya ingin menambahkan pengguna (melalui kuser, pengguna-admin atau useradd atau cara serupa lainnya) memanggilnya hg_guest. hg_guest tidak dapat masuk secara lokal atau melakukan hal-hal di daftar di atas. Yang bisa dilakukan hg_guest hanyalah menjalankan skrip "jarak jauh". Saya mengatakan dia harus dapat melakukannya melalui ssh, tetapi memikirkannya sekarang, mungkin mengizinkannya untuk menggunakan ssh memungkinkan dia untuk masuk secara lokal, sehingga beberapa mekanisme lain mungkin diperlukan.
sumber
command=
, opsino-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
diperlukan untuk benar-benar membatasi akun.Coba ini sebagai shell login untuk pengguna:
Anda mungkin juga ingin memiliki ini di
authorized_keys
file secara eksplisit seperti pada jawaban Coren; tapi ganti '... / foo; dengan programnya di sini. Yang akan mencegah perintah dari SSH sepertisftp
,scp
, danssh hostname command
.sumber
Jika mereka hanya perlu mengakses satu skrip, ini berfungsi dengan baik untuk saya. Tambahkan pengguna dan ubah shell default mereka ke jalur skrip. Ketika mereka terhubung melalui ssh, ia akan menjalankan skrip dan menutup sesi mereka.
server1:/ # useradd -s "/local/remote_only_scripts/foo/script.sh" hg_guest
server1:/ # grep hg_guest /etc/passwd
hg_guest: x: 2002: 100 :: / home / hg_guest: /local/remote_only_scripts/foo/script.sh
sumber