Como Usar chmod e chown - Guia de Permissões de Arquivos no Linux
O que você vai conseguir fazer
- Ler a saída do `ls -l` e achar a causa do Permission denied
- Escolher entre chmod e chown para a correção certa
- Explicar por que o sudo é preciso em vez de usá-lo às cegas
Pré-requisitos (leia estes primeiro)
O que você vai aprender:
- Diagnosticar problemas lendo a saída do
ls -l. - Escolher entre chmod e chown e aplicar a correção certa.
- Largar o hábito de usar "sudo para tudo".
Público-alvo: Iniciantes começando a trabalhar com servidores Ubuntu.
Nota: Algumas operações exigem sudo.
Termo-chave: PermissãoAs regras de acesso de leitura / escrita / execução definidas em um arquivo ou diretório. é a regra que diz quem pode ler, escrever ou executar um arquivo. Também se diz "direito de acesso". Neste artigo usamos sempre a palavra permissão.
rootA conta de administrador especial que pode fazer qualquer coisa no sistema. é a conta de administrador que pode fazer tudo. sudo quer dizer "execute só este comando como root". Um grupo é um conjunto de usuários com um nome.
O Padrão de Decisão (TL;DR)
- Veja o proprietário e as permissões com
ls -l. - Decida se você é o proprietário, o grupo ou outros.
- Escolha chmod, chown ou sudo.
Fluxo de Decisão (Referência Rápida)
Conclusão: No Permission denied, leia o
ls -lprimeiro. Depois escolha chmod, chown ou sudo.
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órioUm local que organiza arquivos. É a mesma ideia da "pasta" do Windows ou macOS. (você é o dono) | ls -ld diretorio |
Falta permissão x | chmod u+x diretorio |
| Não consegue entrar no diretório (dono é outro ou root) | ls -ld diretorio |
Você não é o dono nem está no grupo | Entre no grupo com sudo usermod -aG nomedogrupo $USER e faça login de novo. Só para ver o conteúdo, use sudo ls diretorio |
| Quer editar arquivo de outro usuário | ls -l arquivo |
Proprietário diferente | Tente antes sudo -u proprietario editor. Use sudo chown $USER arquivo só quando puder explicar por que a propriedade precisa mudar ($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) |
O -d do ls -ld mostra o próprio diretório. Sem ele você recebe a lista do que está dentro.
Passos de Verificação Importantes
- Veja seu nome de usuário com
whoami. - Veja seus grupos com
groups. - Veja proprietário, grupo e permissões com
ls -l. - Decida se você é o proprietário, o grupo ou outros.
Primeiro, Aprenda a Ler o ls -l (O Mais Importante)
Conclusão: 90% dos problemas de permissão mostram a 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, não vai mais chutar com sudo.
$ ls -l sample.txt
-rw-r--r-- 1 user user 1234 Dec 17 12:00 sample.txt
Ordem de Leitura (Sempre Siga Esta)
- Leia o primeiro caractere. O
-é arquivo. Odé diretório. - Leia as permissões, como
rw-r--r--. - Leia o proprietário, como
user. - Leia o grupo, como
user.
Por que esta ordem?: Um erro de permissão é sempre sobre quem pode fazer o quê. Esta ordem separa o problema nessas duas partes.
Entenda o rwx como "Critério de Decisão"
Conclusão: O que você pode fazer depende do seu papel. Use esse papel como critério.
A letra r é ler. A letra w é escrever. A letra x é executar. Essas três letras se repetem três vezes: owner, group e other.
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 |
Figura 1: o Linux verifica owner, depois group, depois other, e aplica apenas o primeiro conjunto de rwx que corresponder. Se você corresponder como owner, os bits de group e other nem chegam a ser consultados. O diagrama mostra qual conjunto se aplica, e não se esse conjunto permite algo — se o conjunto aplicado for ---, você não pode fazer nada.
Exemplo de Decisão
- Se você é o proprietário, pode escrever.
- Se você é grupo ou outros, só pode ler.
Para verificar seu papel, 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. Use números só quando puder explicá-los.
Uso Básico
$ chmod u+w sample.txt
O nome chmod vem de change mode. Ele muda as permissões de um arquivo.
Significado:
ué o proprietário.wé a escrita.- O sinal
+adiciona essa permissão.
Por que a notação simbólica é mais segura: Ela mostra o que mudou. chmod u+w deixa a intenção clara, mais do que chmod 644. Assim fica fácil notar um erro na revisão.
Acidente Comum
$ chmod 777 sample.txt
Problemas:
- Muita gente executa sem entender.
- Abre muito mais acesso do que o preciso.
A notação numérica pode esperar. Comece com a simbólica.
O que acontece se errar: o chmod nunca muda o conteúdo do arquivo. Ainda assim, não existe um comando para "desfazer um passo". Guarde a saída do ls -l antes de rodar e restaure exatamente aquele estado se precisar voltar.
Como testar com segurança: pratique dentro do seu próprio diretório, como ~/perm-test. Os arquivos do sistema ficam intactos.
Por que chmod 777 é perigoso?
777 significa "qualquer um pode ler, escrever e executar".
Incidente do Mundo Real
A opção -R aplica a mesma configuração a tudo o que está dentro do diretório. Um servidor web em produção tinha /var/www/html como chmod -R 777. Foi isso que aconteceu.
- Um atacante enviou um arquivo PHP.
- Esse PHP rodou e o servidor foi invadido.
- Dados de clientes vazaram e o serviço caiu.
Por Que o Ataque Teve Sucesso
O 777 dá w (escrita) e x (execução) a other, ou seja, a todos. Assim dá para colocar um arquivo pelo servidor web e executá-lo.
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: Sem o
xno diretório, ocdnão funciona. Veja comls -lde adicione só o mínimo.
drwxr-xr-x 2 user user 4096 Dec 17 12:10 mydir
Num diretório, o x decide se você pode entrar. Ou seja, decide se o cd funciona. Só o r não basta. Você vê a lista de nomes, mas não entra.
Problema Comum
Às vezes o ls funciona e o cd falha. Nesse caso falta a permissão x no diretório.
Correção: use chmod u+x mydir.
chown: Mude a Propriedade com Cuidado
Conclusão: Mude a propriedade só quando souber explicar o motivo. O
-Rpode derrubar um serviço.
Uso Básico
$ sudo chown user:user sample.txt
O nome chown vem de change owner. Ele muda o dono de um arquivo.
Por que o sudo é necessário: mudar a propriedade é uma tarefa de administração. Seria perigoso se qualquer usuário pudesse tomar os arquivos dos outros.
Acidentes Comuns
- Rodar
chown -R myuserem tudo dentro de/var/wwwpara o servidor web. - Mudar para o root e depois não conseguir reverter.
Mentalidade: sempre pergunte por que você precisa mudar a propriedade.
O que acontece se errar: o chown não tem comando de desfazer. Para restaurar o dono antigo, você precisa saber o nome dele.
Como testar com segurança: guarde a saída do ls -l antes de rodar o chown. Com o nome anotado, o mesmo comando devolve tudo.
Como o chown -R quebrou a produção (com recuperação)
O Que Aconteceu
$ sudo chown -R myuser:myuser /var/www/html
Alguém quis editar os próprios arquivos. Foi isso que aconteceu.
- Apache e Nginx rodam como usuário
www-data. - Depois da mudança, o servidor web não conseguia ler os arquivos.
- O site passou a exibir 403 Forbidden.
Recuperação
$ sudo chown -R www-data:www-data /var/www/html
Abordagem Correta
Se você só quer editar arquivos, não precisa mudar a propriedade. Escolha uma destas opções.
- Adicione-se ao grupo
www-data. - Ou edite com
sudo -u www-data vim file.php.
sudo Não é Mágica
Conclusão: o sudo esconde a causa real. Diagnostique com
ls -le use sudo só quando puder explicar.
O sudo apenas executa algo como root. Ele pode esconder um problema no desenho 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 explicar a causa.
Abordagem Recomendada
- Primeiro diagnostique com
ls -l. - Use sudo só quando for preciso.
- Saiba dizer 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 você tenta editar normalmente com vim config.yaml e vê isto.
E45: 'readonly' option is set (add ! to override)
Causa: abrir com sudo deixou o arquivo com dono root. O arquivo .swp também pode ter sido criado como root.
Solução
- Use
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 ~
Depois disso você não consegue logar. O .bashrc fica ilegível e as chaves SSH param de funcionar.
Recuperação: a partir de outra sessão root, rode chown -R user:user /home/user.
Solução de Problemas Comuns de Permission Denied
Conclusão: leia o
ls -lpara achar o dono e as permissões. Decida seu papel e aplique a correção.
Caso 1: Não Consegue Escrever no Arquivo
O símbolo >> acrescenta texto ao final de um arquivo. Ou seja, o comando abaixo é uma operação de escrita.
$ 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á no papel other, então recebe
r--, ou seja, somente leitura.
Equívoco Comum
"Basta usar sudo" está meio certo e meio errado. O /etc/hosts é um arquivo de sistema e só o root escreve nele de propósito. Editar com sudo é a correção certa. Ainda assim, entenda por que ele é protegido antes de fazer isso.
Correção
$ sudoedit /etc/hosts
Se você só quer acrescentar, isto também funciona.
$ echo "test" | sudo tee -a /etc/hosts
Por que sudo echo "test" >> /etc/hosts falha: quem trata o >> é o shellUm programa interativo que interpreta os comandos digitados e os executa., e ele roda fora do sudo. Só o echo recebe root, então a escrita continua com o seu usuário comum e é recusada.
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--, então falta o bit de execuçãox. - Você é o dono e mesmo assim não consegue executar.
Correção
$ chmod u+x deploy.sh $ ./deploy.sh
Por que isso é seguro: o u+x dá o bit de execução só ao dono. Os outros usuários não são afetados, então a 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---, então other não recebe nada. - Você não é
www-datae não está no grupoadm.
Opções de Correção
- O
sudo cdnão funciona, porque cd é built-in do shell. Usesudo ls /var/log/nginxpara ver o conteúdo. - Adicione-se ao grupo
admcomsudo usermod -aG adm $USERe faça login de novo. Os dados de grupo são lidos no login.
Checklist de Diagnóstico de Permissões
Conclusão: confirme seu papel com
whoamiegroups. Depois leia ols -le escolha a correção.
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. - Decidiu se você é proprietário, grupo ou outros.
- Conferiu se a permissão necessária (r/w/x) está dada ao seu papel.
Passo 3: Escolha o Método de Resolução
- Se falta permissão, adicione com
chmod. - Se o dono é outro, mude com
chown, que exige sudo. - Se é arquivo de sistema, use
sudoeditousudo.
Passo 4: Verifique as Mudanças
- Confirmou a mudança com
ls -lde novo. - Verificou que a operação desejada agora funciona.
- Confirmou que nenhuma permissão excessiva, como 777, foi dada.
Exercício Prático (5 min)
Conclusão: tire a permissão de escrita, veja o erro e recupere. Assim a correção fica na memória.
Faça isso no seu diretório de prática. Os arquivos do sistema não são tocados, então nada quebra se você errar.
$ 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 ler o
ls -le dizer que é o dono, mas falta ow.
Recuperação:
$ chmod u+w a.txt $ echo "test" > a.txt $ cat a.txt
test