No Linux, cada arquivo e diretório possui um conjunto de permissões que determinam quem pode ler, escrever e executar. Essas permissões são fundamentais para a segurança e o funcionamento do sistema. Nesta aula, vamos explorar o modelo rwx, como alterar permissões com chmod, mudar proprietário e grupo com chown e chgrp, e controlar permissões padrão com umask.

Dominar permissões é essencial para administrar sistemas multiusuário e garantir que apenas usuários autorizados tenham acesso a arquivos sensíveis. Vamos começar entendendo a representação simbólica e numérica das permissões.

Modelo rwx

As permissões no Linux são divididas em três grupos: dono (owner), grupo (group) e outros (others). Para cada grupo, existem três permissões: leitura (r), escrita (w) e execução (x). A ausência de uma permissão é representada por um hífen (-).

Por exemplo, a string rwxr-xr-- significa: dono tem permissão total (rwx), grupo tem permissão de leitura e execução (r-x), e outros têm apenas leitura (r--). Para diretórios, a permissão de execução (x) permite entrar no diretório (usar cd).

Para visualizar as permissões, use ls -l. Exemplo:

$ ls -l arquivo.txt
-rw-r--r-- 1 user group 1024 Mar 10 10:00 arquivo.txt

O primeiro caractere indica o tipo (- para arquivo, d para diretório). Os próximos nove caracteres são as permissões em três grupos de três.

chmod (octal e simbólico)

O comando chmod altera as permissões de arquivos e diretórios. Existem duas formas: simbólica e octal (numérica).

Modo simbólico: Usa letras para indicar quem (u=user, g=group, o=others, a=all) e operadores (+ para adicionar, - para remover, = para definir exatamente). Exemplo: chmod u+x arquivo.sh adiciona permissão de execução ao dono.

$ chmod u+x script.sh
$ chmod g-w dados.txt
$ chmod o=r relatorio.pdf

Modo octal: Cada permissão tem um valor numérico: r=4, w=2, x=1. Somam-se os valores para cada grupo, formando um número de três dígitos (dono, grupo, outros). Exemplo: 755 significa rwxr-xr-x (7=4+2+1, 5=4+1).

$ chmod 755 script.sh
$ chmod 644 arquivo.txt

É comum usar 755 para scripts executáveis e 644 para arquivos regulares. Diretórios geralmente usam 755 para permitir acesso.

chown e chgrp

O comando chown altera o proprietário (e opcionalmente o grupo) de um arquivo. Apenas o root pode mudar o dono, mas o dono pode mudar o grupo se for membro do novo grupo. Sintaxe: chown [dono][:grupo] arquivo.

$ sudo chown maria arquivo.txt
$ sudo chown maria:dev equipe.txt
$ sudo chown :admin dados.dat   # muda apenas o grupo

chgrp altera apenas o grupo. É equivalente a chown :grupo.

$ chgrp dev projeto.txt

Para alterar recursivamente em diretórios, use a opção -R (cuidado!).

umask

O umask define as permissões padrão para novos arquivos e diretórios. Ele funciona como uma máscara que subtrai permissões do valor máximo (666 para arquivos, 777 para diretórios). O valor do umask é um número octal de três dígitos.

Por exemplo, umask 022 resulta em permissões 644 para arquivos (666 - 022 = 644) e 755 para diretórios (777 - 022 = 755). Umask 077 cria arquivos com 600 e diretórios com 700.

$ umask 022
$ touch novo.txt
$ ls -l novo.txt
-rw-r--r-- 1 user group 0 Mar 10 10:00 novo.txt

Para ver o umask atual, digite umask sem argumentos. Para alterar permanentemente, coloque o comando no arquivo de inicialização do shell (~/.bashrc).

Boas práticas

Sempre use o modo octal para scripts, pois é mais preciso. Evite permissões 777 a menos que necessário. Para diretórios compartilhados, considere usar o sticky bit (chmod +t) para evitar que usuários deletem arquivos alheios. Lembre-se de que permissões de execução em scripts são essenciais para rodá-los.

Referências

Exercícios

  1. Qual comando adiciona permissão de execução para o grupo no arquivo script.sh?

    ✓ Resposta: chmod g+x script.sh
  2. Usando modo octal, quais permissões resultam de chmod 750 em um arquivo?

    ✓ Resposta: Dono: rwx (7), Grupo: r-x (5), Outros: --- (0). Ou seja, rwxr-x---.
  3. Como alterar o proprietário do diretório /projeto para o usuário joao e grupo dev recursivamente?

    ✓ Resposta: sudo chown -R joao:dev /projeto
  4. Qual o umask necessário para que novos arquivos tenham permissão 640 e novos diretórios 750?

    ✓ Resposta: Para arquivos: 666 - 640 = 026. Para diretórios: 777 - 750 = 027. O umask deve ser 027 (o maior valor entre os dois, ou use 026 se quiser apenas arquivos, mas o comum é usar 027). Resposta: umask 027
  5. Qual comando torna o arquivo dados.txt somente leitura para todos?

    ✓ Resposta: chmod a=r dados.txt ou chmod 444 dados.txt