Ubuntu chmod
O chmod (de change mode, "mudar o modo") muda as permissões de um arquivo ou pasta: quem pode ler, escrever e executar. É o comando que você usa para tornar um script executável ou para proteger um arquivo com senhas.
- A ler
-rwxr-x---posição por posição. - As duas formas de usar o chmod: simbólica (
u+x) e octal (755), com a conta explicada. - A mudar pastas inteiras sem tornar todos os arquivos executáveis.
- A resolver o "Permissão negada" ao rodar
./script.sh.
O conceito de permissões está em Entendendo Permissões. Aqui vamos à prática. O simulador do guia não tem o chmod, mas tem o ls -l, então você pode praticar a leitura.
Lendo as permissões, posição por posição
O ls -l mostra as permissões nos 10 primeiros caracteres da linha:
$ ls -l backup.sh -rwxr-x--- 1 ana ana 45 Oct 15 09:15 backup.sh
- -
- Tipo:
-arquivo comum,dpasta,llink. - rwx
- Posições 2 a 4: o que o dono (ana) pode fazer. Aqui, tudo.
- r-x
- Posições 5 a 7: o que o grupo (ana) pode. Ler e executar; o
-no meio diz que não pode escrever. - ---
- Posições 8 a 10: o que os outros (todo o resto) podem. Nada.
Cada trio é sempre na mesma ordem: r (read, ler), w (write, escrever), x (execute, executar). Um - no lugar da letra significa "não pode".
Missão: rode ls -l Documentos/projetos. Qual arquivo é executável pelo dono? E qual é uma pasta? Depois execute o script digitando o caminho dele: Documentos/projetos/backup.sh.
Modo simbólico: quem, operação, permissão
No modo simbólico, você escreve a mudança com letras. Ele tem três partes:
- chmod
- O programa.
- u
- Quem:
udono (user),ggrupo,ooutros (others),atodos (all). - +
- Operação:
+dá,-tira,=define exatamente. - x
- Permissão:
r,we/oux. - backup.sh
- O arquivo.
Atenção: entre u, + e x não há espaço. O conjunto u+x é uma palavra só.
$ ls -l backup.sh -rw-rw-r-- 1 ana ana 45 Oct 15 09:15 backup.sh $ chmod u+x backup.sh $ ls -l backup.sh -rwxrw-r-- 1 ana ana 45 Oct 15 09:15 backup.sh « o dono ganhou o x
Mais exemplos, sempre olhando o antes e o depois:
$ chmod go-w backup.sh $ ls -l backup.sh -rwxr--r-- 1 ana ana 45 Oct 15 09:15 backup.sh « grupo perdeu o w $ chmod u=rw,go=r backup.sh $ ls -l backup.sh -rw-r--r-- 1 ana ana 45 Oct 15 09:15 backup.sh « "=" define exatamente; a vírgula separa as partes $ chmod +x backup.sh $ ls -l backup.sh -rwxr-xr-x 1 ana ana 45 Oct 15 09:15 backup.sh « sem "quem": vale para todos
| Comando | Efeito |
|---|---|
chmod u+x arq | Dono pode executar |
chmod +x arq | Todos podem executar (respeitando o umask) |
chmod go-rwx arq | Só o dono acessa |
chmod a+r arq | Todos podem ler |
chmod u=rw,go= arq | Dono lê e escreve; os outros, nada |
chmod g+w pasta | O grupo pode criar e apagar arquivos na pasta |
Modo octal: a conta 4 + 2 + 1
No modo octal, cada trio vira um número. Cada permissão tem um valor, e você soma os que quer dar:
| Permissão | Valor |
|---|---|
r ler | 4 |
w escrever | 2 |
x executar | 1 |
| nada | 0 |
Com isso, cada soma de 0 a 7 corresponde a uma combinação única:
| Número | Conta | Trio | Significa |
|---|---|---|---|
7 | 4+2+1 | rwx | Tudo |
6 | 4+2 | rw- | Ler e escrever |
5 | 4+1 | r-x | Ler e executar |
4 | 4 | r-- | Só ler |
0 | 0 | --- | Nada |
Três números, um para cada trio, na ordem dono, grupo, outros:
- chmod
- O programa.
- 7
- Dono: 4+2+1 =
rwx. - 5
- Grupo: 4+1 =
r-x. - 4
- Outros: 4 =
r--. - backup.sh
- O arquivo.
No comando, os três números ficam juntos: chmod 754 backup.sh.
$ chmod 754 backup.sh $ ls -l backup.sh -rwxr-xr-- 1 ana ana 45 Oct 15 09:15 backup.sh $ stat -c "%a %A %n" backup.sh 754 -rwxr-xr-- backup.sh « o stat mostra o número e as letras lado a lado
Os valores que você vai usar sempre
| Octal | Letras | Uso típico |
|---|---|---|
644 | rw-r--r-- | Arquivo comum: você edita, os outros só leem |
755 | rwxr-xr-x | Script ou programa; pasta pública |
600 | rw------- | Arquivo privado: chave SSH, senhas |
700 | rwx------ | Pasta privada, como ~/.ssh |
664 / 775 | rw-rw-r-- / rwxrwxr-x | Arquivos e pastas compartilhados com o grupo |
Simbólico ou octal?
| Situação | Melhor forma | Exemplo |
|---|---|---|
| Mudar uma coisa e manter o resto | Simbólico | chmod u+x script.sh |
| Deixar exatamente de um jeito | Octal | chmod 600 ~/.ssh/id_ed25519 |
| Seguir uma instrução da internet | Octal (é o mais comum) | chmod 644 index.html |
| Pastas e arquivos juntos | Simbólico com X | chmod -R u=rwX,go=rX site |
Ver o que mudou: -v e -c
Como quase todo comando, o chmod fica quieto quando dá certo. Para ele contar o que fez:
$ chmod -v 755 backup.sh mode of 'backup.sh' changed from 0754 (rwxr-xr--) to 0755 (rwxr-xr-x) $ chmod -v o+r backup.sh mode of 'backup.sh' retained as 0755 (rwxr-xr-x) « já tinha, nada mudou
A opção -c (de changes) mostra só quando houve mudança de verdade. É útil com -R, em pastas grandes. As mensagens do chmod aparecem em inglês no Ubuntu 26.04.
Pastas inteiras: -R e o X maiúsculo
A opção -R (de recursive) aplica a mudança na pasta e em tudo o que está dentro dela.
O problema: pastas precisam de x para que se possa entrar nelas, mas arquivos de texto não devem ser executáveis. O X maiúsculo resolve isso: ele dá o x só às pastas, e aos arquivos que já eram executáveis.
- chmod
- O programa.
- -R
- Em tudo dentro da pasta.
- u=rwX
- Dono: ler, escrever e, se for pasta, entrar.
- ,go=rX
- Grupo e outros: ler e, se for pasta, entrar.
- site
- A pasta.
$ chmod -R u=rwX,go=rX site $ ls -lR site site: total 4 drwxr-xr-x 2 ana ana 4096 Oct 15 10:30 css « pasta: ganhou x -rw-r--r-- 1 ana ana 0 Oct 15 10:30 index.html « arquivo: sem x site/css: total 0 -rw-r--r-- 1 ana ana 0 Oct 15 10:30 a.css
Outra forma, mais explícita, usa o find para tratar pastas e arquivos separadamente:
$ find site -type d -exec chmod 755 {} +
$ find site -type f -exec chmod 644 {} +
-R
Um chmod -R na pasta errada (como /, /etc ou a sua pasta pessoal inteira) pode quebrar o sistema ou o SSH, que exige permissões restritas em ~/.ssh. Confira o caminho duas vezes antes de apertar Enter.
Por que nunca usar 777
chmod 777 dá tudo a todos: qualquer usuário, ou programa invadido, pode alterar ou apagar o arquivo. Muitas respostas na internet sugerem 777 para "resolver" um Permissão negada. Isso tira o erro e abre um buraco de segurança.
Em vez disso, descubra quem precisa de acesso e dê só a ele: mude o dono com chown ou coloque a pessoa no grupo certo (Usuários e Grupos).
Permissões especiais
Às vezes aparece um quarto número na frente, como chmod 2775, ou letras diferentes no lugar do x:
| Nome | Octal | Aparece como | Efeito |
|---|---|---|---|
| setuid | 4000 | rwsr-xr-x | O programa roda com o poder do dono (ex.: /usr/bin/passwd) |
| setgid | 2000 | rwxrwsr-x | Em pastas: arquivos novos herdam o grupo da pasta |
| sticky | 1000 | rwxrwxrwt | Em pastas: cada um só apaga os próprios arquivos |
$ ls -ld /tmp drwxrwxrwt 18 root root 4096 Oct 15 10:20 /tmp « o "t" no fim é o sticky
Quando não funciona
./script.sh
$ ./backup.sh bash: ./backup.sh: Permissão negada $ echo $? 126 « 126 = encontrou, mas não pôde executar $ ls -l backup.sh -rw-rw-r-- 1 ana ana 45 Oct 15 09:15 backup.sh « não tem nenhum x
O que aconteceu: o arquivo não tem permissão de execução. Isso é normal em arquivos recém-criados ou baixados.
Como resolver (duas formas):
$ chmod +x backup.sh $ ./backup.sh Fazendo backup... $ bash backup.sh Fazendo backup... « também funciona sem x: o bash lê o arquivo
Se o arquivo já tem x e o erro continua, ele pode estar num pendrive ou partição montada com a opção noexec. Copie para a sua pasta pessoal ou use bash script.sh. Veja mount e fstab.
$ chmod 755 /etc/hostname chmod: changing permissions of '/etc/hostname': Operation not permitted
O que aconteceu: só o dono do arquivo (ou o root) pode mudar as permissões dele. O dono de /etc/hostname é o root.
Como resolver: confirme se a mudança é necessária e use sudo chmod ….
$ chmod abc backup.sh chmod: invalid operator (expected +, -, or =, but found b)
O que aconteceu: o modo foi escrito errado. Depois do "quem" (u g o a) precisa vir +, - ou =.
Como resolver: confira a anatomia: chmod u+x, sem espaços.
r, mas não consigo entrar
$ ls -ld privada drw-r--r-- 2 ana ana 4096 Oct 15 10:40 privada $ cd privada bash: cd: privada: Permissão negada
O que aconteceu: numa pasta, o x é a permissão de entrar. Sem ele, nem o dono acessa o conteúdo.
Como resolver: chmod u+x privada, ou o valor completo chmod 700 privada.
Referência de opções
| Opção | Descrição | Exemplo |
|---|---|---|
-R | Aplica em tudo dentro da pasta | chmod -R go-w pasta |
-v | Mostra cada arquivo processado | chmod -v 644 a.txt |
-c | Mostra só o que mudou | chmod -Rc 755 bin |
--reference=arq | Copia as permissões de outro arquivo | chmod --reference=a.sh b.sh |
X (no modo) | x só para pastas e já executáveis | chmod -R a+rX pasta |
Exercícios
1. Tornar executável
Complete para que só o dono ganhe permissão de executar:
2. Fazer a conta
Qual número octal corresponde a rw-r-----?
3. Chave SSH
Uma chave privada só pode ser lida e escrita pelo dono. Complete:
4. O que chmod 755 app.sh deixa o grupo fazer?
5. ./script.sh deu "Permissão negada" e o ls -l mostra -rw-rw-r--. Qual é a melhor solução?
Resumo
- Permissões são três trios (dono, grupo, outros) de
r w x. - Simbólico muda uma parte:
chmod u+x,go-w,a=r. - Octal define tudo: r=4, w=2, x=1, somados por trio. Exemplos:
644,755,600. - Em pastas, use
-RcomXmaiúsculo; nunca 777. - "Permissão negada" em
./script.sh: falta ox. Usechmod +xoubash script.sh.