Permissões no Linux: Entenda chmod, chown, grupos e permissões
Permissões no Linux: Entenda chmod, chown, Grupos e Permissões
No Linux, a segurança é construída sobre uma base sólida de permissões de acesso. Diferente de sistemas operacionais voltados exclusivamente para o uso doméstico simplificado, o Linux foi projetado desde o início como um sistema multiusuário e multitarefa. Isso significa que o sistema precisa saber exatamente quem pode ler um arquivo, quem pode alterá-lo e quem pode executá-lo como um programa.
Entender permissões não é apenas uma tarefa técnica para Administradores de Sistemas (SysAdmins); é uma habilidade de sobrevivência para desenvolvedores, profissionais de DevOps e entusiastas de Homelab. Sem esse conhecimento, você se verá preso em erros de “Permission denied” ou, pior, deixará seu sistema vulnerável a ataques por conceder acesso excessivo a arquivos sensíveis.
Neste guia profundo do portal BITTUX, vamos desmistificar o funcionamento das permissões, do básico ao avançado.
O que você vai aprender
- A hierarquia de Usuários, Grupos e Outros (UGO).
- O significado prático de Leitura, Escrita e Execução (
rwx). - As diferenças cruciais entre permissões em arquivos vs. diretórios.
- Como alterar permissões usando o comando
chmod(modos simbólico e octal). - Como alterar a posse de arquivos com
chownechgrp. - O papel do
umaskna criação de novos arquivos. - Bits especiais de segurança: SUID, SGID e Sticky Bit.
- Troubleshooting de erros comuns de acesso.
- Melhores práticas de segurança baseadas no princípio do menor privilégio.
Pré-requisitos
- Um sistema Linux funcional (Ubuntu, Debian, CentOS, etc.).
- Acesso ao terminal.
- Usuário com privilégios de
sudopara realizar alterações administrativas. - Conhecimento básico de navegação no terminal (se precisar, consulte o guia 01 primeiros passos linux terminal).
Conceitos fundamentais
Para dominar as permissões, precisamos primeiro entender para quem elas são atribuídas e o que cada uma delas faz.
1. As três classes de usuários (UGO)
Todo arquivo ou diretório no Linux possui três níveis de atribuição de acesso:
- Dono (User/Owner –
u): O usuário que criou o arquivo ou aquele a quem a posse foi atribuída. Tem controle total sobre as permissões do próprio arquivo. - Grupo (Group –
g): Um conjunto de usuários que compartilham as mesmas permissões para aquele arquivo. Útil para colaboração em equipe. - Outros (Others –
o): Todos os demais usuários do sistema que não são o dono e não pertencem ao grupo do arquivo.
2. Os três tipos de permissão (rwx)
Cada uma das classes acima pode ter três tipos de acesso:
- Leitura (Read –
r): Permite ver o conteúdo do arquivo ou listar o conteúdo de um diretório. - Escrita (Write –
w): Permite modificar o conteúdo de um arquivo ou criar/remover arquivos dentro de um diretório. - Execução (Execute –
x): Permite rodar um arquivo como programa/script ou “atravessar” (entrar) em um diretório.
3. Diferença de rwx: Arquivos vs. Diretórios
Este é o ponto onde muitos iniciantes se confundem. A permissão tem comportamentos distintos dependendo do alvo:
| Permissão | Em um Arquivo | Em um Diretório |
|---|---|---|
| r (Read) | Ler o conteúdo (ex: cat, less) |
Listar arquivos internos (ex: ls) |
| w (Write) | Alterar/salvar o arquivo (ex: nano, vim) |
Criar, renomear ou deletar arquivos dentro dele |
| x (Execute) | Executar como binário ou script | Entrar na pasta (cd) e acessar metadados de arquivos |
Dica técnica: Para um usuário conseguir deletar um arquivo dentro de uma pasta, ele precisa de permissão de escrita (w) no diretório, mesmo que ele não tenha permissão nenhuma no arquivo em si.
Preparação do ambiente
Vamos criar um ambiente de testes isolado para não afetar arquivos importantes do sistema.
Passo 1: Criar diretório de laboratório
mkdir -p ~/lab-permissoes
cd ~/lab-permissoes
Passo 2: Criar arquivos de teste
touch publico.txt privado.txt script.sh
Motivo: Ter arquivos com diferentes propósitos nos ajuda a visualizar como as permissões impactam o acesso real.
Tutorial passo a passo
Passo 1: Analisar as permissões atuais
Use o comando ls -l para ver a “radiografia” do arquivo.
ls -l publico.txt
O resultado esperado é algo como:
-rw-r--r-- 1 usuario grupo 0 Sep 1 10:00 publico.txt
Explicação da string de permissões (-rw-r--r--):
– O 1º caractere indica o tipo (- para arquivo, d para diretório, l para link).
– Os próximos 3 (rw-) são as permissões do Dono.
– Os 3 seguintes (r--) são as permissões do Grupo.
– Os últimos 3 (r--) são as permissões de Outros.
Passo 2: Alterar permissões com chmod (Modo Simbólico)
O modo simbólico usa letras e operadores para adicionar (+), remover (-) ou definir (=) permissões.
Objetivo: Dar permissão de execução para o dono no arquivo script.sh
chmod u+x script.sh
Objetivo: Remover permissão de leitura para o grupo e outros no arquivo privado.txt
chmod go-r privado.txt
Objetivo: Definir permissão exata (leitura e escrita para o dono, nada para o resto)
chmod u=rw,go= privado.txt
Explicação: O modo simbólico é intuitivo para alterações rápidas em bits específicos sem precisar calcular valores.
Passo 3: Alterar permissões com chmod (Modo Octal)
O modo octal usa números de 0 a 7 para representar as combinações de permissões. É o método preferido em documentações técnicas e automação.
A tabela de valores:
– 4: Read (r)
– 2: Write (w)
– 1: Execute (x)
– 0: Nenhuma permissão
Soma das combinações:
– 7 (4+2+1) = rwx
– 6 (4+2) = rw-
– 5 (4+1) = r-x
– 4 = r–
Objetivo: Definir permissão “Padrão Web” (Dono tudo, resto só ler/executar)
chmod 755 publico.txt
Objetivo: Definir permissão restrita (Dono lê/escreve, ninguém mais faz nada)
chmod 600 privado.txt
Resultado esperado: Ao rodar ls -l, o arquivo privado.txt deve exibir -rw-------.
Passo 4: Alterar Dono e Grupo com chown e chgrp
Muitas vezes, o erro de permissão ocorre porque o arquivo pertence ao usuário errado (comum ao usar sudo para criar arquivos em sua /home).
Objetivo: Mudar o dono de um arquivo para o root (requer sudo)
sudo chown root publico.txt
Objetivo: Mudar o dono e o grupo simultaneamente
sudo chown usuario:www-data publico.txt
Objetivo: Mudar recursivamente em uma pasta inteira
sudo chown -R usuario:usuario ~/lab-permissoes
Explicação: O chown (change owner) é a ferramenta definitiva para corrigir problemas de posse. A flag -R (recursive) aplica a mudança a todos os arquivos e subpastas.
Passo 5: Entendendo o umask
O umask define quais permissões serão retiradas de um arquivo no momento em que ele é criado.
umask
Se o seu umask for 0022, arquivos novos nascerão com 644 (666 – 022) e diretórios com 755 (777 – 022).
Bits Especiais: SUID, SGID e Sticky Bit
Existem permissões avançadas que resolvem cenários específicos de administração.
1. SUID (Set User ID) – Valor Octal 4000
Quando aplicado a um executável, o programa roda com os privilégios do dono do arquivo, não do usuário que o chamou.
– Exemplo clássico: O comando passwd tem SUID para que usuários comuns possam alterar suas senhas no arquivo /etc/shadow (que pertence ao root).
– Risco: Um binário com SUID e falhas de segurança pode ser usado para escalada de privilégios.
2. SGID (Set Group ID) – Valor Octal 2000
Em diretórios, garante que novos arquivos criados dentro dele herdem o grupo da pasta pai, facilitando o compartilhamento em pastas de equipe.
3. Sticky Bit – Valor Octal 1000
Em diretórios, impede que um usuário delete arquivos de outros usuários, mesmo que ele tenha permissão de escrita na pasta.
– Exemplo clássico: O diretório /tmp. Todo mundo pode escrever lá, mas você só deleta o que é seu.
Laboratório prático: Criando uma pasta compartilhada segura
Vamos simular um ambiente onde vários desenvolvedores precisam trabalhar na mesma pasta.
Cenário
Criar uma pasta /srv/projeto onde:
1. O grupo desenvolvedores tenha acesso total.
2. Novos arquivos sempre pertençam ao grupo desenvolvedores (SGID).
3. Ninguém consiga deletar o arquivo do colega (Sticky Bit).
Execução:
# 1. Criar o grupo (se não existir)
sudo groupadd desenvolvedores
# 2. Criar a pasta e ajustar o grupo
sudo mkdir -p /srv/projeto
sudo chgrp desenvolvedores /srv/projeto
# 3. Aplicar permissões: rwx para dono e grupo, nada para outros
# E aplicar SGID (2) e Sticky Bit (1) -> Soma 3 no prefixo
sudo chmod 3770 /srv/projeto
# 4. Verificar resultado
ls -ld /srv/projeto
Resultado esperado: A saída deve mostrar drwxrws--t. O s no grupo indica SGID e o t no final indica Sticky Bit.
Troubleshooting: problemas comuns e como resolver
1. Erro “Permission denied” ao rodar um script
Sintoma
Você tenta rodar ./meuscript.sh e recebe erro de permissão, mesmo sendo o dono.
Possível causa
O arquivo não tem o bit de execução (x) ativo.
Diagnóstico
ls -l meuscript.sh mostra -rw-r--r--.
Solução
Adicione permissão de execução: chmod +x meuscript.sh.
2. Erro “Operation not permitted” ao usar chown
Sintoma
Você tenta mudar o dono de um arquivo seu e o sistema nega.
Possível causa
Apenas o superusuário (root) pode dar a posse de um arquivo para outra pessoa no Linux. Isso evita que usuários “escondam” arquivos maliciosos na conta de outros.
Solução
Use sudo chown ....
3. Arquivo criado por um usuário não pode ser editado pelo grupo na pasta compartilhada
Sintoma
Mesmo com SGID, o arquivo nasce com permissão 644 e o colega de grupo não consegue editar.
Possível causa
O umask do usuário que criou o arquivo é muito restritivo (provavelmente 022).
Solução
O usuário deve ajustar seu umask para 002 ou usar ACLs (Access Control Lists) para permissões mais granulares.
Segurança e Boas Práticas
- Princípio do Menor Privilégio: Nunca dê permissão
777(leitura, escrita e execução para todos) para resolver um problema de acesso. Descubra qual é o grupo correto ou ajuste apenas o bit necessário. - Cuidado com chmod 777: Em servidores web, dar 777 em pastas de upload permite que um invasor envie e execute scripts maliciosos.
- Auditoria de SUID: Verifique periodicamente se existem arquivos com SUID suspeitos no sistema:
find / -perm /4000 -type f 2>/dev/null - Uso de Grupos: Em vez de dar permissões para “Outros”, crie grupos específicos para as tarefas e adicione os usuários a eles.
- SSH e Chaves: Pastas
.sshe arquivosauthorized_keysdevem ter permissões estritas (700e600respectivamente), caso contrário, o serviço SSH recusará a conexão por segurança.
Conclusão
As permissões no Linux são a primeira linha de defesa do sistema. Dominar o chmod, chown e entender a matriz rwx permite que você configure ambientes seguros, colaborativos e profissionais. Lembre-se: o poder do sudo deve ser usado com responsabilidade, e a compreensão dos bits especiais pode elevar sua administração de sistemas a um novo nível.
Próximos passos / Continue estudando
- 03 systemd linux — Systemd na Prática: Veja como as permissões impactam a execução de serviços e como definir o usuário de um serviço.
- 04 ssh linux — Acesso Remoto Seguro com SSH: Aprenda as permissões críticas necessárias para chaves SSH.
- 01 primeiros passos linux terminal — Revisão de Terminal: Se sentiu dificuldade com algum comando básico, volte ao guia de introdução.
Perguntas frequentes (FAQ)
Qual a diferença entre chmod 7 e chmod 007?
Nenhuma. O Linux assume zeros à esquerda se você fornecer apenas um dígito. No entanto, é boa prática usar três dígitos (755) ou quatro (0755) quando bits especiais estão envolvidos.
Por que não consigo deletar um arquivo se tenho permissão rwx nele?
Porque a permissão para deletar arquivos reside no diretório pai, não no arquivo em si. Você precisa de permissão de escrita (w) na pasta onde o arquivo está localizado.
O que significa o sinal de mais (+) ou ponto (.) ao final das permissões no ls -l?
Um . indica um contexto de segurança SELinux aplicado. Um + indica que o arquivo possui ACLs (Access Control Lists) estendidas, que permitem permissões mais complexas para múltiplos usuários e grupos simultâneos.
Próximo passo
Agora que você domina Permissoes No Linux, o próximo passo lógico da nossa trilha de aprendizado é continuar desenvolvendo suas habilidades.
→ Continue: Systemd na Prática
Artigos relacionados
Estes artigos complementam o conteúdo apresentado:
