Configuração de Chroot SSH com Bind Mount: Isolamento e Acesso Direto

Para administradores que precisam isolar usuários SFTP em pastas específicas sem comprometer a estrutura do servidor web ou enfrentar erros de permissão do OpenSSH, a técnica de Bind Mount é a solução definitiva.

O Desafio

O OpenSSH exige que a raiz do ChrootDirectory pertença estritamente ao root e tenha permissões 755 (não graváveis pelo usuário). Isso impede que o usuário tenha permissão de escrita diretamente na raiz da sua home, o que costuma gerar conflitos ao tentar montar pastas de sites.

A Solução: Bind Mount

O mount --bind projeta o conteúdo de uma pasta existente (como /var/www/...) dentro do diretório isolado do usuário. Diferente de um link simbólico, o kernel trata isso como um diretório real, respeitando as restrições do SSH e permitindo que o usuário trabalhe nos arquivos sem sair do ambiente confinado.

1. Preparação da Raiz (Segura para o SSH)

Bash

sudo chown root:root /home/masterplan
sudo chmod 755 /home/masterplan

2. Criação do Ponto de Montagem e Bind

Crie a pasta dentro da home e monte o diretório real do site nela:

Bash

sudo mkdir -p /home/masterplan/site
sudo mount --bind /var/www/masterplan.com.br /home/masterplan/site

3. Persistência no Boot

Para garantir que a montagem ocorra automaticamente após reiniciar o servidor, adicione ao seu /etc/fstab:

Plaintext

/var/www/masterplan.com.br /home/masterplan/site none bind 0 0

4. Configuração do SSH

No /etc/ssh/sshd_config, force o usuário a entrar direto no ponto montado. Isso elimina a necessidade de navegar pela raiz do chroot:

Plaintext

Match User masterplan
    ChrootDirectory /home/masterplan
    ForceCommand internal-sftp -d /site
    X11Forwarding no
    AllowTcpForwarding no

5. Reinicie o serviço

Bash

sudo systemctl restart ssh

Dica de Ouro

Se a pasta site não aparecer na listagem do seu cliente SFTP, não se preocupe: basta configurar o seu cliente (FileZilla, WinSCP, etc.) para abrir o caminho remoto /site por padrão ou garantir que a pasta montada tenha permissão de leitura (755) para o usuário, permitindo que o ls a enxergue sem comprometer a segurança da raiz do chroot.

Rolar para cima