OpenSSH: differenza tra internal-sftp e sftp-server


81

Perché ci sono due modi per configurare SFTP con OpenSSH e quando usare quale? C'è qualche differenza tra loro?

Voglio dire, il primo usa una lib di OpenSSH e il secondo dice "usa l'interno", quindi è anche OpenSSH?

Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

Risposte:


94

Entrambi sftp-servere internal-sftpfanno parte di OpenSSH. sftp-serverè un binario autonomo. internal-sftpè solo una parola chiave di configurazione che dice sshddi utilizzare il codice del server SFTP integrato sshd, invece di eseguire un altro processo (in genere il sftp-server).


Dal punto di vista funzionale, sftp-servere internal-sftpsono quasi identici. Sono costruiti dallo stesso codice sorgente.

Il vantaggio principale di internal-sftpè che non richiede file di supporto quando utilizzato con ChrootDirectorydirettiva .

Citazioni dalla sshd_config(5)pagina man :

  • Per Subsystemdirettiva :

    Il comando sftp-serverimplementa il sottosistema di trasferimento file SFTP.

    In alternativa, il nome internal-sftpimplementa un server SFTP in-process. Questo può semplificare le configurazioni usando ChrootDirectoryper forzare una diversa radice del filesystem sui client.

  • Per ForceCommanddirettiva :

    Se si specifica un comando di, internal-sftpverrà forzato l'uso di un server SFTP in-process che non richiede file di supporto se utilizzato con ChrootDirectory.

  • Per ChrootDirectorydirettiva :

    Il ChrootDirectorydeve contenere i file e le directory necessari per supportare la sessione dell'utente. Per una sessione interattiva questo richiede almeno un guscio, tipicamente sh, e basilari /devnodi come null, zero, stdin, stdout, stderr, e ttydispositivi. Per le sessioni di trasferimento di file utilizzando SFTP non è necessaria alcuna configurazione aggiuntiva dell'ambiente se viene utilizzato il server sftp in-process, sebbene le sessioni che utilizzano la registrazione possano richiedere /dev/logall'interno della directory chroot su alcuni sistemi operativi (vedere sftp-serverper i dettagli).

Un altro vantaggio internal-sftpè rappresentato dalle prestazioni, in quanto non è necessario eseguire un nuovo processo secondario.


È internal-sftpstato aggiunto molto più tardi (OpenSSH 4.9p1 nel 2008?) Rispetto al file sftp-serverbinario autonomo , ma ormai è l'impostazione predefinita.

Credo che non ci sia motivo di utilizzare il sftp-serverper nuove installazioni.


Può sembrare che sshdpotrebbe utilizzare automaticamente internal-sftp, quando si incontra sftp-server, poiché la funzionalità è identica e internal-sftppresenta anche i vantaggi di cui sopra. Ma ci sono casi limite, dove ci sono differenze.

Alcuni esempi:

  • L'amministratore può fare affidamento su una configurazione della shell di accesso per impedire ad alcuni utenti di effettuare l'accesso. Il passaggio a internal-sftpignora la restrizione, poiché la shell di accesso non è più coinvolta.

  • Usando sftp-serverbinario (essendo un processo autonomo) puoi usare alcuni hack, come eseguire SFTP sottosudo .

  • Per SSH-1 (se qualcuno lo sta ancora usando), la Subsystemdirettiva non è affatto coinvolta. Un client SFTP che utilizza SSH-1 indica esplicitamente al server quale binario deve eseguire il server. Quindi i client SFTP SSH-1 legacy hanno un sftp-servernome hard-coded.



6

È possibile bloccare un tasto_ autorizzato sul server sftp esterno.

command = "/ usr / libexec / openssh / sftp-server" ssh-rsa AAAA… == user@host.com

Quando lo fai, il tuo utente può sftp, ma non può scp o ssh:

$ sftp host: / etc / group / tmp
Connessione all'host ...
Recupero / etc / group in / tmp / group
/ etc / group 100% 870 0,9 KB / s 00:00

Il tentativo di fare qualsiasi altra cosa si bloccherà:

$ scp host: / etc / group / tmp
Ucciso dal segnale 2.

Tempo di attività dell'host $ ssh
Ucciso dal segnale 2.

Purtroppo, non esiste un modo semplice per bloccare una chiave su un chroot a meno che sshd_config non venga modificato. Sarebbe davvero bello per un utente poter fare a meno dell'intervento del gestore di sistema.


3
ForceCommand internal-sftpdovrebbe ottenere lo stesso risultato
ptman,

La cosa sshfs host:/home/user/.ssh ~/hackmepratica è che senza chroot puoi usare per modificare tutte quelle impostazioni per aprire l'accesso se cambi idea in seguito.
sh1,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.