Como Usar chmod e chown - Guia de Permissões de Arquivos no Linux

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)

  1. Veja o proprietário e as permissões com ls -l.
  2. Decida se você é o proprietário, o grupo ou outros.
  3. Escolha chmod, chown ou sudo.

Fluxo de Decisão (Referência Rápida)

Conclusão: No Permission denied, leia o ls -l primeiro. 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

  1. Veja seu nome de usuário com whoami.
  2. Veja seus grupos com groups.
  3. Veja proprietário, grupo e permissões com ls -l.
  4. 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)

  1. Leia o primeiro caractere. O - é arquivo. O d é diretório.
  2. Leia as permissões, como rw-r--r--.
  3. Leia o proprietário, como user.
  4. 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

Diagrama de decisão: o sistema verifica se o usuário é o owner, depois se ele pertence ao group e, caso contrário, recai sobre other

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.

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 777w (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 x no diretório, o cd não funciona. Veja com ls -ld e 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 -R pode 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.

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 -l e use sudo só quando puder explicar.

O sudo apenas executa algo como root. Ele pode esconder um problema no desenho das permissões.

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.yaml para 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 -l para 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ção x.
  • 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-data e não está no grupo adm.

Opções de Correção

  1. O sudo cd não funciona, porque cd é built-in do shell. Use sudo ls /var/log/nginx para ver o conteúdo.
  2. Adicione-se ao grupo adm com sudo usermod -aG adm $USER e 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 whoami e groups. Depois leia o ls -l e 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 sudoedit ou sudo.

Passo 4: Verifique as Mudanças

  • Confirmou a mudança com ls -l de 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 -l e dizer que é o dono, mas falta o w.

Recuperação:

$ chmod u+w a.txt
$ echo "test" > a.txt
$ cat a.txt
test

Próxima Leitura

Conclusão: pratique os comandos de permissão no terminal virtual para criar o hábito.

Depois de aprender o "padrão de decisão" deste artigo, pratique no Penguin Gym Linux.

Referência Rápida de Comandos

Propósito Comando Exemplo
Verificar permissões e proprietário ls -l ls -l sample.txt
Verificar seu nome de usuário whoami whoami
Verificar grupos groups groups
Adicionar permissão de escrita chmod u+w chmod u+w sample.txt
Adicionar permissão de execução chmod u+x chmod u+x script.sh
Mudar a propriedade sudo chown sudo chown user:user file.txt
Editar arquivo de sistema sudoedit sudoedit /etc/hosts

Três Pontos-chave para Lembrar

  1. Comece com ls -l. Ele mostra a causa da maioria dos problemas.
  2. Use a notação simbólica. O chmod u+w é claro e seguro.
  3. Trate o sudo como último recurso. Entenda a causa antes de usar.