Izinkan SFTP tetapi larang SSH?

94

Saya memulai sebuah perusahaan hosting yang sangat kecil untuk beberapa teman dan klien kecil, tidak ada yang besar.

Saya ingin memberi "klien" saya hak untuk mengelola file mereka di server. Saya benci FTP karena tidak aman dan menurut saya sudah usang.

Jadi saya ingin mengizinkan pengguna untuk terhubung melalui SFTP tetapi tidak mengizinkan mereka terhubung melalui SSH. (Saya tahu, saya tahu, SFTP menggunakan SSH). Tapi saya hanya bertanya-tanya, mungkinkah?

Jadi saya tidak perlu menginstal layanan FTP di server dan semuanya akan luar biasa!

Tommy B.
sumber

Jawaban:

121

Dimulai dengan versi 4.9 OpenSSH (tidak tersedia dalam centos 5.x tetapi fitur ChrootDirectory di-backport) memiliki internal-sftpsubsistem:

Subsystem sftp internal-sftp

Dan kemudian memblokir kegunaan lain:

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

Tambahkan pengguna Anda ke sftponlygrup. Anda harus mengubah direktori home pengguna menjadi /karena chroot dan /home/userharus dimiliki oleh root. Saya juga menetapkan /bin/falsesebagai shell pengguna.

Rob Wouters
sumber
Wow! Sangat luar biasa! Saya akan menguji ini dan kembali ke sini untuk memvalidasi. Terima kasih banyak!
Tommy B.
+1 untuk hal ChrootDirectory!
Kyle Hodgson
1
Setelah melakukan ini, pengguna sftponly saya tidak dapat mengakses dengan ssh dan dapat terhubung dengan sftp. Namun tidak dapat melihat file sama sekali! Meskipun file-file ini memiliki izin untuk pengguna ini. :-(
Emilio Nicolás
3
Jika Anda ingin melakukan ini dan menemukan entri di sshd_config Anda dengan "/ usr / lib / openssh / sftp-server" sudah ada, periksa di sini: serverfault.com/questions/660160/… - internal-sftp "lebih baru , lebih baik dan lebih mudah "
Xosofox
19

Ada cangkang scponly apa ini. Itu juga bisa chroot .

Batu
sumber
Ini akan menjadi hebat jika Anda membutuhkan pengguna SFTP dan SSH. Anda cukup mengganti shell di / etc / passwd untuk yang dibatasi hanya untuk SFTP.
Dragos
4

Periksa rssh yang merupakan shell palsu yang memungkinkan sftp tetapi menolak ssh

Lebih lanjut tentang RSSH

http://www.pizzashack.org/rssh/

RPM

http://pkgs.repoforge.org/rssh/

Anda dapat mengkonfigurasi rssh untuk membolehkan / menolak berbagai perilaku seperti sft, scp dll.

Chris
sumber
Bagus. Ini adalah cara termudah untuk mengkonfigurasi tanpa menyentuh sshd_config sama sekali. Cukup ganti shell dalam file passwd dan selesai.
Tomofumi
2

Anda dapat memodifikasi / etc / passwd dan memberikan shell palsu kepada pengguna tersebut sehingga ia tidak dapat menggunakan ssh.

jcisio
sumber
11
Apakah Anda menguji ini?
splattne
8
Ketika saya mencoba mengatur shell untuk /bin/falsetidak bekerja ssh atau sftp
Brad Mace
2
/ bin / false adalah untuk melarang segala jenis login, itu bukan pendekatan yang benar di sini. Jawaban yang diterima dari Rob Wouters 'adalah bagaimana Anda harus membatasi pengguna hanya untuk SFTP, bukan dengan mengganti shell. Jika Anda memang ingin mengganti shell @ asnwer Stone adalah ide yang bagus.
jwbensley
1
jadi APA shell harus digunakan dengan asumsi / bin / bash tidak dapat diterima dan / bin / false atau / sbin / nologin menolak akses?
Putnik
1

Saya menggunakan metode menentukan shell pengguna sebagai / bin / false seperti yang disebutkan. Namun, Anda harus memastikan bahwa / bin / shell ada di / etc / shells. Kemudian ia bekerja ssh = no ftp = ok.

Saya juga menggunakan vsftpd dan menambahkan
chroot_local_user = YES ini ke /etc/vsftpd/vsftpd.conf sehingga ftp-ers tidak dapat melihat tanggal selain milik mereka sendiri.

Keuntungan dari perubahan sederhana ini bukanlah konfigurasi yang mengganggu untuk konfigurasi ssh untuk setiap pengguna.

mencela
sumber
1

Jangan lupa untuk menemukan baris UsePAM yesdan berkomentar:

#UsePAM yes

Tanpa menonaktifkan ini, server SSH Anda akan macet saat memuat ulang / memulai kembali. Karena Anda tidak memerlukan fungsi mewah PAM, ini tidak masalah.

Hudson Santos
sumber
0

Mengkonfigurasi ssh agar hanya mengaktifkan sftp untuk beberapa pengguna terpilih adalah ide bagus dan berfungsi dengan baik, asalkan Anda menginstal salah satu scponlyatau rssh.

rsshberfungsi dengan baik, kecuali jika Anda perlu mengkonfigurasi jail, dalam hal ini cobalah untuk mengikuti instruksi yang diberikan oleh manual CHROOT gila, yang mengarah ke "menyalin" sebagian besar executable sistem dan perpustakaan tepat di bawah "jail setiap pengguna", termasuk rsshshell itu sendiri. Ini adalah metode pemborosan ruang.

scponly membutuhkan pemahaman yang mendalam dalam konfigurasi yang mengarah ke masalah penolakan login jika terjadi pengaturan jail.

Cara langsung untuk memungkinkan fungsionalitas "ftp" dengan jail berfungsi dengan baik, dukungan SSL / TLS untuk transaksi dan login yang aman adalah dengan menggunakan VSFTPD "lama namun berfungsi", yang menginstal dengan cepat dan bersih dan menawarkan semua konfigurasi sesuai kebutuhan dan, terakhir tetapi yang tidak kalah penting: ini berhasil!

Maurizio.

Maurizio
sumber
0

Sayangnya semua jawaban sangat menyesatkan: silakan lakukan hal berikut:

  1. Pertama buat pengguna sftp dan grup sftp

  2. Buat direktori terpisah sebagai root untuk file SFTP: sudo mkdir -p /home/sftpdir

  3. Memiliki file sshd_config yang teruji yang memungkinkan SSH over port 22 tetapi juga SFTP pada port acak untuk alasan keamanan
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. Mulai ulang dan periksa status layanan sshd

    sudo service sshd restart

    status layanan sshd

  2. Buat file Shell. Tambahkan eksekusi untuk mengulang pesan pemberitahuan

    sudo touch / bin / sftponly echo -e '#! / bin / sh \ necho "Akun ini terbatas hanya untuk akses SFTP."' | sudo tee -a / bin / sftponly

  3. Berikan izin eksekusi dan tambahkan ke file shells

    sudo chmod a + x / bin / sftponly echo "/ bin / sftponly" | sudo tee -a / etc / shells

  4. akhirnya Uji dan Anda tidak dapat terhubung.

  5. Templat untuk menggunakan klien SFTP dengan kunci SSH dan verbositas dasar:

    sftp -v -oPort = $ RANDOM_PORT -i ~ / .ssh / $ SSH_KEY.pem sftpuser @ $ HOST

Andres Leon Rangel
sumber