Comando chown: donos, grupos e o chgrp no Linux

Terminal Linux a mostrar o comando chown a corrigir o dono e o grupo de ficheiros de um servidor web

Há um par de perguntas que decide, em Linux, quem pode fazer o quê a cada ficheiro: de quem é, e de que grupo é. Quando um site deixa de aceitar uploads, quando um serviço não consegue ler a própria configuração ou quando um backup restaurado fica inutilizável, a causa está quase sempre num dono ou num grupo errados — e a solução chama-se chown. O comando irmão, chgrp, trata apenas do grupo, mas na prática o chown faz o trabalho dos dois.

Neste artigo da série sobre comandos Linux, explicamos como mudar dono e grupo com precisão, como auditar a propriedade dos ficheiros com o find, como tratar os ficheiros órfãos que sobram quando uma conta é removida — e como evitar o erro recursivo que já pôs servidores inteiros de joelhos. No final, um simulador interativo permite praticar tudo isto no navegador.

O que fazem o chown e o chgrp

Cada ficheiro e diretório guarda, no inode, um UID (dono) e um GID (grupo). É sobre estes dois valores que as permissões do ls -l se aplicam: o primeiro terno de permissões vale para o dono, o segundo para o grupo, o terceiro para todos os outros. O chown (change owner) altera o dono, o grupo ou ambos; o chgrp (change group) altera apenas o grupo. Mudar o dono de um ficheiro exige privilégios de administrador — daí o sudo em quase todos os exemplos —, enquanto mudar o grupo pode ser feito pelo próprio dono, desde que pertença ao grupo de destino.

chown [OPÇÕES] DONO[:GRUPO] FICHEIRO...
chgrp [OPÇÕES] GRUPO FICHEIRO...

sudo chown www-data relatorio.txt          # muda só o dono
sudo chown www-data:www-data uploads/      # muda dono e grupo
sudo chown :developers relatorio.txt       # muda só o grupo (= chgrp)

Um detalhe importante: por omissão o chown é silencioso. Se o comando termina sem mensagens, correu bem — a confirmação faz-se com ls -l ou stat, ou pedindo ao próprio comando que relate o que fez, como veremos já de seguida.

As opções que interessam

Dono, grupo ou ambos

  • chown dono ficheiro — muda apenas o dono; o grupo fica intacto.
  • chown dono:grupo ficheiro — muda os dois de uma vez, separados por dois pontos.
  • chown :grupo ficheiro — com os dois pontos à frente, muda apenas o grupo; é o equivalente exato de chgrp grupo ficheiro.
  • chown dono: ficheiro — com os dois pontos no fim, atribui o dono indicado e o grupo principal desse dono. Um atalho útil, mas que convém usar de forma consciente.

Recursivo e relatórios

  • -R — aplica a mudança recursivamente a toda a árvore a partir do alvo. Sem -R, mudar uma pasta muda apenas a pasta, não o que está lá dentro — um dos enganos mais frequentes.
  • -c (--changes) — relata uma linha por cada mudança efetiva. É o complemento natural do -R: mostra exatamente o que foi tocado.
  • -v (--verbose) — relata tudo, incluindo os ficheiros que já estavam corretos (retained). Útil em auditoria, ruidoso em árvores grandes.
  • -h — altera o próprio symlink em vez do ficheiro para que ele aponta; e, com -R, as opções -H/-L/-P controlam se os symlinks são seguidos (por omissão, -P, não são).
$ sudo chown -R -c www-data:www-data uploads/
changed ownership of 'uploads/' from aluno:aluno to www-data:www-data
changed ownership of 'uploads/foto1.jpg' from aluno:aluno to www-data:www-data
changed ownership of 'uploads/doc.pdf' from 1003:1003 to www-data:www-data

Cirurgia: –reference e –from

  • --reference=modelo — em vez de escrever dono e grupo à mão, copia-os de um ficheiro-modelo. Excelente em scripts de instalação e deploy, porque elimina valores fixos no código.
  • --from=dono[:grupo] — só altera os ficheiros que pertencem atualmente ao dono/grupo indicado. Combinada com -R, transforma uma martelada num bisturi: sudo chown -R --from=1003 www-data: . corrige apenas os ficheiros do UID 1003 e não toca em mais nada.

Auditar com find

Antes de mudar donos em massa, convém saber o que existe. O find tem predicados feitos à medida: -user e -group listam o que pertence a uma conta ou grupo; -nouser e -nogroup encontram ficheiros cujo UID ou GID já não existe no sistema — os chamados ficheiros órfãos, que o ls -l mostra como números em vez de nomes.

