Usuário de SFTP com chroot/jail

Hoje um usuário me pediu acesso ao “ftp” para algumas manutenções que não seriam possível pelo admin do wordpress, e, como bem sabemos, disponibilizar acesso aos arquivos para clientes pode se tornar um inferno caso não seja pensado primeiramente na segurança.

FTP? Nem pensar! Não vou deixar os dados trafegarem nos meus servidores em texto-plano, e usar FTPS iria gerar mais uma preocupação com certificados, datas de expiração etc.

Que tal SFTP? Protocolo criptografado por padrão, sem muita dor de cabeça, integrado direto no sistema operacional, etc ,etc.
Ok, mas e a segurança? Um usuário padrão conectado via SFP fica logado direto na raiz do SO, gerando mais uma preocupação com segurança. Não quero o usuário fuçando nos arquivos do servidor, afinal.

Uma rápida pesquisa e achei algumas alternativas como rssh e rush, mas fiquei horas e horas tentando configurar e testando sem nenhum sucesso, o máximo que consegui foram erros e mais erros.

bom, voltamos então ao oráculo, e eis que surge uma alternativa alterando o subsistema sftp direto no sshd_config que funcionou que é um relógio!

Pra começar, algumas informações importantes:

  • Utilizei como base o ubuntu server 16.04 LTS
  • Nesse ambiente, o arquivo de configuração fica em /etc/ssh/sshd_config, mas isso pode variar se você estiver utilizando outra distro.
  • Normalmente restartar o ssh não derruba sua sessão aberta, mas é bom ficar preparado caso algo errado aconteça
  • No artigo vamos considerar a seguinte situação:
    • Usuário: braz
    • Homedir: /home/braz
    • Todos os comandos são executados como root

E agora, sem mais delongas, mãos de cobra! Digo… Mãos à obra!

Primeiramente, é obrigatório que o diretório /home/braz esteja com usuário e senha root, pra garantir acesso dos usuário do cliente, vamos usar chmod 755.

chown root:root /home/braz
chmod 755 /home/braz

O shell do usuário não precisa (e nem deve) ser /bin/bash, assim deixarei como /bin/false

usermod -s /bin/false braz

A chave aqui será criar um grupo chamado sftponly, todo o usuário nesse grupo sofrerá chroot

groupadd sftponly

Adicionamos o usuário braz ao grupo

gpasswd -a braz sftponly

Agora vamos editar o arquivo sshd_config.
Primeiramente, vamos comentar a seguinte linha (só colocar um # no começo)

Subsystem sftp /usr/lib/openssh/sftp-server

A configuração-chave deve ser sempre depois da declaração do Pam.
Por via das dúvidas, coloque a config no final do arquivo que não tem erro =)

Subsystem sftp internal-sftp
Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

Se tudo esta certo, só restartar o ssh e partir pro abraço!

service ssh restart