OpenSSH: Diferença entre o sftp interno e o sftp-server

63

Por que existem duas maneiras de configurar o SFTP com o OpenSSH e quando usar qual? Existe alguma diferença entre eles?

Quero dizer que 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
    
por Denny Crane 16.01.2015 / 20:40

3 respostas

73

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 using ChrootDirectory 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 with ChrootDirectory.

  • 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, typically sh, and basic /dev nodes such as null, zero, stdin, stdout, stderr, and tty 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 (see sftp-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 sob sudo .

  • 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êm sftp-server nome codificado.

por 17.01.2015 / 20:30
6

Você pode bloquear uma chave_autorizada para o servidor sftp externo.

command="/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:

$ sftp host:/etc/group /tmp
Connecting to host...
Fetching /etc/group to /tmp/group
/etc/group                                    100%  870     0.9KB/s   00:00

A tentativa de fazer qualquer outra coisa só será interrompida:

$ scp host:/etc/group /tmp
Killed by signal 2.

$ ssh host uptime
Killed by signal 2.

Infelizmente, não existe uma maneira fácil de uma chave ser bloqueada para um chroot, a menos que o sshd_config seja modificado. Isso seria muito legal para um usuário ser capaz de fazer sem a intervenção do gerente do sistema.

    
por 26.05.2015 / 19:31
6

Existem implementações alternativas de SFTP que podem ser usadas em conjunto com o OpenSSH:

por 08.07.2015 / 10:37