find /srv/www -user aluno                          # o que ainda é do aluno
find / -xdev -nouser                               # órfãos em todo o sistema
sudo find /srv/www -nouser -exec chown www-data: {} +   # encontrar e corrigir

chown em cibersegurança

Privilégio mínimo aplicado ao disco. O princípio do least privilege não vive só em políticas: concretiza-se em cada chown. Um servidor web deve conseguir escrever na pasta de uploads e em mais lado nenhum; uma chave privada deve pertencer ao serviço que a usa, com grupo restrito. Auditar a propriedade com find -user e corrigir com chown é trabalho de hardening básico e recorrente.

Ficheiros órfãos no offboarding. Quando uma conta é removida com userdel, os ficheiros dela não desaparecem: ficam para trás com um UID sem nome. O perigo é real — se mais tarde for criada uma conta nova que receba o mesmo UID, essa pessoa herda automaticamente o acesso a tudo o que o antigo colaborador deixou. Por isso, qualquer procedimento de saída deve terminar com find / -xdev -nouser -o -nogroup e uma decisão explícita sobre cada resultado: reatribuir ou remover.

Deteção de manipulação. Em resposta a incidentes, mudanças de dono inesperadas são um sinal de alarme: um binário de sistema que deixou de pertencer ao root, ou ficheiros de serviço entregues a uma conta interativa, merecem investigação imediata. Ferramentas de monitorização de integridade comparam também dono e grupo, e o find -user permite reconstruir rapidamente “tudo o que esta conta comprometida possuía”.

O desastre do recursivo. O reverso da moeda: chown -R lançado na raiz errada — por engano de diretório atual, por uma variável vazia num script (chown -R www-data: "$DIR/" com $DIR por definir) — troca os donos de árvores inteiras e pode deixar o sistema por levantar. Verifique o pwd, cite as variáveis, aponte ao alvo mais estreito possível e prefira --from quando só uma parte deve mudar.

Experimente no simulador interativo

O simulador abaixo mostra, à esquerda, uma listagem tipo ls -l com donos e grupos coloridos — incluindo dois ficheiros órfãos do UID 1003 — e, à direita, o terminal que executa cada comando. Use Demonstrar tudo para seguir a sequência guiada (do chown básico à caça aos órfãos), avance com Anterior/Seguinte, ou combine livremente o alvo, o novo dono/grupo e as opções (-R, -c, -v, --from, --reference) e veja a listagem mudar em tempo real.

Erros comuns e boas práticas

  • Esquecer que sem -R só a pasta muda: chown www-data uploads/ não toca nos ficheiros lá dentro. Se os uploads “continuam sem funcionar”, é quase de certeza isto.
  • chown -R sem confirmar o diretório: um pwd antes e um alvo explícito (nunca . “de memória”) evitam o desastre clássico. Em scripts, valide as variáveis antes de as usar num caminho.
  • Resolver problemas de permissões com chmod 777: na maioria dos casos o problema era de dono, não de permissões — o chown certo resolve sem abrir o ficheiro ao mundo inteiro.
  • Ignorar os symlinks: chown segue o link e altera o destino; para mudar o próprio link, use -h. Em árvores com links para fora (por exemplo para /etc), um -R descuidado pode alterar ficheiros que nem estavam no alvo.
  • Corrigir órfãos às cegas: antes de reatribuir com --from ou find -nouser -exec, liste e reveja os ficheiros — podem conter dados sensíveis que exigem tratamento próprio, não apenas um dono novo.
  • Não verificar o resultado: habitue-se ao -c em qualquer operação recursiva, e confirme com ls -l ou stat no fim.

Conclusão

O chown e o chgrp são pequenos, mas carregam um dos pilares da segurança em Linux: cada ficheiro nas mãos certas, e apenas nas mãos certas. Dominar o dono:grupo, o -R com juízo, o -c como hábito e a dupla find -user/-nouser resolve avarias do dia a dia e fecha portas que os atacantes conhecem bem. Se quer levar estas práticas mais longe, a equipa HJFR oferece formação prática em Linux e cibersegurança, além de consultoria especializada: conheça o nosso catálogo de serviços e veja também o artigo da série sobre o comando useradd, onde estes UIDs e grupos começam a vida.

Este artigo faz parte da série «Comandos Linux, um a um» do blog HJFR — fique atento aos próximos comandos.