Como Usar chmod e chown - Guia de Permissões de Arquivos no Linux
O que você vai aprender:
- Diagnosticar problemas lendo a saída do
ls -l - Escolher entre chmod / chown e aplicar a correção certa
- Largar o hábito de usar "sudo para tudo" cegamente
Público-alvo: Iniciantes começando a trabalhar com servidores Ubuntu
Nota: Algumas operações exigem sudo
O Padrão de Decisão (TL;DR)
- Verifique o proprietário/permissões com
ls -l→ 2) Determine se você é proprietário/grupo/outros → 3) Escolha chmod, chown ou sudo
Fluxo de Decisão (Referência Rápida)
Conclusão: No Permission denied, verifique o ls -l e escolha chmod, chown ou sudo conforme o caso.
Quando você encontrar "Permission denied", consulte esta tabela de cima para baixo.
| Sintoma | Comando de Verificação | Causa | Solução |
|---|---|---|---|
| Não consegue escrever no arquivo | ls -l arquivo |
Falta permissão w | chmod u+w arquivo |
| Não consegue executar o script | ls -l script |
Falta permissão x | chmod u+x script |
| Não consegue entrar no diretório | ls -ld diretorio |
Falta permissão x | chmod u+x diretorio |
| Quer modificar arquivo de outro usuário | ls -l arquivo |
Proprietário diferente | sudo chown $USER arquivo ($USER expande para o nome do usuário atual) |
| Quer editar arquivo do sistema | ls -l /etc/arquivo |
Arquivo de propriedade do root | sudoedit /etc/arquivo (mais seguro que sudo vim — a propriedade não muda durante a edição) |
Passos de Verificação Importantes
- Verifique seu nome de usuário com
whoami - Verifique seus grupos com
groups - Verifique proprietário, grupo e permissões com
ls -l - Determine se você é proprietário / grupo / outros
Primeiro, Aprenda a Ler o ls -l (O Mais Importante)
Conclusão: 90% dos problemas de permissão mostram sua causa no ls -l — aprenda a lê-lo primeiro.
90% dos problemas de permissão podem ser diagnosticados com ls -l. Quando você souber ler isso, poderá largar o "uso cego do sudo".
$ ls -l sample.txt
-rw-r--r-- 1 user user 1234 Dec 17 12:00 sample.txt
Ordem de Leitura (Sempre Siga Esta)
- Primeiro caractere:
-/d(arquivo ou diretório) - Permissões:
rw-r--r-- - Proprietário:
user - Grupo:
user
Por que esta ordem?: Erros de permissão dizem respeito à combinação de "quem" pode fazer "o quê". Seguir esta ordem permite diagnosticar a causa de forma lógica.
Entenda o rwx como "Critério de Decisão"
Conclusão: Leia as permissões de proprietário/grupo/outros para determinar o que cada papel pode fazer.
Exemplo: rw-r--r--
| Alvo | Permissões | O Que Você Pode Fazer |
|---|---|---|
| owner | rw- | Ler/escrever OK, executar NG |
| group | r-- | Somente leitura |
| other | r-- | Somente leitura |
Exemplo de Decisão
- Se você é o proprietário → pode escrever
- Se é grupo/outros → só pode ler, não pode escrever
Para verificar sua posição, use whoami e groups.
chmod: Comece com a Notação Simbólica (Prevenção de Acidentes)
Conclusão: Use a notação simbólica como u+w por padrão; numérica só quando puder explicá-la.
Uso Básico
$ chmod u+w sample.txt
Significado:
u(owner / proprietário)w(write / escrita)- Adicionar permissão
Por que a notação simbólica é mais segura: Ela mostra claramente "o que mudou". chmod u+w é mais explícito que chmod 644, facilitando detectar erros durante a revisão de código.
Acidente Comum
$ chmod 777 sample.txt
Problemas:
- Muitas vezes executado sem entender
- Abre as permissões desnecessariamente
→ A notação numérica pode esperar. Comece com a notação simbólica.
Por que chmod 777 é perigoso?
777 significa "qualquer um pode ler, escrever e executar".
Incidente do Mundo Real
Um servidor web em produção tinha /var/www/html configurado como chmod -R 777. Resultado:
- Um atacante enviou um arquivo PHP
- Esse PHP foi executado, comprometendo o servidor
- Dados de clientes vazaram, o serviço caiu
Por Que o Ataque Teve Sucesso
777 = dar w (escrita) e x (execução) a other (todos). Arquivos podiam ser colocados pelo servidor web e executados.
Alternativas Seguras
Como ler a notação numérica: r=4, w=2, x=1 somados. Por exemplo, 755 = rwx(7) + r-x(5) + r-x(5) = o proprietário tem todas as permissões, grupo e outros só podem ler e executar.
| Alvo | Recomendado | Significado da Permissão | Motivo |
|---|---|---|---|
| Diretórios | 755 | rwxr-xr-x | Só o proprietário escreve |
| Arquivos | 644 | rw-r--r-- | Só o proprietário escreve |
| Chaves privadas | 600 | rw------- | Só o proprietário acessa |
Cuidado com a Permissão de Execução em Diretórios
Conclusão: O x em diretório significa permissão de entrada; sem x o cd é bloqueado — adicione só o mínimo.
drwxr-xr-x 2 user user 4096 Dec 17 12:10 mydir
- O
xdo diretório: determina se você pode entrar (se consegue fazer cd nele) - Apenas
rnão basta para ocd(você vê a lista de arquivos mas não consegue entrar)
Problema Comum
Consegue ls mas não consegue cd
→ Provavelmente falta a permissão x no diretório
Correção: chmod u+x mydir
chown: Mude a Propriedade com Cuidado
Conclusão: Mude a propriedade só quando claramente necessário; -R pode quebrar contas de serviço.
Uso Básico
$ sudo chown user:user sample.txt
Por que o sudo é necessário: Mudar a propriedade é uma operação de administração do sistema. Seria perigoso se qualquer usuário pudesse reivindicar a propriedade dos arquivos de outros.
Acidentes Comuns
chown -R myuserem tudo dentro de/var/www→ O servidor web para de funcionar- Mudar para a propriedade do root e não conseguir reverter
Mentalidade: Sempre pergunte "Por que preciso mudar a propriedade?"
Como o chown -R quebrou a produção (com recuperação)
O Que Aconteceu
$ sudo chown -R myuser:myuser /var/www/html
Quis "editar meus próprios arquivos". Resultado:
- Apache/Nginx roda como usuário
www-data - Após mudar a propriedade, o servidor web não conseguia ler os arquivos
- O site exibiu 403 Forbidden
Recuperação
$ sudo chown -R www-data:www-data /var/www/html
Abordagem Correta
Se você quer editar arquivos, em vez de mudar a propriedade:
- Adicione-se ao grupo
www-data - Ou use
sudo -u www-data vim file.phppara editar
sudo Não é Mágica
Conclusão: sudo mascara a causa raiz; diagnostique com ls -l primeiro e use sudo só se necessário.
- sudo = simplesmente executa como root
- Pode mascarar problemas subjacentes no design das permissões
Antipadrão
$ sudo chmod 777 ...
"Recebi Permission denied então usei sudo" "Ainda não funcionou então usei 777". Esse é o pior padrão. Cria um buraco de segurança sem entender a causa.
Abordagem Recomendada
- Primeiro diagnostique com
ls -l - Use sudo só quando necessário
- Saiba explicar por que o sudo é preciso antes de usá-lo
Incidentes reais por abuso de sudo
Padrão de Incidente 1: Não consegue mais editar o arquivo
$ sudo vim config.yaml
Depois, ao tentar editar normalmente com vim config.yaml:
E45: 'readonly' option is set (add ! to override)
Causa: Abrir com sudo deixou o arquivo com propriedade do root (ou o arquivo .swp foi criado como root)
Solução
sudo chown $USER:$USER config.yamlpara restaurar a propriedade- Ou use
sudoedit config.yaml(sudo -e) desde o início
Padrão de Incidente 2: O diretório home fica com propriedade do root
$ sudo chown -R root:root ~
Resultado: Não consegue logar, .bashrc ilegível, chaves SSH não funcionam.
Recuperação: A partir de outra sessão root: chown -R user:user /home/user
Solução de Problemas Comuns de Permission Denied
Conclusão: Verifique o ls -l para identificar seu papel e a propriedade, depois aplique a correção certa.
Caso 1: Não Consegue Escrever no Arquivo
$ echo "test" >> /etc/hosts
-bash: /etc/hosts: Permission denied
Diagnóstico
$ ls -l /etc/hosts
-rw-r--r-- 1 root root 221 Dec 17 10:00 /etc/hosts
Causa
- O proprietário é
root - Você está na posição
other→r--(somente leitura)
Equívoco Comum
"Basta usar sudo" → Meio certo, meio errado
/etc/hosts é um arquivo de sistema, intencionalmente gravável apenas pelo root. Usar sudo para editar está correto, mas entenda "por que ele é protegido" antes de fazê-lo.
Caso 2: Não Consegue Executar o Script
$ ./deploy.sh
-bash: ./deploy.sh: Permission denied
Diagnóstico
$ ls -l deploy.sh
-rw-r--r-- 1 user user 1234 Dec 17 11:00 deploy.sh
Causa
- As permissões são
rw-r--r--→ sem permissão de execução (x) - Você é o proprietário mas ainda assim não consegue executar
Correção
$ chmod u+x deploy.sh $ ./deploy.sh
Por que isso é seguro: u+x concede a permissão de execução apenas ao proprietário. Não afeta outros usuários, então é uma mudança mínima.
Caso 3: Não Consegue Entrar no Diretório
$ cd /var/log/nginx
-bash: cd: /var/log/nginx: Permission denied
Diagnóstico
$ ls -ld /var/log/nginx
drwxr-x--- 2 www-data adm 4096 Dec 17 10:00 /var/log/nginx
Causa
- As permissões são
rwxr-x---→ nada permitido para other - Você não é
www-datanem está no grupoadm
Opções de Correção
sudo cdnão funciona (cd é built-in do shell) → Usesudo ls /var/log/nginxpara ver o conteúdo- Adicione-se ao grupo
adm:sudo usermod -aG adm $USER(exige novo login — as informações de grupo são carregadas no momento do login)
Checklist de Diagnóstico de Permissões
Conclusão: Confirme sua identidade com whoami e groups, depois verifique o ls -l para escolher a correção certa.
Quando você encontrar "Permission denied", verifique o seguinte em ordem.
Passo 1: Verifique Sua Identidade
- Verificou seu nome de usuário com
whoami - Verificou seus grupos com
groups
Passo 2: Verifique o Estado do Arquivo/Diretório
- Verificou permissões e proprietário com
ls -l arquivo - Determinou se você é proprietário / grupo / outros
- Verificou se a permissão necessária (r/w/x) está concedida para sua posição
Passo 3: Escolha o Método de Resolução
- Permissão insuficiente → Adicione com
chmod - Proprietário diferente → Mude com
chown(exige sudo) - Arquivo de sistema → Use
sudoeditousudo
Passo 4: Verifique as Mudanças
- Confirmou as mudanças com
ls -lnovamente - Verificou que a operação pretendida tem sucesso
- Confirmou que nenhuma permissão excessiva (como 777) foi concedida
Exercício Prático (5 min)
Conclusão: Remova a permissão de escrita, encontre o erro e depois recupere para aprender a correção.
$ mkdir ~/perm-test $ cd ~/perm-test $ touch a.txt $ ls -l $ chmod u-w a.txt $ echo "test" > a.txt
Resultado Esperado:
- Você recebe "Permission denied"
- Você consegue explicar pelo
ls -lque "sou o proprietário mas falta a permissão w"
Recuperação:
$ chmod u+w a.txt $ echo "test" > a.txt $ cat a.txt
test