Como posso configurar o servidor SFTP openSSH no Linux?

10

Quero configurar o servidor sftp para compartilhar um diretório, mas não sei como modificar /etc/ssh/sshd_config.

Meus requisitos são:

1) O login não deve usar certificados, apenas senha (ou seja, a autorização usa o método de senha)

2) Quero fazer login com o usuário: ftp, senha: foo e compartilhar o diretório / home / ftp.

3) Eu tenho um aplicativo que, de tempos em tempos, precisa baixar um arquivo do servidor, não preciso fazer login com um cliente operacional completo.

Até agora, adicionei as seguintes linhas ao / etc / ssh / sshd_config:

Protocol 2
Subsystem sftp /usr/libexec/sftp-server
Match User ftp
   ForceCommand internal-sftp
   ChrootDirectory /home/ftp

Todo o resto é comentado.

/home/ftp é um diretório vazio no momento.

O acesso funcionará se eu tentar baixar um arquivo usando credenciais raiz, mas não funcionará se eu usar credenciais ftp. Preciso definir um shell de login? Preciso preencher / home / ftp de alguma forma?

EDIT: Este é o meu log sshd:

subsystem request for sftp
debug1: subsystem: exec() internal-sftp
debug1: Forced command (config) 'internal-sftp '
debug2: fd 3 setting TCP_NODELAY
debug2: fd 9 setting O_NONBLOCK
debug2: fd 8 setting O_NONBLOCK
debug1: Received SIGCHLD.
debug1: session_by_pid: pid 17613
debug1: session_exit_message: session 0 channel 0 pid 17613
debug2: channel 0: request exit-status confirm 0
debug1: session_exit_message: release channel 0
debug2: channel 0: write failed
debug2: channel 0: close_write
debug2: channel 0: send eow
debug2: channel 0: output open -> closed
debug2: channel 0: read<=0 rfd 9 len 0
debug2: channel 0: read failed
debug2: channel 0: close_read
debug2: channel 0: input open -> drain
debug2: channel 0: ibuf empty
debug2: channel 0: send eof
debug2: channel 0: input drain -> closed
debug2: channel 0: send close
debug2: notify_done: reading
debug3: channel 0: will not send data after close
debug3: channel 0: will not send data after close
User child is on pid 17611
debug3: mm_request_receive entering

* O cliente trava aqui (até ocorrer um tempo limite) *

Observe novamente que, se eu entrar como "root", o arquivo será baixado corretamente. Ele também é baixado corretamente se eu comentar as três últimas linhas do arquivo de configuração (ou seja, a Matchlinha e as 2 seguintes).

Emiliano
fonte
Você já tentou especificar apenas uma das opções de correspondência ? O que acontece quando você usa um cliente SFTP real? Você ainda pode se conectar usando um cliente SSH normal, por exemplo ssh, ou PuTTY no Windows? Qual versão do OpenSSH você está usando?
Daniel Beck

Respostas:

7

Você precisa se certificar de que /home/ftppertence roote se esse grupo e outros não têm permissões de gravação, por exemplo chmod 0755. Você precisa adicionar subdiretórios ftppara adicionar arquivos.


Você também precisa do internal-sftpsubsistema, caso contrário, precisará fornecer um chrootambiente adequado em /home/ftp:

Subsystem sftp internal-sftp

Para proibir todos os tipos de login sem senha, digite

ChallengeResponseAuthentication no
GSSAPIAuthentication no
PubkeyAuthentication no

Estes são ativados por padrão.

Daniel Beck
fonte
Substituir a linha do meu subsistema pela sua (e definir a permissão do diretório) faz com que minha cadeia de erros desapareça; no entanto, meus programas clientes "travam" e não fazem o download do arquivo que eu preciso (posso fazer o download usando credenciais raiz). Existe alguma maneira de tornar a saída sshd mais detalhada?
Emiliano
Tente adicionar apenas um único item de configuração por vez e teste se você pode se conectar para determinar qual das opções está com defeito ou se é uma combinação de opções. Você deve ter alguma saída /var/log/secure, pelo menos é onde eu a recebo no meu sistema.
Daniel Beck
Aumentei meu nível de logon usando a diretiva LogLevel. Eu posso ler a string /var/log/messages. Eu tenho o seguinte: Failed none for ftp [...]seguido por Accepted password for ftp [...]e User child is on pid 7658. O cliente trava e depois
expira
@happy_emi Considere adicionar essas informações à sua pergunta.
Daniel Beck
Parece que foi um problema de permissões de diretório. sshd_configestava bem.
Emiliano