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 dechgrp 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/-Pcontrolam 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
-Rsó 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 -Rsem confirmar o diretório: umpwdantes 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 — ochowncerto resolve sem abrir o ficheiro ao mundo inteiro. - Ignorar os symlinks:
chownsegue 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-Rdescuidado pode alterar ficheiros que nem estavam no alvo. - Corrigir órfãos às cegas: antes de reatribuir com
--fromoufind -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
-cem qualquer operação recursiva, e confirme comls -loustatno 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.
