OpenSSH: Diferença entre o sftp interno e o servidor sftp

81

Por que existem duas maneiras de configurar o SFTP com o 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 the internal", então também é o OpenSSH?

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

Respostas:

94

Ambos sftp-servere internal-sftpfazem parte do OpenSSH. sftp-serveré um binário independente. internal-sftpé apenas uma palavra-chave de configuração que diz sshdpara usar o código do servidor SFTP embutido, em sshdvez de executar outro processo (normalmente o sftp-server).


Do ponto de vista funcional, sftp-servere internal-sftpsão quase idênticas. Eles são criados a partir do mesmo código fonte.

A principal vantagem internal-sftpé que ele não requer arquivos de suporte quando usado com a ChrootDirectorydiretiva .

Citações da sshd_config(5)página de manual :

  • Para Subsystemdiretiva :

    O comando sftp-serverimplementa o subsistema de transferência de arquivos SFTP.

    Como alternativa, o nome internal-sftpimplementa um servidor SFTP em processo. Isso pode simplificar as configurações usando ChrootDirectorypara forçar uma raiz do sistema de arquivos diferente nos clientes.

  • Para ForceCommanddiretiva :

    A especificação de um comando internal-sftpforçará o uso de um servidor SFTP em processo que não requer arquivos de suporte quando usado com ChrootDirectory.

  • Para ChrootDirectorydiretiva :

    O ChrootDirectorydeve conter os arquivos e diretórios necessários para suportar a sessão do usuário. Para uma sessão interativa isso requer pelo menos uma casca, normalmente sh, básicos e /devnós, como null, zero, stdin, stdout, stderr, e ttydispositivos. Para sessões de transferência de arquivos usando SFTP, nenhuma configuração adicional do ambiente é necessária se o servidor sftp em processo for usado, embora as sessões que usam o log possam exigir /dev/logdentro do diretório chroot em alguns sistemas operacionais (consulte sftp-serverpara detalhes).

Outra vantagem internal-sftpé o desempenho, pois não é necessário executar um novo subprocesso para ele.


O internal-sftpfoi adicionado mais tarde (OpenSSH 4.9p1 em 2008?) Do que o autônomo sftp-serverbinário, mas é o padrão até agora.

Eu acredito que não há razão para usar o sftp-serverpara novas instalações.


Pode parecer que sshdpoderia usar automaticamente internal-sftp, quando encontrar sftp-server, como a funcionalidade é idêntica e internal-sftptem até as vantagens acima. Mas existem casos extremos, onde existem diferenças.

Poucos exemplos:

  • O administrador pode confiar em uma configuração do shell de logon para impedir que certos usuários façam login. A mudança para o internal-sftpignoraria a restrição, pois o shell de logon não está mais envolvido.

  • Usando sftp-serverbinário (sendo um processo independente), você pode usar alguns hacks, como executar o SFTP emsudo .

  • Para SSH-1 (se alguém ainda estiver usando), a Subsystemdiretiva não está envolvida. Um cliente SFTP usando SSH-1 informa explicitamente ao servidor qual binário o servidor deve executar. Portanto, os clientes SFTP herdados do SSH-1 têm um sftp-servernome codificado.

Martin Prikryl
fonte
6

Você pode bloquear uma chave autorizada no servidor sftp externo.

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

Quando você faz isso, seu usuário pode sftp, mas não pode scp ou ssh:

host $ sftp: / etc / group / tmp
Conectando ao host ...
Buscando / etc / group em / tmp / group
/ etc / grupo 100% 870 0,9KB / s 00:00

Tentar fazer qualquer outra coisa irá travar:

$ scp host: / etc / group / tmp
Morto pelo sinal 2.

Tempo de atividade do host $ ssh
Morto pelo sinal 2.

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.

Charles Fisher
fonte
3
ForceCommand internal-sftpdeve conseguir o mesmo
ptman
O que é prático é que, sem o chroot, você pode sshfs host:/home/user/.ssh ~/hackmeeditar todas essas configurações de volta ao acesso aberto, se mudar de idéia mais tarde.
sh1