Linux para iniciantes: diretórios, usuários e permissões
Filesystem hierarchy, usuários, grupos e permissões rwx explicados com os comandos que você vai usar de verdade — sem enrolação e sem decoreba.
Você acabou de ganhar acesso SSH a um servidor e o primeiro ls -la retorna uma coluna de letras e números que parece um código morse. Ou então está tentando rodar um script e o terminal devolve Permission denied sem mais explicações. Permissões no Linux têm essa fama de assustadoras — mas a lógica por trás delas é simples e consistente. O problema é que quase ninguém explica o sistema como um todo antes de jogar os comandos.
Este post cobre o que você precisa saber para parar de adivinhar: estrutura de diretórios, usuários e grupos, e o modelo rwx de permissões — com os comandos que você vai usar de verdade.
O que é o Filesystem Hierarchy Standard e por que você precisa saber
No Linux, tudo é arquivo — inclusive dispositivos, processos e conexões de rede. E todos esses arquivos vivem em uma única árvore de diretórios, com / (raiz) no topo. Não existe C:\ ou D:\ — há partições e dispositivos montados como subdiretórios dentro dessa árvore.
O Filesystem Hierarchy Standard (FHS) define onde cada tipo de coisa deve ficar:
| Diretório | O que contém |
|---|---|
/bin |
Binários essenciais (ls, cp, mv) — disponíveis antes de /usr ser montado |
/sbin |
Binários do sistema para root (fdisk, iptables) |
/etc |
Arquivos de configuração — nunca binários |
/home |
Diretório pessoal de cada usuário (/home/joao, /home/maria) |
/root |
Diretório pessoal do root (separado de /home por razões históricas) |
/var |
Dados variáveis — logs (/var/log), bases de dados, filas de e-mail |
/tmp |
Arquivos temporários (limpos no reboot em muitas distros) |
/usr |
Programas e bibliotecas de usuário (/usr/bin, /usr/lib) |
/opt |
Software de terceiros instalado manualmente |
/proc |
Sistema de arquivos virtual — estado do kernel e processos em tempo real |
/dev |
Dispositivos como arquivos (/dev/sda, /dev/null, /dev/random) |
Você não precisa memorizar isso na primeira semana. Mas quando você vê um erro de No such file or directory em /etc/nginx/nginx.conf, já sabe exatamente onde procurar.
# Ver o que tem montado e onde
df -h
# Navegar pela estrutura
ls /
ls /etc | head -20
Usuários, grupos e quem é o root
Linux é multiusuário por design. Cada processo roda como um usuário. Cada arquivo pertence a um usuário e a um grupo. Essa combinação é a base do modelo de segurança.
root
O usuário root (UID 0) tem poder absoluto sobre o sistema — sem restrições de permissão. Rodar como root o tempo todo é o equivalente a andar com o crachá de CEO e deixar qualquer um usar sua mesa. Por isso, no dia a dia você usa um usuário comum e eleva privilégios apenas quando necessário com sudo.
Criando e gerenciando usuários
# Criar usuário com diretório home
sudo useradd -m joao
# Criar com shell específico
sudo useradd -m -s /bin/bash maria
# Definir senha
sudo passwd joao
# Ver informações do usuário
id joao
# uid=1001(joao) gid=1001(joao) groups=1001(joao)
# Deletar usuário (sem remover home)
sudo userdel joao
# Deletar usuário e home
sudo userdel -r joao
O arquivo /etc/passwd lista todos os usuários. Não tem senha real ali (isso fica em /etc/shadow, inacessível para usuários comuns). Cada linha tem o formato:
joao:x:1001:1001::/home/joao:/bin/bash
x onde seria a senha significa "senha real está em /etc/shadow".
Grupos
Grupos permitem compartilhar permissões entre múltiplos usuários sem dar acesso irrestrito. Um usuário tem um grupo primário (definido no useradd) e pode pertencer a grupos adicionais.
# Criar grupo
sudo groupadd devs
# Adicionar usuário ao grupo
sudo usermod -aG devs joao
# -a = append (sem isso, você substitui todos os grupos)
# -G = grupos suplementares
# Ver grupos de um usuário
groups joao
# joao : joao devs
# Ver todos os grupos e membros
cat /etc/group | grep devs
# devs:x:1002:joao,maria
O -a no usermod -aG é crítico. Esquecer o -a remove o usuário de todos os grupos existentes e coloca só no novo — já vi isso causar perda de acesso a sudoers em produção.
Como funciona o modelo rwx de permissões
Cada arquivo e diretório no Linux tem três conjuntos de permissões: para o dono (user), para o grupo dono (group), e para todos os outros (others).
ls -la /home/joao/script.sh
# -rwxr-xr-- 1 joao devs 1234 Jun 13 10:00 script.sh
Decompondo:
- rwx r-x r--
│ │ │ └── others: read only
│ │ └────── group: read + execute
│ └────────── user (dono): read + write + execute
└──────────── tipo: - = arquivo, d = diretório, l = symlink
Cada conjunto tem três bits:
r(read, 4): ler o conteúdow(write, 2): modificarx(execute, 1): executar (arquivo) ou entrar/listar (diretório)
O valor octal de cada conjunto é a soma dos bits ativos: rwx = 4+2+1 = 7, r-x = 4+0+1 = 5, r-- = 4+0+0 = 4. Daí vem o chmod 754.
chmod — alterando permissões
# Modo octal — direto e sem ambiguidade
chmod 755 script.sh # rwxr-xr-x
chmod 644 config.txt # rw-r--r--
chmod 600 chave.pem # rw------- (chaves SSH precisam disso)
# Modo simbólico — útil para mudanças pontuais
chmod +x script.sh # adiciona execute para todos
chmod u+x,g-w arquivo # user +execute, group -write
chmod o-rwx arquivo # remove tudo de others
chmod a=r arquivo # define read-only para todos (a = all)
# Recursivo — com cuidado
chmod -R 755 /var/www/html
Permissões em diretórios têm semântica diferente dos arquivos:
rem diretório: listar conteúdo (ls)wem diretório: criar e remover arquivos dentro delexem diretório: entrar (cd) e acessar arquivos pelo caminho
Sem x em um diretório, você não consegue nem navegar até ele, mesmo que tenha r.
chown — alterando dono e grupo
# Trocar dono
sudo chown maria arquivo.txt
# Trocar dono e grupo
sudo chown maria:devs arquivo.txt
# Apenas grupo
sudo chown :devs arquivo.txt
# ou
sudo chgrp devs arquivo.txt
# Recursivo
sudo chown -R www-data:www-data /var/www/html
Apenas root pode transferir arquivos para outro dono. Um usuário comum pode alterar o grupo de seus próprios arquivos, mas só para grupos dos quais faz parte.
umask — o padrão que você não vê
Quando você cria um arquivo, as permissões iniciais não vêm do nada — vêm do umask. A umask define quais bits serão subtraídos da permissão máxima (666 para arquivos, 777 para diretórios).
umask
# 0022
# Com umask 022:
# arquivo: 666 - 022 = 644 (rw-r--r--)
# diretório: 777 - 022 = 755 (rwxr-xr-x)
Umask 022 é o padrão em praticamente toda distro. Significa que grupos e outros só têm leitura por default.
# Mudar umask temporariamente (só na sessão atual)
umask 027
# arquivo: 666 - 027 = 640 (rw-r-----)
# diretório: 777 - 027 = 750 (rwxr-x---)
Para servidores web onde os arquivos precisam ser legíveis pelo usuário www-data mas não por outros, umask 027 com www-data no grupo faz sentido.
SUID, SGID e sticky bit — os casos especiais
Além de rwx, existem três bits com comportamento especial:
SUID (Set User ID, 4xxx): quando aplicado a um executável, ele roda com as permissões do dono, não de quem executou. O comando passwd funciona assim — você precisa escrever em /etc/shadow que pertence ao root.
ls -la /usr/bin/passwd
# -rwsr-xr-x 1 root root ... /usr/bin/passwd
# 's' no lugar de 'x' do user = SUID ativo
SGID (Set Group ID, 2xxx): em diretórios, faz arquivos criados dentro herdarem o grupo do diretório pai, não o grupo primário de quem criou. Essencial para diretórios colaborativos.
chmod g+s /var/compartilhado
# Qualquer arquivo criado aqui herda o grupo do diretório
Sticky bit (1xxx): em diretórios, impede que um usuário delete arquivos de outros, mesmo tendo permissão de escrita no diretório. É o que protege /tmp.
ls -la /
# drwxrwxrwt ... tmp
# 't' no lugar de 'x' de others = sticky bit ativo
chmod +t /tmp/compartilhado
Para trabalhar com esses bits numericamente, use quatro dígitos: chmod 1777 /tmp/pasta (sticky + rwxrwxrwx), chmod 2755 /var/projeto (SGID + rwxr-xr-x).
Perguntas frequentes
Como verificar as permissões de um arquivo rapidamente?
stat arquivo.txt
# Mostra: File, Size, Blocks, IO Block, tipo, Device
# Access: (0644/-rw-r--r--) Uid: (1001/joao) Gid: (1001/joao)
ls -la dá o formato compacto. stat dá o octal direto — útil quando você precisa confirmar o número exato sem converter mentalmente.
Por que chmod -R 777 é uma má ideia?
Porque dá permissão total a qualquer usuário do sistema para ler, modificar e executar qualquer arquivo dentro daquela árvore. Em servidores compartilhados, isso permite que outros usuários (inclusive processos comprometidos) sobrescrevam seus arquivos. Para aplicações web, significa que um atacante que consiga execução de código pode modificar seus próprios scripts. O 777 resolve o problema imediato e cria dez problemas futuros.
Qual é a diferença entre su e sudo?
su troca completamente para outro usuário (por padrão, root) — você precisa da senha do usuário destino. sudo executa um comando específico com privilégios elevados, autenticando com sua própria senha, e o acesso é controlado pelo arquivo /etc/sudoers. Na prática moderna, sudo é preferível: o acesso é rastreável por usuário, pode ser restrito a comandos específicos, e não expõe a senha do root.
O que acontece com permissões em links simbólicos?
As permissões do symlink em si são sempre lrwxrwxrwx — o que conta são as permissões do arquivo de destino. chmod aplicado a um symlink altera o destino, não o link.
Permissão não é obstáculo, é controle de acesso
O modelo Unix de permissões tem 50 anos e ainda está em todo servidor Linux que existe. É simples por design: três entidades (user, group, others), três bits (r, w, x), e algumas extensões (SUID, SGID, sticky) para casos específicos.
A curva de aprendizado real não é técnica — é o hábito de pensar "quem precisa de acesso e para quê?" antes de rodar o chmod. 644 para arquivos de configuração, 755 para binários e diretórios públicos, 600 para chaves privadas e credenciais. Quando você começa a raciocinar assim, o Permission denied passa de susto para informação.
Para calcular permissões sem precisar fazer conta de cabeça, uso a Calculadora CHMOD — você clica nos bits, vê o octal e o simbólico ao mesmo tempo, e o aviso de segurança aparece quando você marca algo perigoso como 777.
Nota: o conteúdo editorial acabou aqui. O que vem abaixo é uma indicação de ferramenta relacionada ao tema do post.
Ferramenta relacionada
A Calculadora CHMOD do Quick Tools deixa você configurar visualmente as permissões de owner, group e others, vê o resultado em octal e notação simbólica ao mesmo tempo, inclui suporte a SUID/SGID/sticky bit e mostra avisos quando a combinação escolhida tem implicações de segurança — tudo no browser, sem instalar nada.
- 01 O que é DevOps além das ferramentas DevOps não é um pipeline nem um cargo. É responsabilidade compartilhada entre quem escreve código e quem coloca em produção — e por que a maioria dos times erra nisso.
- 02 Como funciona uma página web do navegador ao servidor Do DNS ao rendering: entenda o que acontece entre digitar uma URL e a página aparecer — TCP, TLS, HTTP request/response e como o navegador monta os pixels.