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