Informática

Linux: chmod em octal e simbólico, umask e bits especiais

Permissões de arquivos no Linux caem em prova de forma previsível: dado um modo como rwxr-x---, qual o número? Dado um chmod, como o arquivo fica? Dada uma umask, qual a permissão de um arquivo novo? Este guia aprofunda o que o guia de Windows e Linux comparados apresenta, com as conversões conferidas por cálculo executado.

A estrutura de 10 caracteres

A saída de ls -l começa com dez caracteres, por exemplo -rwxr-xr--:

Posição Significado
1 tipo: - arquivo comum, d diretório, l link simbólico
2 a 4 permissões do dono (user)
5 a 7 permissões do grupo (group)
8 a 10 permissões dos outros (others)

Cada trio é r (leitura), w (escrita) e x (execução), com - quando falta a permissão. O sistema aplica uma única classe: se você é o dono, valem as permissões do dono, mesmo que as do grupo sejam mais amplas.

Valores octais

Cada permissão vale um número: r = 4, w = 2, x = 1. Soma-se por trio.

rwx Conta Octal
rwx 4 + 2 + 1 7
rw- 4 + 2 6
r-x 4 + 1 5
r-- 4 4
-wx 2 + 1 3
--x 1 1
--- 0 0

Modos comuns, conferidos na conversão:

Octal Símbolos Uso típico
755 rwxr-xr-x programas e diretórios públicos
644 rw-r--r-- arquivos de texto comuns
600 rw------- arquivos privados do dono
700 rwx------ diretório privado
750 rwxr-x--- dono total, grupo lê e entra, outros nada
640 rw-r----- dono edita, grupo lê
664 rw-rw-r-- dono e grupo editam
444 r--r--r-- somente leitura para todos

Exemplo de leitura reversa: rwxr-x--- vira 7 (dono), 5 (grupo) e 0 (outros), ou seja, 750.

O que r, w e x significam em diretórios

Em arquivos, o sentido é direto. Em diretórios, muda:

  • r: listar os nomes dentro do diretório.
  • w: criar, renomear e apagar entradas dentro dele (em geral combinado com x).
  • x: atravessar o diretório, isto é, acessar itens dentro dele pelo nome e usá-lo como parte de um caminho.

Consequência cobrada: para apagar um arquivo, o que importa é a permissão de escrita no diretório, não no arquivo.

chmod em notação simbólica

Formato: chmod [quem][operador][permissões] arquivo. Quem: u (dono), g (grupo), o (outros), a (todos). Operador: + acrescenta, - remove, = define exatamente.

Cálculos conferidos a partir de um arquivo inicial:

Modo inicial Comando Modo final
644 chmod u+x 744 (rwxr--r--)
755 chmod go-w 755 (já não havia w para grupo e outros)
644 chmod go= 600 (rw-------)
640 chmod g+x 650 (rw-r-x---)
qualquer chmod a+r acrescenta leitura a todos

Observe a segunda linha: remover o que já não existe não altera nada, e isso é uma pegadinha comum. Em notação octal, chmod 750 arquivo substitui o modo inteiro de uma vez. A opção -R aplica a todo o conteúdo de um diretório, o que pede cuidado: dar x a todos os arquivos comuns raramente é desejável.

umask: o que sai do modo padrão

Programas criam arquivos pedindo, em geral, o modo 666 (sem execução) e diretórios com 777. A umask é uma máscara de bits que remove permissões desse padrão: modo final = padrão com os bits da umask desligados.

umask Arquivo novo (666) Diretório novo (777)
022 644 755
027 640 750
077 600 700
002 664 775

Como calcular: subtraia dígito a dígito, sem emprestar (o resultado nunca é negativo). Com umask 022 e arquivo 666: 6-0=6, 6-2=4, 6-2=4, resultando em 644. Para ser exato, a operação é “padrão E (NÃO umask)”; a subtração dígito a dígito dá o mesmo resultado para as umasks comuns. Observe que arquivos novos não nascem executáveis, mesmo com umask 000: o padrão de 666 não tem x. A umask de um terminal de teste foi 022. O comando umask sem argumentos mostra o valor vigente; o valor padrão varia por sistema e configuração.

Bits especiais

Um quarto dígito, à esquerda, guarda três bits especiais: 4 (setuid), 2 (setgid) e 1 (sticky).

Bit Efeito em arquivo executável Efeito em diretório
setuid (4) executa com a identidade do dono do arquivo sem efeito usual
setgid (2) executa com o grupo do arquivo arquivos novos herdam o grupo do diretório
sticky (1) sem efeito usual hoje só o dono do arquivo (ou do diretório) pode apagar ou renomear entradas

O sticky bit é a razão pela qual diretórios compartilhados de arquivos temporários, onde todos escrevem, não permitem que um usuário apague os arquivos de outro. Em ls -l, aparece como t no lugar do x dos outros; o setuid, como s no lugar do x do dono. O modo 4755 é setuid mais rwxr-xr-x.

Setuid em programa é sensível do ponto de vista de segurança: uma falha nesse programa pode dar a um usuário comum os privilégios do dono. Por isso, auditorias procuram esses arquivos.

Mudando dono e grupo

  • chown usuario arquivo: muda o dono.
  • chgrp grupo arquivo: muda o grupo.
  • chown usuario:grupo arquivo: muda os dois.

Em geral, só o administrador (root) pode mudar o dono; o dono pode mudar as permissões.

Passo a passo para questões

  1. Separe o modo em três trios e ignore o primeiro caractere.
  2. Converta cada trio em um número.
  3. Para chmod simbólico, aplique a mudança só ao grupo citado.
  4. Para umask, parta de 666 (arquivos) ou 777 (diretórios) e remova os bits da máscara.
  5. Releia o enunciado: pode pedir a permissão de quem é “outros”.

Erros comuns

  • Achar que a umask se soma ao modo, em vez de ser removida dele.
  • Esperar arquivos novos executáveis por padrão.
  • Esquecer que permissão para apagar vem do diretório.
  • Trocar a ordem dono, grupo e outros.
  • Confundir chmod (permissões) com chown (propriedade).

Fontes e atualização

Não há norma oficial brasileira sobre permissões em Linux; o conteúdo segue as convenções do padrão POSIX e a prática das distribuições. As conversões foram conferidas por cálculo executado, e os efeitos de ls e stat não puderam ser testados em sistema de arquivos Linux real nesta redação; por isso, o guia se limita ao que é padrão consolidado. Confira o edital: a banca pode adotar uma distribuição específica.

Próximos passos

Leia também

Para continuar no site

Viu algo errado, desatualizado ou confuso? Relatar erro nesta página