OpenSSH: Perbedaan antara internal-sftp dan sftp-server

81

Mengapa ada dua cara untuk mensetup SFTP dengan OpenSSH dan kapan menggunakannya? Apakah ada perbedaan di antara mereka?

Maksud saya yang pertama menggunakan lib dari OpenSSH dan yang kedua mengatakan "gunakan internal", jadi itu juga OpenSSH?

Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Denny Crane
sumber

Jawaban:

94

Keduanya sftp-serverdan internal-sftpmerupakan bagian dari OpenSSH. sftp-serveradalah biner mandiri. internal-sftphanyalah kata kunci konfigurasi yang memberi tahu sshduntuk menggunakan kode server SFTP bawaan sshd, alih-alih menjalankan proses lain (biasanya sftp-server).


Dari sudut pandang fungsional, sftp-serverdan internal-sftphampir identik. Mereka dibangun dari kode sumber yang sama.

Keuntungan utama internal-sftpadalah, bahwa tidak memerlukan file dukungan saat digunakan dengan ChrootDirectorydirektif .

Kutipan dari sshd_config(5)halaman manual :

  • Untuk Subsystemdirektif :

    Perintah ini sftp-servermengimplementasikan subsistem transfer file SFTP.

    Bergantian nama internal-sftpmengimplementasikan server SFTP dalam proses. Ini dapat menyederhanakan konfigurasi menggunakan ChrootDirectoryuntuk memaksa root filesystem yang berbeda pada klien.

  • Untuk ForceCommanddirektif :

    Menentukan perintah internal-sftpakan memaksa penggunaan server SFTP dalam proses yang tidak memerlukan file dukungan saat digunakan bersama ChrootDirectory.

  • Untuk ChrootDirectorydirektif :

    The ChrootDirectoryharus berisi file yang diperlukan dan direktori untuk mendukung sesi pengguna. Untuk sesi interaktif ini membutuhkan setidaknya shell, biasanya sh, dan dasar /devnode seperti null, zero, stdin, stdout, stderr, dan ttyperangkat. Untuk sesi transfer file menggunakan SFTP tidak diperlukan konfigurasi lingkungan tambahan jika sftp-server in-process digunakan, meskipun sesi yang menggunakan logging mungkin memerlukan /dev/logdi dalam direktori chroot pada beberapa sistem operasi (lihat sftp-serverdetailnya).

Keuntungan lain internal-sftpadalah kinerja, karena tidak perlu menjalankan sub-proses baru untuk itu.


Itu internal-sftpditambahkan jauh kemudian (OpenSSH 4.9p1 pada 2008?) Daripada sftp-serverbiner mandiri , tetapi ini adalah default sekarang.

Saya percaya tidak ada alasan untuk menggunakan sftp-serverinstalasi baru.


Tampaknya itu sshdbisa secara otomatis digunakan internal-sftp, ketika bertemu sftp-server, karena fungsinya identik dan internal-sftpbahkan memiliki kelebihan di atas. Tetapi ada kasus tepi, di mana ada perbedaan.

Beberapa contoh:

  • Administrator dapat mengandalkan konfigurasi shell login untuk mencegah pengguna tertentu masuk. Beralih ke internal-sftpakan memotong pembatasan, karena shell login tidak lagi terlibat.

  • Menggunakan sftp-serverbiner (menjadi proses mandiri) Anda dapat menggunakan beberapa peretasan, seperti menjalankan SFTP di bawahsudo .

  • Untuk SSH-1 (jika ada yang masih menggunakannya), Subsystemarahan tidak terlibat sama sekali. Klien SFTP menggunakan SSH-1 memberi tahu server secara eksplisit, biner apa yang harus dijalankan server. Jadi klien SFTP SSH-1 legacy memiliki sftp-servernama yang dikodekan dengan keras.

Martin Prikryl
sumber
6

Anda dapat mengunci kunci_ berwenang ke server sftp eksternal.

command = "/ usr / libexec / openssh / sftp-server" ssh-rsa AAAA… == [email protected]

Ketika Anda melakukannya, pengguna Anda bisa sftp, tetapi tidak bisa scp atau ssh:

host $ sftp: / etc / group / tmp
Menghubungkan ke host ...
Mengambil / etc / group ke / tmp / group
/ etc / group 100% 870 0,9KB / s 00:00

Mencoba melakukan hal lain hanya akan hang:

host $ scp: / etc / group / tmp
Dibunuh oleh sinyal 2.

Waktu aktif $ ssh
Dibunuh oleh sinyal 2.

Sayangnya, tidak ada cara mudah untuk kunci dikunci ke chroot kecuali sshd_config dimodifikasi. Ini akan sangat keren bagi pengguna untuk dapat melakukannya tanpa campur tangan manajer sistem.

Charles Fisher
sumber
3
ForceCommand internal-sftpharus mencapai hal yang sama
PTman
Hal yang praktis adalah bahwa tanpa chroot Anda dapat menggunakan sshfs host:/home/user/.ssh ~/hackmeuntuk mengedit semua pengaturan itu kembali untuk membuka akses jika Anda berubah pikiran nanti.
sh1