Di Ubuntu 11.10, saya menemukan bahwa saya dapat memblokir perintah ssh, dikirim dengan dan tanpa -T, dan memblokir penyalinan scp, sambil mengizinkan penerusan port untuk masuk.
Secara khusus saya memiliki redis-server di "somehost" yang terikat ke localhost: 6379 yang ingin saya bagikan secara aman melalui terowongan ssh ke host lain yang memiliki keyfile dan akan melakukan ssh dengan:
$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost
Ini akan menyebabkan redis-server, port "localhost" 6379 pada "somehost" muncul secara lokal di host yang menjalankan perintah ssh, dipetakan ulang ke port "localhost" 16379.
Di remote "somehost" Berikut ini yang saya gunakan untuk authorized_keys:
cat .ssh/authorized_keys (portions redacted)
no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here keyuser@keyhost
The no-pty trip up sebagian besar upaya ssh yang ingin membuka terminal.
Izin buka menjelaskan port apa yang diizinkan untuk diteruskan, dalam hal ini port 6379 port server redis yang ingin saya teruskan.
Perintah = "/ bin / echo do-not-send-commands" echoes back "do-not-send-commands" jika seseorang atau sesuatu berhasil mengirim perintah ke host melalui ssh -T atau sebaliknya.
Dari Ubuntu terbaru man sshd
, authorized_keys / perintah dijelaskan sebagai berikut:
command = "command" Menentukan bahwa perintah dijalankan setiap kali kunci ini digunakan untuk otentikasi. Perintah yang diberikan oleh pengguna (jika ada) akan diabaikan.
Upaya untuk menggunakan penyalinan file aman scp juga akan gagal dengan gema "do-not-send-commands" Saya telah menemukan sftp juga gagal dengan konfigurasi ini.
Saya pikir saran shell terbatas, dibuat dalam beberapa jawaban sebelumnya, juga merupakan ide yang bagus. Selain itu, saya setuju bahwa semua yang dirinci di sini dapat ditentukan dari membaca "man sshd" dan menelusuri "kunci_otorisasi" di dalamnya
no-pty
tidak memungkinkan untuk membuka tampilan interaktif, ia tidak melakukan apa pun untuk mencegah eksekusi perintah, sehingga pengguna dapat mengeditauthorized_keys
file jika dia memiliki akses dengan sesuatu sepertissh server 'sed -i -e s/no-pty// ~/.ssh/authorized_keys'
.~user/.ssh/authorized_keys
akan dimiliki olehuser
, danuser
akan mengelola kunci resmi yang digunakan untuk mengakses akun. SSH pilih-pilih tentang izin dan dapat memaksakan ekspektasi~/.ssh/
dan isinya. Saya melakukansudo chown root: .ssh/authorized_keys
dan tampaknya telah menghentikan saya untuk masuk, tetapi saya tahu dari pengalaman sebelumnya bahwa pengguna tidak harus memiliki file itu -root
dapat mengelolanya jika Anda mau.Anda mungkin ingin menyetel shell pengguna ke shell terbatas . Hapus variabel PATH di ~ / .bashrc atau ~ / .bash_profile pengguna, dan mereka tidak akan dapat menjalankan perintah apa pun. Nanti, jika Anda memutuskan ingin mengizinkan pengguna untuk mengeksekusi serangkaian perintah terbatas, seperti
less
atautail
misalnya, Anda dapat menyalin perintah yang diizinkan ke direktori terpisah (seperti/home/restricted-commands
) dan memperbarui PATH untuk diarahkan ke direktori itu.sumber
ssh use@host "/bin/bash"
, bukan?user@host
rbash sebagai cangkangnya. Lihat The Restricted Shell/bin/bash
gagal karena mengandung garis miring.less
mungkin ide yang buruk, karena dari sana Anda dapat melarikan diri ke shell yang tidak dibatasi!/bin/bash
. Lihat pen-testing.sans.org/blog/2012/06/06/… untuk contoh lainnya. Jadi mengizinkan perintah individu harus dilakukan dengan sangat, sangat hati-hati, jika ada.Selain opsi Authorized_keys seperti no-X11-forwarding, sebenarnya ada satu opsi yang Anda minta: permitopen = "host: port". Dengan menggunakan opsi ini, pengguna hanya dapat menyiapkan terowongan ke host dan port yang ditentukan.
Untuk detail tentang format file AUTHORIZED_KEYS, lihat man sshd.
sumber
no-pty
juga tidak membatasi akses shell, Anda masih akan mengakses shell, itu tidak akan menampilkan promptnya; Anda masih dapat memberikan perintah dan melihat hasilnya dengan baik. Anda memerlukancommand="..."
opsi ini jika ingin membatasi akses shell dari.ssh/authorized_keys
.Solusi saya adalah menyediakan pengguna yang hanya mungkin melakukan tunneling, tanpa shell interaktif , untuk mengatur shell itu di / etc / passwd ke / usr / bin / tunnel_shell .
Cukup buat file yang dapat dieksekusi / usr / bin / tunnel_shell dengan loop tak terbatas .
Sepenuhnya dijelaskan di sini: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/
sumber
tunnel_shell
, Anda akan melakukannyashell -> /bin/bash tunnel_shell
sehingga Anda dapat melarikan diri kembali ke shell, tetapi jika Anda telah menetapkantunnel_shell
sebagai shell pengguna, Anda hanya akan/bin/bash tunnel_shell
berjalan, tanpa shell untuk melarikan diri. , sejauh yang saya bisa lihat. Saya mengujinya dan tidak bisa lepas dengan ctrl-z. Jika Anda melakukan mencobanya dan bisa melarikan diri, bisa Anda posting setup? Demikian juga, jika Anda mengetahui dokumentasi yang mengatakan bahwa seharusnya berfungsi seperti itu, dapatkah Anda mempostingnya?Anda ingin baris di file authorized_keys Anda yang terlihat seperti ini.
sumber
Jika Anda ingin mengizinkan akses hanya untuk perintah tertentu - seperti svn - Anda juga dapat menentukan perintah itu di file kunci resmi:
Dari http://svn.apache.org/repos/asf/subversion/trunk/notes/ssh-tricks
sumber
Di sini Anda memiliki posting bagus yang menurut saya berguna: http://www.ab-weblog.com/en/creating-a-restricted-ssh-user-for-ssh-tunneling-only/
Idenya adalah: (dengan nama pengguna baru yang dibatasi sebagai "sshtunnel")
Perhatikan bahwa kami menggunakan rbash (dibatasi-bash) untuk membatasi apa yang dapat dilakukan pengguna: pengguna tidak dapat melakukan cd (mengubah direktori) dan tidak dapat mengatur variabel lingkungan apa pun.
Kemudian kami mengedit variabel env PATH pengguna
/home/sshtunnel/.profile
menjadi tidak ada - trik yang akan membuat bash tidak menemukan perintah apa pun untuk dieksekusi:Akhirnya kami melarang pengguna untuk mengedit file apa pun dengan mengatur izin berikut:
sumber
Saya membuat program C yang terlihat seperti ini:
Saya mengatur shell pengguna terbatas ke program ini.
Saya tidak berpikir pengguna yang dibatasi dapat mengeksekusi apa pun, bahkan jika mereka melakukannya
ssh server command
, karena perintah dijalankan menggunakan shell, dan shell ini tidak mengeksekusi apa pun.sumber
Lihat posting ini tentang mengautentikasi kunci publik .
Dua hal utama yang perlu Anda ingat adalah:
chmod 700 ~/.ssh
sumber
Anda akan membuat kunci pada mesin pengguna melalui klien ssh apa pun yang mereka gunakan. PUTTY misalnya memiliki utilitas untuk melakukan hal yang persis seperti ini. Ini akan menghasilkan kunci pribadi dan publik.
Isi dari file kunci publik yang dihasilkan akan ditempatkan di file authorized_keys.
Selanjutnya Anda perlu memastikan bahwa klien ssh dikonfigurasi untuk menggunakan kunci pribadi yang menghasilkan kunci publik. Ini cukup lurus ke depan, tetapi sedikit berbeda tergantung pada klien yang digunakan.
sumber