chmod, chown, chgrp e umask — quem pode fazer o quê no sistema Linux.
r4read / leitura
w2write / escrita
x1execute / execução
-0sem permissão
📋 Conceito de Permissões no Linux
No Linux, todo arquivo e diretório possui um conjunto de permissões que define quem pode fazer o quê. Esse sistema é fundamental para a segurança: sem ele, qualquer usuário poderia ler, modificar ou apagar arquivos de outros — inclusive arquivos do sistema.
As permissões se aplicam a três categorias de usuário:
👤user (u)O dono do arquivo — quem o criou ou para quem foi transferido
👥group (g)O grupo ao qual o arquivo pertence — todos os membros do grupo
🌐other (o)Todos os demais usuários do sistema que não são dono nem grupo
Lendo as permissões: ls -l
Cada linha do ls -l começa com 10 caracteres que descrevem tipo e permissões:
-tipo
ru
wu
xu
rg
-g
xg
ro
-o
-o
Tipo (- arquivo • d diretório • l link)
Dono (user)
Grupo (group)
Outros (other)
ls -l — lendo permissões
user@srv:~$ls -ltotal 12drwxr-xr-x 2 user devs 4096 jan 10 Documentos/-rw-r--r-- 1 user devs 1024 jan 10 config.txt-rwxr-x--- 1 user devs 2048 jan 10 deploy.sh# d=diretório rwx=dono r-x=grupo ---=outros
🔒 Regra de ouro: o Linux verifica as permissões sempre nesta ordem — dono, grupo, outros. A primeira categoria que corresponde ao usuário é a que vale; as demais são ignoradas.
🔢 Notação Octal
Além da notação simbólica (rwx), as permissões podem ser representadas em octal (números 0 a 7). Cada categoria (u, g, o) recebe um dígito que é a soma dos valores concedidos.
rwx = 7
r
w
x
7
rw- = 6
r
w
-
6
r-x = 5
r
-
x
5
r-- = 4
r
-
-
4
-wx = 3
-
w
x
3
-w- = 2
-
w
-
2
--x = 1
-
-
x
1
--- = 0
-
-
-
0
Permissões mais comuns (3 dígitos)
755
rwxr-xr-x — script/programaDono: tudo • Grupo e outros: ler + executar
644
rw-r--r-- — arquivo de textoDono: ler + escrever • Demais: só ler
700
rwx------ — script privadoDono: tudo • Grupo e outros: nada
💡 Dica prática:755 para scripts e programas • 644 para arquivos de texto e configuração • 600 para chaves SSH e arquivos sensíveis.
🔧 chmod — Alterando Permissões
O chmod (change mode) altera as permissões de arquivos e diretórios. Aceita tanto a notação octal quanto a simbólica.
Modo octal
chmod — modo octal
# chmod [permissão] [arquivo]user@srv:~$chmod755script.sh# rwxr-xr-x — dono executa, demais leem e executamuser@srv:~$chmod644config.txt# rw-r--r-- — dono lê/escreve, demais só leemuser@srv:~$chmod600~/.ssh/id_rsa# rw------- — somente o dono (chave privada SSH)user@srv:~$chmod-R755projeto/# -R aplica recursivamente em todo o diretório
chmod ug+rw doc.pdfLeitura + escrita para dono e grupo
chmod u-x,o-x binRemove execução do dono e outros
⚠️ Nunca use chmod 777 em produção! Isso concede todas as permissões a todos os usuários — uma brecha grave de segurança. Use sempre a permissão mínima necessária.
👤 chown e chgrp — Mudando Proprietário
Além das permissões, cada arquivo tem um dono e um grupo. Os comandos chown e chgrp permitem alterar esses atributos. Apenas o root (ou usuário com sudo) pode mudar o dono de um arquivo.
chown — Change Owner
Muda o dono do arquivo
Pode mudar dono e grupo juntos
Sintaxe: chown usuario:grupo arquivo
Recursivo com -R
chgrp — Change Group
Muda apenas o grupo
Usuário pode mudar o próprio grupo
Sintaxe: chgrp grupo arquivo
Recursivo com -R
chown e chgrp na prática
# Mudar somente o donoroot@srv:~#chownjoaoarquivo.txt# Mudar dono E grupo ao mesmo tempo (mais eficiente)root@srv:~#chownjoao:devsprojeto/# Recursivo — toda a pasta do servidor webroot@srv:~#chown-Rwww-data:www-data/var/www/html# Mudar somente o grupo com chgrproot@srv:~#chgrpvendasrelatorio.pdf# Verificar o resultadouser@srv:~$ls-laprojeto/drwxr-xr-x 3 joao devs 4096 jan 10 projeto/# ↑ ↑# dono grupo
💡 Atalho:chown usuario:grupo arquivo equivale a rodar chown + chgrp separados — mais eficiente e menos propenso a erros.
★ Permissões Especiais: SUID, SGID e Sticky Bit
Além do trio rwx, o Linux possui três permissões especiais representadas por um 4º dígito à esquerda na notação octal, ou por letras especiais (s, t) na notação simbólica.
🔴
SUID
4xxx — u+s
Executa o arquivo com as permissões do dono, não de quem executa. Exemplo: /usr/bin/passwd — qualquer usuário muda sua senha mas o binário roda como root.
🔵
SGID
2xxx — g+s
Em diretórios: novos arquivos herdam o grupo do diretório. Ideal para pastas de projetos compartilhados onde todos precisam do mesmo grupo.
🟢
Sticky Bit
1xxx — +t
Em diretórios: cada usuário só pode deletar seus próprios arquivos. Padrão em /tmp — todos escrevem, ninguém apaga o do outro.
aplicando permissões especiais
# SUID — programa roda como root (s no lugar do x do dono)root@srv:~#chmodu+s/usr/bin/meu_prog-rwsr-xr-x 1 root root 12345 /usr/bin/meu_prog# SGID — arquivos criados herdam o grupo do diretórioroot@srv:~#chmodg+s/var/projetodrwxrwsr-x 2 root devs 4096 /var/projeto/# Sticky Bit — só o dono deleta seus arquivos (t no lugar do x)root@srv:~#chmod+t/tmpdrwxrwxrwt 20 root root 4096 /tmp/# Usando octal: 4=SUID | 2=SGID | 1=Stickyroot@srv:~#chmod4755/usr/bin/meu_progroot@srv:~#chmod2775/var/projetoroot@srv:~#chmod1777/tmp
⚠️ SUID em scripts Shell não tem efeito na maioria dos sistemas Linux modernos por razões de segurança. Funciona apenas em binários compilados.
🧹 umask — Permissão Padrão para Novos Arquivos
O umask define quais permissões são retiradas automaticamente ao criar novos arquivos e diretórios. Funciona como uma máscara subtrativa.
Como calcular: base − umask = resultado
Permissão Base
666
arquivos
−
umask padrão
022
remove grupo w e outros w
=
Resultado
644
rw-r--r--
Permissão Base
777
diretórios
−
umask padrão
022
remove grupo w e outros w
=
Resultado
755
rwxr-xr-x
umask — ver e definir
# Ver o umask atualuser@srv:~$umask0022# Definir umask mais restritivo (só o dono acessa)user@srv:~$umask077# 666 - 077 = 600 (arquivos) | 777 - 077 = 700 (diretórios)# Testar: criar arquivo com novo umaskuser@srv:~$touchteste.txt&&ls-lteste.txt-rw------- 1 user user 0 jan 10 teste.txt# 600 — somente o dono lê/escreve# Tornar permanente — adicionar ao ~/.bashrc# echo "umask 027" >> ~/.bashrc
🔧 O umask 0022 é o padrão equilibrado. Para ambientes mais seguros use 0027 (sem acesso para "outros") ou 0077 (somente o dono). Quanto maior o umask, mais restrito o acesso.
🛡 Permissões Seguras: Casos Reais
Permissões corretas são a primeira linha de defesa. Veja como aplicar o conceito de privilégio mínimo em situações reais.
640
Arquivo de configuraçãoDono lê/escreve • Grupo só lê • Outros: nada
600
Chave SSH / senhaApenas o dono lê/escreve • Todos os outros: nada
750
Script de deployDono executa • Grupo executa • Outros: nada
755
Diretório públicoDono: tudo • Grupo e outros: entrar e listar
Servidor web (Nginx / Apache)
configuração segura de servidor web
# Diretório do site: dono e grupo www-data, 750root@srv:~#chown-Rwww-data:www-data/var/www/htmlroot@srv:~#chmod-R750/var/www/html# Arquivo de configuração: somente root lê/escreveroot@srv:~#chmod600/etc/nginx/nginx.conf# Script de deploy: somente o dono executaroot@srv:~#chmod700/opt/scripts/deploy.sh# Arquivo absolutamente bloqueadoroot@srv:~#chmod000segredo.txtuser@srv:~$catsegredo.txtcat: segredo.txt: Permissão negada
Auditoria de permissões suspeitas
auditoria — encontrando problemas
# Encontrar arquivos com SUID no sistemaroot@srv:~#find/-perm-4000-typef2>/dev/null# Encontrar arquivos com permissão 777 (perigoso!)root@srv:~#find/var/www-perm777# Detalhes completos de um arquivouser@srv:~$statconfig.txt File: config.txt Access: (0644/-rw-r--r--) Uid: (1000/user) Gid: (1000/user)
✅ Checklist de permissões seguras: configurações → 640 ou 600 • scripts → 750 ou 700 • diretórios públicos → 755 • nunca use 777 em produção.
🎯 Exercício — Arraste e Conecte
Arraste cada comando para sua descrição correta.
Comando
chmod 755 script.sh
chmod u+x arquivo
chown joao:devs projeto/
chmod 644 config.txt
chmod 000 segredo.txt
umask 022
Descrição
Dá permissão de execução para todos
Adiciona execução apenas para o dono
Muda dono e grupo do diretório
Leitura para todos, escrita só para dono
Remove todas as permissões
Define permissão padrão para novos arquivos
❓ Verifique seu Conhecimento
Qual é a permissão octal equivalente a rwxr-xr-x?
A644
B755
C777
D700
✓ rwx = 4+2+1 = 7 (dono) • r-x = 4+0+1 = 5 (grupo) • r-x = 5 (outros) → 755. Padrão para scripts e programas executáveis.
O que faz o comando chmod u+x script.sh?
ARemove a permissão de execução do usuário
BAdiciona execução para todos os usuários
CAdiciona execução somente para o dono do arquivo
DDefine permissão total somente para o dono
✓ u = user (dono) • + = adiciona • x = execução. Para todos os usuários seria a+x ou ugo+x.
Com umask 022, qual será a permissão de um arquivo recém-criado?
A644 (rw-r--r--)
B755 (rwxr-xr-x)
C777 (rwxrwxrwx)
D600 (rw-------)
✓ Arquivos partem de 666 (sem execução por padrão). 666 - 022 = 644. Diretórios partem de 777, então 777 - 022 = 755.
O que acontece quando o Sticky Bit é aplicado em um diretório?
AO diretório fica oculto para outros usuários
BNovos arquivos herdam o grupo do diretório
CO diretório fica somente leitura
DCada usuário só pode deletar seus próprios arquivos
✓ O Sticky Bit (+t, 1xxx) é o padrão do /tmp: todos escrevem livremente mas ninguém apaga arquivos de outros. A letra t aparece no lugar do x de "outros".
🛠️ Atividade Prática — Laboratório de Permissões
⏱ ~30 min💻 Ubuntu Server / Terminal📸 Tirar screenshot da saída
1
Criar estrutura de diretórios
Crie a estrutura base: mkdir -p ~/lab-perm/{publico,privado,scripts}. Crie arquivos de teste: touch ~/lab-perm/publico/doc.txt ~/lab-perm/privado/senha.txt ~/lab-perm/scripts/deploy.sh. Verifique com ls -lR ~/lab-perm/.
2
Aplicar permissões adequadas
Configure as permissões corretas: chmod 644 ~/lab-perm/publico/doc.txt (leitura pública), chmod 600 ~/lab-perm/privado/senha.txt (só o dono), chmod 750 ~/lab-perm/scripts/deploy.sh (script para dono e grupo).
3
Testar acesso com diferentes usuários
Crie um usuário de teste: sudo useradd -m testuser. Tente acessar o arquivo privado: sudo -u testuser cat ~/lab-perm/privado/senha.txt — deve retornar "Permissão negada". Com sudo cat (root) deve funcionar pois root ignora permissões.
4
Usar chmod simbólico e octal
Adicione execução com notação simbólica: chmod u+x ~/lab-perm/scripts/deploy.sh. Depois use octal para um diretório completo: chmod -R 755 ~/lab-perm/publico/. Verifique cada mudança com ls -l.
5
Configurar e testar umask
Veja o umask atual com umask. Mude para umask 077 e crie um arquivo: touch ~/lab-perm/privado/novo.txt && ls -l ~/lab-perm/privado/novo.txt. Deve ter permissão 600. Restaure com umask 022.
6
Auditoria final com ls -la e stat
Liste tudo com permissões: ls -laR ~/lab-perm/. Use stat ~/lab-perm/privado/senha.txt para ver detalhes completos (dono, grupo, permissões em octal). Tire um screenshot da saída.
📌 Para refletir: Permissões não são apenas uma questão técnica — são a diferença entre um servidor seguro e um comprometido. Em ambientes de produção, cada arquivo precisa ter exatamente as permissões mínimas necessárias. Um arquivo de configuração legível por todos pode vazar senhas de banco de dados; um script executável por todos pode ser explorado por atacantes.