Por que existem duas maneiras de configurar o SFTP com OpenSSH e quando usar qual? Existe alguma diferença entre eles?
Quero dizer, o primeiro está usando uma lib do OpenSSH e o segundo diz "use o interno", então também é OpenSSH?
Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Ambos
sftp-server
einternal-sftp
fazem parte do OpenSSH. Osftp-server
é um binário autônomo. Ointernal-sftp
é apenas uma palavra-chave de configuração que dizsshd
para usar o código do servidor SFTP embutido nosshd
, em vez de executar outro processo (o que normalmente seria osftp-server
).O
internal-sftp
foi adicionado muito mais tarde (OpenSSH 4.9p1 em 2008?) do que osftp-server
binário autônomo. Mas é o padrão até agora. Osftp-server
agora é redundante e é mantido provavelmente para compatibilidade com versões anteriores.Acredito que não há razão para usar o
sftp-server
para novas instalações.Do ponto de vista funcional, os
sftp-server
einternal-sftp
são quase idênticos. Eles são construídos a partir do mesmo código-fonte.A principal vantagem do
internal-sftp
é que ele não requer arquivos de suporte quando usado com aChrootDirectory
diretiva .Citações da
sshd_config(5)
página man :Para
Subsystem
diretiva :Para
ForceCommand
diretiva :Para
ChrootDirectory
diretiva :Outra vantagem do
internal-sftp
é um desempenho, pois não é necessário executar um novo subprocesso para ele.Pode parecer que o
sshd
pode usar automaticamente ointernal-sftp
, quando encontra osftp-server
, pois a funcionalidade é idêntica e ointernal-sftp
tem até as vantagens acima. Mas há casos extremos, onde há diferenças.Alguns exemplos:
O administrador pode contar com uma configuração de shell de login para impedir que determinados usuários efetuem login. Alternar para o
internal-sftp
ignoraria a restrição, pois o shell de login não está mais envolvido.Usando o
sftp-server
binário (sendo um processo autônomo), você pode usar alguns hacks, como executar o SFTP emsudo
.Para SSH-1 (se alguém ainda o estiver usando), a
Subsystem
diretiva não está envolvida. Um cliente SFTP usando SSH-1 informa explicitamente ao servidor qual binário o servidor deve executar. Portanto, os clientes SSH-1 SFTP herdados têm osftp-server
nome codificado.Existem implementações alternativas de SFTP que podem ser usadas em conjunto com o OpenSSH:
Você pode bloquear uma chave_autorizada para o servidor sftp externo.
Quando você faz isso, seu usuário pode sftp, mas não pode scp ou ssh:
Tentar fazer qualquer outra coisa irá apenas travar:
Infelizmente, não há uma maneira fácil de uma chave ser bloqueada em um chroot, a menos que o sshd_config seja modificado. Isso seria muito legal para um usuário poder fazer sem a intervenção do gerente do sistema.
Se tudo o que você quer fazer é bloquear uma conta para usar apenas SFTP, apenas dê à conta o shell padrão /sbin/nologin