Tanto sftp-server
como internal-sftp
fazem parte do OpenSSH. sftp-server
é um binário independente. internal-sftp
é apenas uma palavra-chave de configuração que diz a sshd
para usar o código do servidor SFTP integrado em sshd
, em vez de executar outro processo (normalmente o sftp-server
).
Do ponto de vista funcional, sftp-server
e internal-sftp
são quase idênticos. A principal vantagem do internal-sftp
é que ele não requer arquivos de suporte quando usado com ChrootDirectory
directive .
Citações da página sshd_config(5)
man :
-
Para
Subsystem
directive :The command
sftp-server
implements the SFTP file transfer subsystem.Alternately the name
internal-sftp
implements an in-process SFTP server. This may simplify configurations usingChrootDirectory
to force a different filesystem root on clients. -
Para
ForceCommand
directive :Specifying a command of
internal-sftp
will force the use of an in-process SFTP server that requires no support files when used withChrootDirectory
. -
Para a
ChrootDirectory
directive :The
ChrootDirectory
must contain the necessary files and directories to support the user's session. For an interactive session this requires at least a shell, typicallysh
, and basic/dev
nodes such asnull
,zero
,stdin
,stdout
,stderr
, andtty
devices. For file transfer sessions using SFTP no additional configuration of the environment is necessary if the in-process sftp-server is used, though sessions which use logging may require/dev/log
inside the chroot directory on some operating systems (seesftp-server
for details).
Outra vantagem do internal-sftp
é um desempenho, pois não é necessário executar um novo subprocesso para ele.
O internal-sftp
foi adicionado muito mais tarde (OpenSSH 4.9p1 em 2008?) do que o binário standalone sftp-server
, mas agora é o padrão.
Eu acredito que não há razão para usar o sftp-server
para novas instalações.
Pode parecer que sshd
pode usar automaticamente internal-sftp
, quando encontrar sftp-server
, pois a funcionalidade é idêntica e internal-sftp
tem até as vantagens acima. Mas existem casos extremos, onde existem diferenças.
Alguns exemplos:
-
O administrador pode confiar em uma configuração de shell de login para impedir que determinados usuários efetuem login. A mudança para
internal-sftp
ignoraria a restrição, pois o shell de login não está mais envolvido. -
Usando
sftp-server
binary (sendo um processo autônomo), você pode usar alguns hacks, como executando o SFTP sobsudo
. -
Para o SSH-1 (se alguém ainda estiver usando), a diretiva
Subsystem
não está envolvida. Um cliente SFTP usando SSH-1 informa ao servidor explicitamente que binário o servidor deve executar. Portanto, os clientes SFTP herdados do SSH-1 têmsftp-server
nome codificado.