Bagaimana membatasi pengguna SSH hanya mengizinkan tunneling SSH?

31

Bagaimana saya bisa membatasi pengguna di server SSH untuk mengizinkan mereka hanya hak istimewa untuk SSH TUNNELING ? yaitu Jadi mereka tidak dapat menjalankan perintah bahkan jika mereka masuk melalui SSH.

Server Linux saya adalah Ubuntu 11.04 dan OpenWrt.

LanceBaynes
sumber

Jawaban:

35

Di sisi server, Anda dapat membatasi ini dengan mengatur shell pengguna mereka /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 apa pun yang dapat ditawarkan oleh SSH. Jika ia menawarkan penerusan porta, mereka masih bisa melakukan itu.

Di sisi klien, Anda mungkin ingin terhubung dengan -N. Ini menghentikan klien dari MEMINTA untuk perintah jarak jauh seperti shell, itu hanya berhenti setelah bagian otentikasi selesai. Terima kasih kepada komentator untuk menunjukkan ini.

Caleb
sumber
Saya akan mencoba yang ini: P thx!
LanceBaynes
2
Untuk menambah jawaban Caleb, Anda mungkin juga harus memberi tahu klien untuk tidak mengeksekusi shell. Dengan baris perintah openssh, ini dilakukan dengan flag -N. Ada opsi serupa di Putty, tapi saya tidak ingat nama persisnya.
Bill B
hmm, itu pada dasarnya keamanan sisi klien, bukan? Saya mencari pengaturan keamanan sisi server, tapi terima kasih!
LanceBaynes
2
Maaf, saya tidak jelas - maksud saya dikombinasikan dengan pengaturan server. Sudah pengalaman saya di masa lalu bahwa jika Anda mengatur shell ke sesuatu yang bukan shell, Anda tidak dapat terhubung sama sekali karena mencoba membuka shell tetapi tidak bisa. Jadi keamanan ditegakkan di sisi server (menggunakan metode Caleb) tetapi jika Anda memiliki masalah menghubungkan setelah itu, Anda mungkin perlu mengatur saklar sisi klien.
Bill B
3
Anda membuat pengguna dengan useradd sshtunnel -m -d /home/sshtunnel -s /bin/true.
fracz
14

Berikut ini memiliki keuntungan bahwa penerusan soket agen X11 dan SSH juga tidak diizinkan, yang mungkin masih diizinkan dengan cara Calebs. Keuntungan lain adalah, bahwa jika pengguna dapat mengubah shell default-nya melalui cara lain, ini masih akan membatasi akses SSH-nya hanya untuk penerusan TCP.

Masukkan yang berikut ke dalam Anda /etc/ssh/sshd_config:

Match User that-restricted-guy
  AllowTcpForwarding yes
  X11Forwarding no
  AllowAgentForwarding no
  ForceCommand /bin/false

untuk memungkinkan pengguna that-restricted-guymeneruskan koneksi TCP melalui mesin berkemampuan SSH Anda (koneksi ke mesin ini, juga ke localhostdan 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-guyuntuk hanya meneruskan koneksi ke 127.0.0.1 TCP port 12345 (seperti yang terlihat melalui mesin berkemampuan SSH Anda).

Ketika pengguna biasanya menghubungkan dia sekarang akan langsung terputus karena /bin/falseperintah akan dipicu yang tidak melakukan apa-apa selain langsung keluar dengan kode 1. Jika Anda ingin menghindari ini dan menjaga koneksi forwarding Anda tetap terbuka, tambahkan -Nbendera ke sshperintah. Ini tidak akan mencoba menjalankan perintah apa pun tetapi masih memungkinkan untuk mengatur penerusan TCP.

Contoh perintah penerusan yang harus bekerja di pengaturan yang terakhir:

ssh -L 12345:127.0.0.1:12345 -N even-more-restricted-guy@insert-your-machine
aef
sumber
1
Saya mengulangi jawaban itu sebagai solusi yang lebih baik daripada jawaban Caleb.
aef
Yakin. Saya membersihkan juga. Bagus melihat kesalahpahaman terpecahkan. Selamat malam.
Jakuje
1

Anda dapat mengontrol apa yang dapat dilakukan orang dalam ssh dengan mencocokkan grup dengan menganggap versi ssh Anda cukup baru untuk mendukungnya (openssh 5.x +).

Pada dasarnya, kami memperlakukan mereka seolah-olah mereka adalah pengguna sftp, tetapi memungkinkan penerusan tcp dan secara opsional menentukan tujuan yang mungkin mereka teruskan. Jika Anda memberi mereka direktori home tetapi tidak membuat direktori di bawahnya, mereka tidak dapat mentransfer file apa pun karena mereka tidak akan 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 blok Kelompok Pencocokan ini untuk setiap grup yang ingin Anda berikan perilaku atau batasan berbeda.

Anda selanjutnya dapat mengontrol di mana orang ini dapat pergi di 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 "nicepeople" adalah 500.

Beberapa opsi ssh di atas tersedia di versi openssh yang lebih lama, tetapi tidak di dalam bagian Match Group. Match Group sangat terbatas pada OpenSSH 4.x dan sebelumnya.

Harun
sumber