Deixando de fora a resposta de @ ibrewster (incluindo o recurso externo ele está vinculado a), aqui está o conjunto completo de instruções daquela página externa, com algumas informações adicionais para fazer esse trabalho com senha login e execução do SELinux.
Publicar novamente aqui, caso a página vinculada externamente desapareça no futuro.
Estas instruções aplicam-se ao RHEL7 e ao CentOS7 (e talvez a outras versões):
No sistema remoto:
Primeiro, adicione e configure a conta de usuário para ser chrooted:
Observe que o recurso externo usou um caminho diferente para sftp-server
. Certifique-se de ter o caminho correto em seu sistema ou prepare-se para a dor. ;-) O caminho abaixo funciona para uma instalação mínima do RHEL7 & CentOS7.
# From command line:
groupadd sftponly
useradd -d /home/$USERNAME -s /usr/libexec/openssh/sftp-server -M -N -g sftponly $USERNAME
mkdir -p /home/$USERNAME/uploads /home/$USERNAME/downloads /home/$USERNAME/.ssh
chown $USERNAME:sftponly /home/$USERNAME/uploads /home/$USERNAME/downloads /home/$USERNAME/.ssh
chown root /home/$USERNAME
chmod 755 /home/$USERNAME
chmod 700 /home/$USERNAME/.ssh
passwd $USERNAME
echo '/usr/libexec/openssh/sftp-server' >> /etc/shells
Embora eu tenha definido uma senha acima, usarei o login sem senha quando souber que a configuração funciona. Para frente ...
Supondo que você tenha SELinux
ativado e impondo (você deve), emita esses comandos para torná-lo feliz:
setsebool -P ssh_chroot_rw_homedirs on
restorecon -R /home/$USERNAME
Agora, edite a configuração do sshd da seguinte forma:
[root@remote]# vi /etc/ssh/sshd_config
#
# CHANGE lines:
#
# override default of no subsystems
#Subsystem sftp /usr/libexec/openssh/sftp-server # commented out
Subsystem sftp internal-sftp # added
#
# ADD the following at the bottom:
#
Match group sftponly
ChrootDirectory %h
AllowTcpForwarding no
ForceCommand internal-sftp
Finalmente, reinicie o sshd
[root@remote]# systemctl restart sshd.service
No sistema do cliente
Primeiro, crie a mesma conta localmente.
[root@client]# useradd -m $USERNAME
[root@client]# passwd $USERNAME
[root@client]# su $USERNAME
Ok, agora vamos configurar nosso par de chaves RSA.
[$USERNAME@client]# ssh-keygen
Não consegui fazer com que o ssh-copy-id trabalhasse com a configuração do chroot acima, então criei manualmente o arquivo authorized_keys
com o texto id_rsa.pub do meu cliente.
[$USERNAME@client]# cat .ssh/id_rsa.pub
---some key here---
Então, de volta ao sistema REMOTE,
[root@remote]# vi /home/$USERNAME/.ssh/authorized_keys
---past key from right above, then wq---
Não se esqueça de definir permissões neste arquivo:
[root@remote]# chown $USERNAME:sftpusers /home/$USERNAME/.ssh/authorized_keys
Pronto para testar
Tudo deve estar no lugar agora. Do cliente:
[$USERNAME@client]# sftp $USERNAME@remote
Isso deve ajudá-lo. Se você for solicitado a fornecer uma senha (ainda não desativamos PasswordAuthentication no controle remoto), você tem um problema de configuração no sistema remoto. Analise seu / var / log / secure para detalhes.
Se você entrar sem precisar digitar uma senha, estará quase pronto.
De volta ao sistema remoto:
[root@remote]# vi /etc/ssh/sshd_config
# disable PasswordAuthentication
PasswordAuthentication no
# or optionally, just comment that line out
# PasswordAuthentication no
-- save and exit with :wq --
Reinicie o sshd no sistema remoto:
[root@remote]# systemctl restart sshd.service
Teste final do cliente
[$USERNAME@client]# sftp $USERNAME@remote
# in like Flynn? yay!
Concluído
Você deve estar configurado para usar chroot sftp e login sem senha (com SELinux
definido como obrigatório )