Di sisi server, Anda dapat membatasi ini dengan menyetel shell pengguna mereka ke /bin/true
. Ini akan memungkinkan mereka untuk mengotentikasi, tetapi tidak benar-benar menjalankan apa pun karena mereka tidak mendapatkan shell untuk menjalankannya. Ini berarti mereka akan terbatas pada subset apa pun yang dapat ditawarkan SSH kepada mereka. Jika menawarkan penerusan porta, mereka masih dapat melakukannya.
Di sisi klien, Anda mungkin ingin terhubung dengan -N
. Ini menghentikan klien dari MEMINTA perintah jarak jauh seperti shell, itu hanya berhenti setelah bagian otentikasi selesai. Terima kasih kepada pemberi komentar karena telah menunjukkan hal ini.
Berikut ini memiliki keuntungan bahwa penerusan soket agen X11 dan SSH juga tidak diizinkan, yang mungkin masih diizinkan dengan cara Caleb. Keuntungan lainnya adalah, jika pengguna dapat mengubah shell default-nya melalui cara lain, ini masih akan membatasi akses SSH-nya hanya ke penerusan TCP.
Masukkan kode berikut ke dalam /etc/ssh/sshd_config
Anda :
Match User that-restricted-guy
AllowTcpForwarding yes
X11Forwarding no
AllowAgentForwarding no
ForceCommand /bin/false
untuk mengizinkan pengguna that-restricted-guy
untuk meneruskan koneksi TCP apa pun melalui mesin Anda yang mendukung SSH (koneksi ke mesin ini, juga ke localhost
dan bahkan koneksi dari mesin ini ke mesin lain).
Jika Anda menginginkannya lebih ketat (yang merupakan ide bagus), Anda juga dapat melakukan hal berikut:
Match User even-more-restricted-guy
PermitOpen 127.0.0.1:12345
X11Forwarding no
AllowAgentForwarding no
ForceCommand /bin/false
Ini akan memungkinkan pengguna even-more-restricted-guy
untuk hanya meneruskan koneksi ke 127.0.0.1 TCP port 12345 (seperti yang terlihat melalui mesin Anda yang mengaktifkan SSH).
Ketika pengguna biasanya terhubung dia sekarang akan langsung terputus karena /bin/false
perintah akan dipicu yang tidak melakukan apa-apa selain langsung keluar dengan kode 1. Jika Anda ingin menghindari ini dan tetap membuka koneksi penerusan, tambahkan -N
tandai ke ssh
memerintah. Ini tidak akan mencoba menjalankan perintah apa pun tetapi masih memungkinkan untuk mengatur penerusan TCP.
Contoh perintah teruskan yang seharusnya berfungsi di penyiapan terakhir:
ssh -L 12345:127.0.0.1:12345 -N [email protected]
Anda dapat mengontrol apa yang dapat dilakukan orang di ssh dengan mencocokkan grup dengan asumsi versi ssh Anda cukup baru untuk mendukungnya (openssh 5.x+).
Pada dasarnya, kami memperlakukan mereka seolah-olah mereka adalah pengguna sftp, tetapi mengizinkan penerusan tcp dan opsional menentukan tujuan yang dapat mereka teruskan. Jika Anda memberi mereka direktori home tetapi tidak membuat direktori apa pun di bawahnya, mereka tidak dapat mentransfer file apa pun karena mereka tidak memiliki izin untuk melakukannya.
Match Group nicepeople
PubkeyAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
GatewayPorts no
ChrootDirectory /opt/dummy_location/%u
ForceCommand internal-sftp
AllowTcpForwarding yes
PermitOpen 192.168.0.8:22
PermitOpen 192.168.0.5:8080
# Or leave out the PermitOpen to allow forwarding to anywhere.
HostbasedAuthentication no
RhostsRSAAuthentication no
AllowAgentForwarding no
Banner none
Anda dapat mengulangi Grup Pencocokan ini blokir untuk setiap grup yang ingin Anda berikan perilaku atau batasan berbeda.
Anda dapat mengontrol lebih jauh ke mana orang ini dapat masuk ke jaringan menggunakan iptables
/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -j REJECT
/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -m tcp -p tcp -d 192.168.0.0/24 -j ACCEPT
Ini mengasumsikan GID grup "orang baik" adalah 500.
Beberapa opsi ssh di atas tersedia di versi openssh yang lebih lama, tetapi tidak dalam bagian Match Group. Grup Pencocokan sangat terbatas di OpenSSH 4.x dan sebelumnya.