Ubuntu chown, chgrp e umask
Todo arquivo tem um dono e um grupo. As permissões que você viu no chmod dizem o que cada um pode fazer. O chown (change owner, "mudar dono") e o chgrp (change group, "mudar grupo") decidem quem são eles. O umask define as permissões que os arquivos novos já ganham ao nascer.
- A ver o dono e o grupo de um arquivo.
- A usar o
chownnas suas quatro formas (só dono, dono e grupo, só grupo, grupo principal). - A consertar o caso mais comum: um arquivo seu que ficou "do root".
- A montar uma pasta compartilhada e a entender o
umask.
Ver o dono e o grupo
No ls -l, o dono é a 3ª coluna e o grupo é a 4ª:
$ ls -l frutas.txt /etc/hostname -rw-r--r-- 1 root root 9 Mar 26 2026 /etc/hostname « dono root, grupo root -rw-rw-r-- 1 ana ana 47 Oct 14 16:05 frutas.txt « dono ana, grupo ana
- -rw-rw-r--
- Permissões: o que o dono, o grupo e os outros podem fazer.
- ana
- 3ª coluna: o dono.
- ana
- 4ª coluna: o grupo. No Ubuntu, cada usuário tem um grupo com o próprio nome.
O comando stat mostra só o que você pedir: stat -c "%U %G %n" frutas.txt imprime ana ana frutas.txt, com dono (%U), grupo (%G) e nome (%n).
Missão: use ls -l para descobrir o dono e o grupo de /etc/hostname, de /etc/shadow e da pasta Documentos. Qual deles tem um grupo diferente do dono?
chown: mudar o dono
Só o root pode dar um arquivo para outra pessoa. Por isso, o chown quase sempre vem com sudo.
- sudo
- Mudar o dono exige ser administrador.
- chown
- O programa.
- joao:financeiro
- Novo dono e, depois dos dois-pontos, novo grupo.
- relatorio.ods
- O arquivo (ou vários arquivos).
$ ls -l relatorio.ods -rw-rw-r-- 1 ana ana 8394 Oct 15 10:40 relatorio.ods $ sudo chown joao:financeiro relatorio.ods [sudo: authenticate] Senha: $ ls -l relatorio.ods -rw-rw-r-- 1 joao financeiro 8394 Oct 15 10:40 relatorio.ods
As quatro formas do chown
| Forma | Exemplo | Muda |
|---|---|---|
usuario | sudo chown joao arq | Só o dono |
usuario:grupo | sudo chown joao:financeiro arq | Dono e grupo |
:grupo | chown :financeiro arq | Só o grupo (igual ao chgrp) |
usuario: | sudo chown joao: arq | Dono e o grupo principal dele |
O caso clássico: "meu arquivo virou do root"
Quando você cria ou copia um arquivo usando sudo, ele nasce com o dono root, mesmo dentro da sua pasta. Depois, você não consegue editá-lo.
-
A Ana copiou um arquivo do sistema com sudo:
$ sudo cp /etc/hosts ~/hosts-copia $ ls -l ~/hosts-copia -rw-r--r-- 1 root root 221 Oct 15 10:40 /home/ana/hosts-copia « dono: root
-
Ao tentar escrever nele, recebe um erro:
$ echo "192.168.0.50 servidor" >> ~/hosts-copia bash: /home/ana/hosts-copia: Permissão negada
O arquivo está na pasta dela, mas pertence ao root, e só o dono tem o
w. -
Ela devolve o arquivo para si mesma:
$ sudo chown ana:ana ~/hosts-copia $ ls -l ~/hosts-copia -rw-r--r-- 1 ana ana 221 Oct 15 10:40 /home/ana/hosts-copia « agora é dela $ echo "192.168.0.50 servidor" >> ~/hosts-copia « funciona
Use sudo só para o que realmente precisa. Para ler um arquivo do sistema e guardar uma cópia sua, cp /etc/hosts ~/ sem sudo já funciona, porque o arquivo pode ser lido por todos.
Pastas inteiras: -R
Com -R, o chown muda a pasta e tudo o que está dentro. O exemplo típico é entregar os arquivos de um site ao usuário do servidor web, o www-data:
$ sudo chown -R www-data:www-data /var/www/loja $ ls -l /var/www/loja total 12 drwxr-xr-x 2 www-data www-data 4096 Oct 15 10:45 css -rw-r--r-- 1 www-data www-data 512 Oct 15 10:45 index.html -rw-r--r-- 1 www-data www-data 880 Oct 15 10:45 contato.html
sudo chown -R
Um caminho errado, como sudo chown -R ana /usr ou um espaço a mais em sudo chown -R ana / home/ana, muda o dono de arquivos do sistema e pode deixar o Ubuntu sem funcionar (o sudo, por exemplo, exige pertencer ao root). Confira o caminho antes de apertar Enter.
chgrp: mudar só o grupo
O chgrp muda apenas o grupo. Diferente do chown, um usuário comum pode usá-lo sem sudo, desde que seja dono do arquivo e participe do grupo de destino.
$ chgrp adm relatorio.txt $ ls -l relatorio.txt -rw-rw-r-- 1 ana adm 0 Oct 15 10:50 relatorio.txt « a ana está no grupo adm: funcionou $ chgrp root relatorio.txt chgrp: changing group of 'relatorio.txt': Operation not permitted (os error 1) « ela não está no grupo root
| Para mudar só o grupo… | Observação |
|---|---|
chgrp equipe arq | O comando específico; o mais claro. |
chown :equipe arq | O mesmo efeito, com dois-pontos na frente. |
sudo chgrp -R equipe pasta | Para uma pasta inteira, ou grupos de que você não participa. |
Projeto: pasta compartilhada pela equipe
A ana e o joao precisam editar os mesmos arquivos. A receita junta grupos, chown e chmod:
Crie o grupo e coloque os dois nele (veja Usuários e Grupos):
$ sudo groupadd equipe $ sudo usermod -aG equipe ana $ sudo usermod -aG equipe joao
Crie a pasta e entregue-a ao grupo:
$ sudo mkdir /srv/equipe $ sudo chown root:equipe /srv/equipe
Dê permissão total ao grupo e ligue o setgid (o
2na frente). Assim, todo arquivo criado ali dentro herda o grupoequipe:$ sudo chmod 2775 /srv/equipe $ ls -ld /srv/equipe drwxrwsr-x 2 root equipe 4096 Oct 15 11:00 /srv/equipe « o "s" é o setgid
Depois de sair e entrar de novo na sessão (para o grupo valer), teste:
$ touch /srv/equipe/plano.txt $ ls -l /srv/equipe/plano.txt -rw-rw-r-- 1 ana equipe 0 Oct 15 11:05 /srv/equipe/plano.txt « grupo equipe, com rw para o grupo
umask: as permissões de quem acabou de nascer
Quando você cria um arquivo, ele já nasce com permissões. Quem decide quais é a umask (user mask, "máscara do usuário"). Ela não dá permissões: ela diz quais tirar do máximo.
- O máximo para arquivos é
666(rw-rw-rw-): arquivos nunca nascem executáveis. - O máximo para pastas é
777(rwxrwxrwx). - A umask tira os bits dela desse máximo.
$ umask 0002 « o padrão do Ubuntu para usuários comuns $ umask -S u=rwx,g=rwx,o=rx « o mesmo, em letras: o que fica permitido
| umask | Arquivo novo | Pasta nova | Quando usar |
|---|---|---|---|
002 | 664 rw-rw-r-- | 775 rwxrwxr-x | Padrão do Ubuntu: você e seu grupo editam |
022 | 644 rw-r--r-- | 755 rwxr-xr-x | Padrão do root e de servidores |
077 | 600 rw------- | 700 rwx------ | Máxima privacidade |
Veja a umask em ação, mudando o valor só neste terminal:
$ umask 077 $ touch privado.txt $ mkdir pasta-privada $ ls -ld privado.txt pasta-privada drwx------ 2 ana ana 4096 Oct 15 11:10 pasta-privada -rw------- 1 ana ana 0 Oct 15 11:10 privado.txt
A mudança vale até você fechar o terminal. Para torná-la permanente, acrescente a linha umask 077 ao seu ~/.bashrc (veja .bashrc, alias, PATH).
Quando não funciona
$ chown joao relatorio.ods chown: changing ownership of 'relatorio.ods': Operation not permitted (os error 1)
O que aconteceu: um usuário comum não pode dar arquivos para outra pessoa, nem pegar arquivos dos outros. É uma regra de segurança.
Como resolver: sudo chown joao relatorio.ods.
$ sudo chown joaoo relatorio.ods chown: usuário inválido: 'joaoo' $ chgrp finaceiro relatorio.ods chgrp: invalid group: 'finaceiro'
O que aconteceu: o usuário ou grupo não existe. Nesses exemplos, os nomes foram digitados errado.
Como confirmar: getent passwd joao e getent group financeiro mostram a linha se o nome existir.
O que aconteceu: o grupo do arquivo está certo, mas faltam permissões para o grupo (por exemplo, -rw-r--r-- não tem w no grupo), ou a pessoa entrou no grupo e ainda não refez o login.
Como resolver: chmod g+w arquivo, e peça para a pessoa sair e entrar de novo na sessão.
$ chown -R
erro: os seguintes argumentos obrigatórios não foram fornecidos:
<OWNER>
<FILE>...
Usage: chown [OPÇÃO]... [PROPRIETÁRIO][:[GRUPO]] ARQUIVO...
chown [OPÇÃO]... --reference=RFILE ARQUIVO...
Para obter mais informações, use '--help'.
O que aconteceu: faltaram o dono e o arquivo. A mensagem lista o que está faltando (OWNER = dono, FILE = arquivo) e mostra a forma certa na linha Usage.
Referência
| Comando / opção | Descrição | Exemplo |
|---|---|---|
chown usuario arq | Muda o dono | sudo chown joao a.txt |
chown usuario:grupo arq | Muda dono e grupo | sudo chown www-data:www-data index.html |
chown -R | Pasta e todo o conteúdo | sudo chown -R ana:ana ~/projeto |
chown -h | Muda o link simbólico, não o alvo | sudo chown -h ana atalho |
chown --reference=a b | Copia dono e grupo de outro arquivo | sudo chown --reference=a.txt b.txt |
chown -v / -c | Mostra cada arquivo / só os alterados | sudo chown -Rc ana pasta |
chgrp grupo arq | Muda só o grupo | chgrp equipe plano.txt |
umask / umask -S | Mostra a máscara (número / letras) | umask |
umask 077 | Muda a máscara neste terminal | umask 022 |
stat -c "%U %G" arq | Mostra dono e grupo | stat -c "%U:%G %n" * |
Exercícios
1. Devolver o arquivo
O arquivo notas.txt na sua pasta ficou com dono root. Complete para devolvê-lo à ana, com o grupo ana:
2. Site inteiro
Complete para entregar a pasta do site, com tudo o que tem dentro, ao usuário e ao grupo www-data:
3. Só o grupo
Complete para mudar só o grupo de plano.txt para equipe:
4. Com umask 022, com quais permissões nasce um arquivo novo?
5. A ana rodou chown joao arquivo.txt (sem sudo) num arquivo dela. O que acontece?
Resumo
- Dono e grupo são a 3ª e a 4ª colunas do
ls -l. sudo chown usuario:grupo arqmuda os dois;-Rfaz o mesmo numa pasta inteira.chgrpmuda só o grupo e funciona sem sudo se você for dono do arquivo e participar do grupo.- Arquivo criado com sudo fica do root; devolva com
sudo chown ana:ana. - A umask tira permissões dos arquivos novos:
002→ 664/775,022→ 644/755,077→ 600/700.