Recentemente um cliente me pediu para ter acesso SFTP aos arquivos do seu website em /var/www/site. A configuração do acesso FTP na realidade é bastante simples, e restringir o acesso de um usário para o seu próprio home directory também. O fator limitante neste caso é que queremos permitir que este usuário acesse um outro diretório que está fora da sua home (neste caso o /var/www/site). Neste tutorial você irá aprender a fazer essa configuração e garantir que o seu cliente tenha acesso apenas ao diretório do seu próprio site e não de todos os arquivos e diretórios do servidor.
OBS: Solução verificada em Ubuntu 16 + SSH + NGINX
1 – Criando um grupo, um usuário e uma senha para o seu cliente:
Acesse o terminal como root e utilize os seguintes comandos para criar um novo grupo, um novo usuário e senha e adicionar o usuário no grupo criado. Neste caso eu coloquei o nome do grupo com o mesmo nome do usuário:
Comando para criar um grupo:
groupadd codecafe
Comando para criar um usuário:
useradd -s /bin/false -d /var/www/site codecafe
Neste caso deve-se utilizar o /bin/false para negar acesso SSH ao servidor, permitindo SOMENTE acesso SFTP.
Comando para atualizar a senha do usuário:
passwd codecafe
Comando para incluir o usuário codecafe dentro do grupo codecafe:
usermod -G codecafe codecafe
OBS: no comando usermod o primeiro parâmetro é o nome do grupo e o segundo parâmetro é o nome do usuário.
2- Criando um novo diretório na home do usuário e habilitando um vínculo com o diretório em /var/www/site:
Acesse o diretório home do usuário que você acabou de criar e dentro dele crie um novo diretório com o mesmo nome do site que deseja permitir o acesso SFTP:
cd /home/codecafe/
mkdir site
Agora nós vamos montar o diretório /var/www/site dentro desse diretório que acabamos de criar (/home/codecafe/site) utilizando o parâmetro –bind:
mount --bind /var/www/site/ /home/codecafe/site/
A partir deste momento todas as atualizações que são feitas em um diretório serão replicadas para o outro e vice-versa. Ou seja, se eu deletar um arquivo em /var/www/site ele também será deletado em /home/codecafe/site (e vice-versa).
Para fazer com que essa configuração seja permanente, você deve incluir a seguinte linha em /etc/fstab:
/var/www/site /home/codecafe/site none bind 0 0
3 – Permissões
ATENÇÃO: Este é o passo mais importante a ser seguido para que o seu acesso SFTP funcione corretamente!!!
Para que você consiga acessar este diretório via SFTP, você precisa garantir que:
O diretório /home/codecafe DEVE ser de propriedade do root:
chown root: /home/codecafe
O diretório /home/codecafe/site/ DEVE ser de propriedade do usuário/grupo que você acabou de criar:
chown codecafe:codecafe /home/codecafe/site/
OBS: No meu caso, como eu tenho o Pool do PHP configurado dentro do servidor, o diretório em /var/www/site já é de propriedade do usuário/grupo codecafe e não do www-data, que é o padrão do NGINX. Neste caso você talvez precise conceder privilégios de acesso a esse diretório para o usuário recém criado para que a configuração funcione corretamente.
4- Modificando o seu arquivo de configuração SSH:
Agora chegou a hora de atualizar o seu arquivo de configuração SSH para permitir o acesso sftp a partir dele e configurar o diretório Chroot para o grupo codecafe que acabamos de criar. Abra e insira as seguintes linhas ao seu arquivo de configuração SSH em /etc/ssh/sshd_config:
Subsystem sftp internal-sftp
Match Group codecafe
ChrootDirectory /home/codecafe/site/
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
Reinicie o SSH:
service ssh restart
ATENÇÃO: Antes de prosseguir, abra uma nova janela do terminal (Ctrl+Shift_t) e tente acessar o seu servidor via SSH. Se estiver acessando sem problemas, prossiga para o próximo passo. Caso não esteja conseguindo mais acessar o seu servidor, tenha certeza de que o usuário que você está utilizando para logar no servidor via SSH não está incluso no grupo codecafe que acabamos de criar:
groups seuusuariossh
Se você ver que o grupo codecafe está na lista de grupos do usuário que você mesmo utiliza para acessar o servidor via SSH, você deve remover este grupo do seu usuário com o seguinte comando:
deluser <username> <groupname>
Neste exemplo:
deluser seuusuariossh codecafe
Reinicie o ssh novamente e tente acessar o servidor via SSH:
service ssh restart
Se estiver conseguindo acessar o servidor via ssh com o seu usuário normalmente, siga para o próximo passo. Do contrário, você vai precisar fazer uma avaliação mais detalhada da sua situação. Neste caso comente todas as linhas adicionadas em /etc/ssh/sshd_config e reinicie o ssh até descobrir o que pode estar causando este erro.
5- Hora de testar!
Agora é a hora da verdade! Acesse o servidor via SFTP utilizando o login e senha que você criou no passo 1:
sftp [email protected]
Parabéns, você acabou de configurar um usuário para acesso SFTP!
PS: Caso esteja com dificuldades, reveja detalhadamente a etapa de permissões pois provavelmente é isso o que está te impedindo de acessar o servidor via SFTP.
Comentários