Introdução
SFTP (Secure File Transfer Protocol) é uma solução poderosa e segura para transferir arquivos através de uma rede. Este tutorial irá guiá-lo através da compreensão do SFTP, da solução de problemas de erros 'Permission Denied' (Permissão Negada) e da resolução de problemas de permissões SFTP no seu sistema Linux. Você aprenderá como configurar um servidor SFTP, criar usuários com as permissões apropriadas e diagnosticar problemas comuns de permissão que ocorrem durante as transferências de arquivos.
Configurando o Servidor SFTP no Ubuntu
SFTP (Secure File Transfer Protocol) fornece um método seguro para transferir arquivos entre sistemas. Diferente do FTP regular, o SFTP criptografa tanto os comandos quanto os dados durante a transmissão, protegendo suas informações contra acesso não autorizado.
Nesta etapa, configuraremos um servidor SFTP básico em nosso sistema Ubuntu.
Instalando o Servidor OpenSSH
Primeiro, vamos garantir que nosso sistema esteja atualizado e instalar o servidor OpenSSH, que inclui as capacidades SFTP:
sudo apt update
sudo apt install -y openssh-server
Após executar esses comandos, você deverá ver uma saída semelhante a:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
openssh-server is already the newest version (1:8.9p1-3ubuntu0.1).
Verificando o Status do Serviço SSH
Como estamos em um contêiner Docker, o comando systemctl padrão não funcionará. Vamos verificar se o serviço SSH está em execução usando o comando de status do processo:
ps aux | grep sshd
Você deve ver uma saída indicando que o sshd está em execução:
root 1234 0.0 0.1 12016 5604 ? Ss 10:20 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
Criando um Usuário de Teste para SFTP
Vamos criar um usuário dedicado para testar a funcionalidade SFTP:
sudo adduser sftpuser
Quando solicitado, insira uma senha simples como password123 e você pode pressionar Enter para pular os campos de informações adicionais do usuário. Você deve ver uma saída semelhante a:
Adding user `sftpuser' ...
Adding new group `sftpuser' (1001) ...
Adding new user `sftpuser' (1001) with group `sftpuser' ...
Creating home directory `/home/sftpuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Criando Arquivos de Teste para Transferência SFTP
Agora, vamos criar alguns arquivos de teste em nosso diretório home que usaremos para transferências SFTP:
cd ~/project
echo "This is a test file for SFTP transfers" > testfile.txt
echo "This file has different permissions" > restrictedfile.txt
Vamos verificar se os arquivos foram criados corretamente:
ls -l testfile.txt restrictedfile.txt
Você deve ver uma saída semelhante a:
-rw-rw-r-- 1 labex labex 37 Sep 28 10:30 restrictedfile.txt
-rw-rw-r-- 1 labex labex 38 Sep 28 10:30 testfile.txt
Por padrão, ambos os arquivos têm permissões de leitura e escrita para o proprietário e o grupo, e permissões de somente leitura para outros. Experimentaremos alterar essas permissões nas próximas etapas.
Compreendendo as Permissões de Arquivos e Seu Impacto no SFTP
Antes de explorarmos os problemas de permissão do SFTP, vamos entender o sistema de permissões de arquivos do Linux e como ele afeta as operações SFTP.
Noções Básicas de Permissões de Arquivos no Linux
No Linux, cada arquivo e diretório tem três tipos de permissões:
- Leitura (r): Permite visualizar o conteúdo do arquivo ou listar o conteúdo do diretório
- Escrita (w): Permite modificar arquivos ou criar/excluir arquivos em um diretório
- Execução (x): Permite executar arquivos ou acessar um diretório
Essas permissões são atribuídas a três categorias de usuários:
- Proprietário (Owner): O usuário que criou o arquivo
- Grupo (Group): O grupo atribuído ao arquivo
- Outros (Others): Todos os outros
Visualizando as Permissões Atuais
Vamos verificar as permissões atuais de nossos arquivos de teste:
ls -l ~/project/testfile.txt ~/project/restrictedfile.txt
Você verá uma saída semelhante a:
-rw-rw-r-- 1 labex labex 38 Sep 28 10:30 /home/labex/project/testfile.txt
-rw-rw-r-- 1 labex labex 37 Sep 28 10:30 /home/labex/project/restrictedfile.txt
A string de permissão -rw-rw-r-- pode ser dividida em:
- O primeiro caractere
-indica um arquivo regular (seriadpara diretório) - Os três caracteres seguintes
rw-mostram as permissões do proprietário (leitura, escrita, sem execução) - Os três caracteres seguintes
rw-mostram as permissões do grupo (leitura, escrita, sem execução) - Os três últimos caracteres
r--mostram as permissões de outros (somente leitura)
Modificando as Permissões de Arquivos
Vamos modificar as permissões de nossos arquivos para criar cenários que podem levar a erros de permissão negada no SFTP:
## Make testfile.txt readable by everyone but writable only by owner
chmod 644 ~/project/testfile.txt
## Make restrictedfile.txt accessible only to the owner
chmod 600 ~/project/restrictedfile.txt
Agora, vamos verificar as alterações:
ls -l ~/project/testfile.txt ~/project/restrictedfile.txt
Você deve ver as permissões atualizadas:
-rw-r--r-- 1 labex labex 38 Sep 28 10:30 /home/labex/project/testfile.txt
-rw------- 1 labex labex 37 Sep 28 10:30 /home/labex/project/restrictedfile.txt
Configurando um Diretório para Testes SFTP
Vamos criar um diretório dedicado para testes SFTP:
mkdir -p ~/project/sftp_test
echo "This file is in the SFTP test directory" > ~/project/sftp_test/test_file.txt
chmod 755 ~/project/sftp_test
Agora, vamos criar um diretório com permissões restritas:
mkdir -p ~/project/restricted_sftp
echo "This file is in the restricted directory" > ~/project/restricted_sftp/restricted_file.txt
chmod 700 ~/project/restricted_sftp
Vamos verificar as permissões do diretório:
ls -ld ~/project/sftp_test ~/project/restricted_sftp
Você deve ver:
drwxr-xr-x 2 labex labex 4096 Sep 28 10:35 /home/labex/project/sftp_test
drwx------ 2 labex labex 4096 Sep 28 10:35 /home/labex/project/restricted_sftp
O diretório sftp_test pode ser acessado por qualquer pessoa, enquanto o diretório restricted_sftp só pode ser acessado pelo proprietário (usuário labex).
Experimentando e Diagnosticando Erros de Permissão Negada no SFTP
Nesta etapa, conectaremos ao nosso servidor SFTP e experimentaremos erros de permissão negada em primeira mão. Isso nos ajudará a entender como as configurações de permissão afetam as operações SFTP.
Conectando ao Servidor SFTP Localmente
Como estamos trabalhando em um ambiente local, podemos nos conectar ao nosso servidor SFTP usando o endereço localhost. Vamos nos conectar usando o sftpuser que criamos anteriormente:
sftp sftpuser@localhost
Quando solicitado a senha, insira a senha que você definiu para a conta sftpuser (por exemplo, password123). Se a conexão for bem-sucedida, você verá um prompt como:
Connected to localhost.
sftp>
Se você encontrar problemas de conexão, pode ser porque o serviço SSH não está sendo executado corretamente no contêiner. Você pode tentar sair com exit e prosseguir com as próximas etapas usando exemplos teóricos.
Comandos SFTP Básicos
Vamos explorar alguns comandos SFTP básicos:
- Visualize o diretório atual no servidor remoto:
sftp> pwd
Remote working directory: /home/sftpuser
- Liste os arquivos no diretório atual:
sftp> ls
- Navegue para um diretório diferente:
sftp> cd /tmp
sftp> pwd
Remote working directory: /tmp
- Retorne ao seu diretório home:
sftp> cd
sftp> pwd
Remote working directory: /home/sftpuser
Tentando Acessar Arquivos com Diferentes Permissões
Agora, vamos tentar acessar nossos arquivos de teste da sessão SFTP:
- Tente obter um arquivo do nosso diretório do projeto:
sftp> get /home/labex/project/testfile.txt
Fetching /home/labex/project/testfile.txt to testfile.txt
Permission denied
Você notará um erro "Permission denied". Isso ocorre porque o sftpuser não tem permissão para acessar arquivos no diretório home do usuário labex.
Sair da Sessão SFTP
Vamos sair da sessão SFTP para continuar:
sftp> exit
Compreendendo os Erros de Permissão Negada
Existem várias razões comuns para erros "Permission denied" no SFTP:
- Permissões de Arquivo: O usuário não tem acesso de leitura/escrita ao arquivo
- Permissões de Diretório: O usuário não pode acessar o diretório que contém o arquivo
- Problemas de Propriedade: O arquivo/diretório pertence a um usuário ou grupo diferente
- Restrições de Travessia de Caminho: A configuração do SFTP pode restringir os usuários a determinados diretórios
Vamos tornar um de nossos arquivos de teste acessível ao nosso usuário SFTP:
## Create a directory that can be accessed by others
mkdir -p /tmp/shared
echo "This is a shared file for SFTP testing" > /tmp/shared/shared_file.txt
chmod 777 /tmp/shared
chmod 666 /tmp/shared/shared_file.txt
Agora, reconecte-se ao SFTP e tente acessar este arquivo:
sftp sftpuser@localhost
Após a conexão, tente:
sftp> get /tmp/shared/shared_file.txt
Fetching /tmp/shared/shared_file.txt to shared_file.txt
/tmp/shared/shared_file.txt 100% 36 1.0KB/s 00:00
Isso deve funcionar porque demos a todos permissões de leitura/escrita para o diretório e o arquivo.
Saia da sessão SFTP novamente:
sftp> exit
Usando SFTP com Modo de Depuração
Para obter mais informações sobre erros de permissão, você pode usar o SFTP no modo de depuração:
sftp -v sftpuser@localhost
A saída detalhada mostrará informações detalhadas sobre a conexão e quaisquer erros que ocorram:
debug1: Sending subsystem: sftp
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 2412, received 2876 bytes, in 0.1 seconds
Bytes per second: sent 30074.7, received 35857.2
debug1: Exit status 0
Resolvendo Erros de Permissão Negada no SFTP
Agora que entendemos como as permissões afetam o acesso SFTP, vamos aprender como resolver erros comuns de permissão negada.
Solução 1: Ajustando as Permissões de Arquivos e Diretórios
A solução mais direta para problemas de permissão é ajustar as permissões de arquivos e diretórios. Vamos criar um novo caso de teste:
## Create a new test file with restrictive permissions
echo "This file has restricted permissions" > ~/project/restricted_access.txt
chmod 600 ~/project/restricted_access.txt
Verifique as permissões atuais:
ls -l ~/project/restricted_access.txt
Saída:
-rw------- 1 labex labex 35 Sep 28 11:05 /home/labex/project/restricted_access.txt
Agora, vamos tornar este arquivo acessível a outros alterando suas permissões:
chmod 644 ~/project/restricted_access.txt
ls -l ~/project/restricted_access.txt
Saída:
-rw-r--r-- 1 labex labex 35 Sep 28 11:05 /home/labex/project/restricted_access.txt
Com essas permissões (644), o proprietário do arquivo (labex) pode ler e escrever no arquivo, enquanto os membros do grupo e outros só podem lê-lo.
Solução 2: Alterando a Propriedade do Arquivo
Outra solução é alterar a propriedade dos arquivos para corresponder ao usuário SFTP. Vamos criar outro arquivo de teste:
echo "This file will be owned by sftpuser" > ~/project/ownership_test.txt
Agora, vamos alterar a propriedade para nosso usuário SFTP:
sudo chown sftpuser:sftpuser ~/project/ownership_test.txt
ls -l ~/project/ownership_test.txt
Saída:
-rw-rw-r-- 1 sftpuser sftpuser 36 Sep 28 11:10 /home/labex/project/ownership_test.txt
Agora, o arquivo é de propriedade do sftpuser, que pode ler e escrever nele.
Solução 3: Criando um Diretório Compartilhado
Uma solução comum para o compartilhamento de arquivos SFTP é criar um diretório com as permissões apropriadas que vários usuários podem acessar:
## Create a new shared directory with appropriate permissions
mkdir -p /tmp/sftp_shared
sudo chown labex:labex /tmp/sftp_shared
chmod 755 /tmp/sftp_shared
## Create a subdirectory for uploads that's writable by everyone
mkdir -p /tmp/sftp_shared/uploads
chmod 777 /tmp/sftp_shared/uploads
## Create a sample file in the shared directory
echo "This file is in the shared SFTP directory" > /tmp/sftp_shared/sample.txt
chmod 644 /tmp/sftp_shared/sample.txt
Vamos verificar nossa configuração:
ls -la /tmp/sftp_shared/
Saída:
total 12
drwxr-xr-x 3 labex labex 4096 Sep 28 11:15 .
drwxrwxrwt 4 root root 4096 Sep 28 11:15 ..
-rw-r--r-- 1 labex labex 39 Sep 28 11:15 sample.txt
drwxrwxrwx 2 labex labex 4096 Sep 28 11:15 uploads
Com esta configuração:
- O diretório principal é legível e executável por todos, mas somente gravável pelo proprietário
- O subdiretório de uploads é gravável por todos (adequado para uploads SFTP)
- O arquivo sample.txt é legível por todos, mas somente gravável pelo proprietário
Esta configuração permite que o usuário SFTP:
- Navegue para o diretório compartilhado
- Leia o arquivo de exemplo
- Carregue arquivos no diretório de uploads
Solução 4: Usando ACLs para um Controle Mais Granular
Listas de Controle de Acesso (ACLs) fornecem um gerenciamento de permissões mais detalhado. Vamos instalar o pacote necessário e usar ACLs:
sudo apt install -y acl
Agora, vamos criar um arquivo e definir permissões específicas usando ACLs:
echo "This file uses ACLs for permissions" > ~/project/acl_test.txt
## Set basic permissions
chmod 640 ~/project/acl_test.txt
## Add ACL permission for sftpuser
sudo setfacl -m u:sftpuser:r ~/project/acl_test.txt
## View the ACL settings
getfacl ~/project/acl_test.txt
Saída:
## file: /home/labex/project/acl_test.txt
## owner: labex
## group: labex
user::rw-
user:sftpuser:r--
group::r--
mask::r--
other::---
Esta configuração de ACL permite:
- O proprietário do arquivo (labex) ler e escrever
- O sftpuser ler o arquivo
- O grupo ler o arquivo
- Outros não têm acesso
Melhores Práticas para Gerenciamento de Permissões SFTP
Nesta etapa final, abordaremos algumas melhores práticas para gerenciar permissões SFTP e solucionar problemas de permissão de forma eficaz.
Criando um Grupo de Usuários SFTP Dedicado
É uma boa prática criar um grupo dedicado para usuários SFTP:
sudo groupadd sftp_users
sudo usermod -a -G sftp_users sftpuser
Verifique se o usuário foi adicionado ao grupo:
groups sftpuser
Saída:
sftpuser : sftpuser sftp_users
Configurando um Diretório Gerenciado por Grupo
Agora, vamos criar um diretório que é gerenciado pelo grupo sftp_users:
## Create a new directory for the SFTP group
sudo mkdir -p /tmp/sftp_group_shared
sudo chown labex:sftp_users /tmp/sftp_group_shared
sudo chmod 770 /tmp/sftp_group_shared
## Set the SGID bit to ensure new files inherit the group
sudo chmod g+s /tmp/sftp_group_shared
## Create a test file in this directory
echo "This file is in the SFTP group directory" > /tmp/sftp_group_shared/group_file.txt
Vamos verificar as permissões:
ls -la /tmp/sftp_group_shared/
Saída:
total 12
drwxrws--- 2 labex sftp_users 4096 Sep 28 11:25 .
drwxrwxrwt 5 root root 4096 Sep 28 11:25 ..
-rw-rw-r-- 1 labex sftp_users 42 Sep 28 11:25 group_file.txt
O s nas permissões do grupo indica que o bit SGID está definido, o que significa que novos arquivos criados neste diretório herdarão o grupo sftp_users.
Comandos Comuns de Solução de Problemas para Permissões SFTP
Ao solucionar problemas de permissão SFTP, esses comandos são particularmente úteis:
- Verifique as permissões do arquivo:
ls -la /path/to/file
- Verifique os grupos de usuários:
groups username
- Verifique os IDs de usuário e grupo atuais:
id
- Visualize os logs do servidor SFTP:
## In a production system, you would check system logs
## For our lab environment, we can simulate viewing logs
grep "sshd" /var/log/auth.log | tail
- Teste o acesso ao arquivo a partir da linha de comando:
sudo -u sftpuser cat /path/to/file
Árvore de Decisão de Erro de Permissão Negada
Ao encontrar um erro de permissão negada no SFTP, siga esta árvore de decisão:
O usuário SFTP pode acessar o diretório pai?
- Verifique com:
sudo -u sftpuser ls -la /path/to/directory/ - Corrija com:
chmod o+x /path/to/directory/
- Verifique com:
O usuário SFTP pode ler o arquivo?
- Verifique com:
sudo -u sftpuser cat /path/to/file - Corrija com:
chmod o+r /path/to/fileousetfacl -m u:sftpuser:r /path/to/file
- Verifique com:
O usuário SFTP pode escrever no arquivo ou diretório?
- Verifique com:
sudo -u sftpuser touch /path/to/directory/test_file - Corrija com:
chmod o+w /path/to/directory/ousetfacl -m u:sftpuser:w /path/to/directory/
- Verifique com:
Criando um Script de Teste para Permissões SFTP
Vamos criar um script de teste simples que verifica se o usuário SFTP pode acessar arquivos e diretórios específicos:
cat > ~/project/check_sftp_permissions.sh << 'EOF'
#!/bin/bash
USER="sftpuser"
echo "Testing SFTP permissions for user: $USER"
echo "-------------------------------------------"
## Test directories
for DIR in /tmp/shared /tmp/sftp_shared /tmp/sftp_group_shared /home/labex/project; do
echo -n "Can $USER access $DIR? "
if sudo -u $USER ls -la $DIR &>/dev/null; then
echo "YES"
else
echo "NO"
fi
done
## Test files
for FILE in /tmp/shared/shared_file.txt /tmp/sftp_shared/sample.txt /home/labex/project/testfile.txt; do
echo -n "Can $USER read $FILE? "
if sudo -u $USER cat $FILE &>/dev/null; then
echo "YES"
else
echo "NO"
fi
done
echo "-------------------------------------------"
echo "Testing complete!"
EOF
chmod +x ~/project/check_sftp_permissions.sh
Agora, execute o script de teste:
sudo ~/project/check_sftp_permissions.sh
Você deve ver a saída indicando quais diretórios e arquivos o usuário SFTP pode acessar. Isso ajuda a identificar problemas de permissão rapidamente.
Dicas Finais para Gerenciar Permissões SFTP
- Use o princípio do menor privilégio: Conceda apenas as permissões mínimas necessárias
- Audite regularmente as permissões: Use ferramentas como
findpara identificar arquivos com permissões inadequadas - Documente sua estrutura de permissões: Acompanhe quais usuários e grupos têm acesso a quais diretórios
- Considere o uso de chroot jails SFTP: Para ambientes de produção, restrinja os usuários a diretórios específicos
- Teste da perspectiva do usuário: Sempre verifique as permissões testando como o usuário SFTP real
Resumo
Neste tutorial, você aprendeu como configurar um servidor SFTP, criar usuários com as permissões apropriadas e solucionar erros comuns de permissão negada. Você adquiriu experiência prática com:
- Instalação e configuração de um servidor SFTP no Ubuntu
- Compreensão das permissões de arquivos Linux e seu impacto no acesso SFTP
- Experiência e diagnóstico de erros de permissão negada
- Implementação de várias soluções para resolver problemas de permissão
- Aplicação das melhores práticas para o gerenciamento de permissões SFTP
Essas habilidades o ajudarão a gerenciar transferências de arquivos de forma eficaz em um ambiente seguro, minimizando problemas relacionados a permissões. Lembre-se de que o gerenciamento adequado de permissões é essencial para manter um servidor SFTP seguro e funcional, equilibrando os requisitos de segurança com as necessidades de acesso do usuário.



