OpenSSH sesuatu seperti 'internal-sftp' tetapi untuk SCP?


16

Saya menjalankan stabil Debian dan saya ingin membangun lingkungan berikut untuk pengguna di grup 'sftponly' saya:

  • dipenjara
  • dapat mentransfer dengan SFTP
  • dapat mentransfer dengan SCP
  • tidak dapat masuk secara interaktif dengan SSH

Dari eksperimen dan penelitian saya, tampaknya bait berikut di sshd_config membuat saya 90% di sana:

Match group sftponly
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Ini memberi saya SFTP yang dipenjara dan tidak ada SSH, yang bagus. Tetapi juga menonaktifkan SCP, yang kurang ideal karena beberapa klien adalah warisan, proses scripted yang menggunakan SCP daripada SFTP (server yang kami ganti mendukung kedua protokol), dan karena klien tersebut tidak di bawah kendali kami dan mudah dimodifikasi, sepertinya tidak praktis untuk menonaktifkan SCP sama sekali.

Masuk akal bahwa konfigurasi ini akan menonaktifkan SCP, karena koneksi SCP yang masuk menyebabkan sshd memunculkan proses `scp 'melalui shell login pengguna, sebagai pengguna itu. Tampaknya hal yang sama biasanya berlaku untuk SFTP, kalau bukan untuk handler 'internal-sftp' khusus.

Jadi, saya kira pertanyaan saya adalah: apakah ada cara untuk mencapai efek yang sama dengan 'internal-sftp' tetapi untuk SCP, tanpa menggunakan alat pihak ketiga seperti scponly dan rssh? Hal yang benar-benar menyenangkan tentang 'internal-sftp' adalah tidak perlu membuat penjara dengan file dukungan, atau berurusan dengan binari setuid pihak ketiga yang berpotensi dapat dieksploitasi (rssh, khususnya, memiliki sejarah exploit).


1
Apakah klien terhubung menggunakan file kunci ssh, atau mereka menggunakan kata sandi? Jika itu adalah keyfile, dimungkinkan untuk membatasi apa yang bisa mereka lakukan.
Jenny D

Mereka terhubung dengan kata sandi.
brianjcohen

Jawaban:


3

Lihatlah rssh yang merupakan shell alternatif yang memungkinkan akses terbatas ke suatu sistem.

rssh adalah shell yang dibatasi untuk menyediakan akses terbatas ke host melalui ssh (1), yang memungkinkan pengguna yang shellnya dikonfigurasi untuk rssh untuk menggunakan satu atau lebih dari perintah scp (1), sftp (1) cvs (1) ), rdist (1), dan rsync (1), dan hanya perintah itu.

Anda dapat mengkonfigurasi perintah mana yang dapat digunakan pada basis per pengguna atau sistem menggunakan file rssh.conf

Atau Anda dapat menggunakan scponly untuk melakukan apa yang Anda inginkan. Ini bertindak sebagai pembungkus ke ssh suite dan memungkinkan transfer file tetapi tidak akses shell.


2

Apakah Anda perlu melakukan ini melalui ssh?

JIKA jadi Anda dapat mencoba mengatur shell mereka ke:

/usr/libexec/openssh/sftp-server

Dan pastikan Anda menambahkan di atas ke / etc / shells

Jika Anda ingin memisahkan diri dari penggunaan akun bawaan, Anda dapat mengatur proftpd

Saya menyiapkan SFTP yang aman menggunakan proftpd. kompilasi proftpd seperti ini:

./configure --prefix = / usr --sysconfdir = / etc --with-modules = mod_sftp

Dapat menggunakan artikel ini di bawah ini, dan beberapa lainnya di google tentang cara mengaturnya:

http://tutorialgenius.blogspot.com/2012/02/linux-installing-and-configuring.html


2

Saya khawatir tidak ada yang sama mudah atau dapat diandalkan dengan OpenSSH, karena seperti yang Anda amati ada server SFTP bawaan, tetapi tidak ada server SCP bawaan.

Peringatan: saran dari Vince Berk buruk karena sejumlah alasan:

  1. Perilaku shell terkait dengan file startup dapat dipengaruhi oleh variabel lingkungan, yang dapat diatur SSH dari jarak jauh tergantung pada konfigurasi server.
  2. Pengguna hanya dapat menjalankan ssh / bin / bash dan mendapatkan shell. Itu tidak akan memiliki tty dan jadi tidak nyaman untuk digunakan, tapi jadi apa ... belum lagi semua program lain yang bisa dia jalankan yang mungkin tidak Anda inginkan.
  3. Mengubah izin .bash_profile tidak banyak gunanya jika pengguna hanya dapat melakukan "ssh host rm -f .bash_profile"; tidak ada yang disebutkan tentang izin direktori home.

... dan seterusnya. Pendekatan semacam ini terlalu rapuh.


0

Ini adalah alat pihak ketiga, yang tidak dalam cakupan pertanyaan, tapi saya pikir itu layak disebutkan.

Jailkit: https://olivier.sessink.nl/jailkit/

Ini memiliki koleksi alat untuk memudahkan mengatur penjara pengguna - menyalin binari dan perpustakaan ke penjara, dan mengatur logging dari dalam penjara ke OS. Saya sudah menggunakannya membangun chroot sftp / scp / rsync-only.

Ini juga disertai dengan jk_lsh(shellkit terbatas jailkit) yang dapat digunakan di luar penjara untuk membatasi perintah yang dapat dijalankan pengguna, jika misalnya Anda ingin mengizinkan scp / sftp / rsync hanya tanpa chroot.


-1

Berikut adalah trik tentang cara melakukan serveride ini. Setel shell pengguna menjadi, katakanlah, bash:

usermod -S /bin/bash [username]

Sekarang buat di homedir mereka '.bash_profile' dengan baris berikut:

[ -n "$PS1" ] && exit

Ini menyebabkan sesi non-interaktif (seperti 'scp') berlanjut. Namun, jika mereka mencoba login 'ssh', 'keluar' dipanggil, dan koneksi ditutup.

Pastikan mereka tidak dapat 'sftp' yang baru '.bash_profile' ke direktori home mereka!

chown root:root .bash_profile

Semoga itu bisa membantu!


Pendekatan ini tampaknya tidak memperhitungkan persyaratan penjara.
brianjcohen

Ya, sayangnya Anda harus membuat lingkungan chroot manual untuk sisi 'scp', tumpang tindih dengan direktori chroot yang diberikan di sshd_config, dan melakukan trik di atas untuk setiap pengguna yang ingin Anda batasi. 'Scp' tidak berfungsi dengan server sftp internal.
Vince Berk
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.