Entendendo o umask - Controlando Permissões Padrão de Arquivos

Entendendo o umask - Controlando Permissões Padrão de Arquivos

O Que é o umask?

umask é uma máscara que controla as permissões padrão atribuídas a arquivos e diretórios recem-criados. Ele remove bits de permissão específicos das permissões máximas permitidas -- 666 para arquivos e 777 para diretórios -- usando uma operação bitwise AND NOT.

Resumo Rápido

  • Permissões máximas padrão para arquivos: 666 (rw-rw-rw-)
  • Permissões máximas padrão para diretórios: 777 (rwxrwxrwx)
  • Com umask 022: arquivos recebem 644 (rw-r--r--), diretórios recebem 755 (rwxr-xr-x)

Como o umask Funciona?

umask especifica os bits a serem removidos das permissões máximas padrão. Qualquer bit definido no umask é removido das permissões resultantes.

A Fórmula

permissoes reais = maximo padrao AND NOT(umask)

Exemplo com umask 022 criando um arquivo:

  666  = 110 110 110  (owner: rw-, group: rw-, other: rw-)
  022  = 000 010 010  (mascara remove escrita do grupo e escrita de outros)
─────────────────────────────────────────────────────────────
= 644  = 110 100 100  (owner: rw-, group: r--, other: r--)

Subtração vs. AND NOT

O umask é frequentemente descrito como "subtrair" das permissões, mas ele usa AND NOT bitwise -- não subtração aritmética. Com umask 023, por exemplo, o resultado não é 666 - 023 = 643 mas 644, porque os bits de write e execute para other são tratados como bits independentes, ambos removidos pela máscara.

Como Verificar o umask Atual

Execute umask sem argumentos para exibir o valor atual em octal:

$ umask
0022

Para uma representação simbólica legível:

$ umask -S
u=rwx,g=rx,o=rx

O 0 inicial representa os bits especiais (setuid, setgid, sticky). Na prática, o valor é tipicamente mostrado como 0022.

Como Definir o umask

Passe um valor para umask para alterar a configuração. Isso se aplica apenas à sessão atual do shell -- abrir um novo terminal redefine para o padrão do sistema.

Configuração temporária

$ umask 022    # Padrao comum para a maioria dos ambientes
$ umask 027    # Impedir escrita do grupo, bloquear outros completamente
$ umask 077    # Acesso somente pelo proprietario (mais restritivo)
$ umask 002    # Permitir escrita do grupo (ambientes colaborativos)

Verifique o efeito criando arquivos:

$ umask 022
$ touch testfile.txt
$ ls -la testfile.txt
-rw-r--r-- 1 user user 0 Jun  1 10:00 testfile.txt

$ umask 077
$ touch private.txt
$ ls -la private.txt
-rw------- 1 user user 0 Jun  1 10:00 private.txt

Como Tornar o umask Persistente

Adicione o comando umask ao arquivo de inicialização do seu shell para que seja aplicado automaticamente a cada login.

Configuração por usuário

# ~/.bashrc (shell interativo bash)
echo 'umask 022' >> ~/.bashrc
source ~/.bashrc

# ~/.profile ou ~/.bash_profile (shell de login)
echo 'umask 022' >> ~/.profile

Configuração para todo o sistema

# /etc/profile se aplica a todos os shells de login dos usuarios
# Requer privilegios root
sudo nano /etc/profile
# Adicione no final: umask 022

Muitas distribuições Linux definem o umask padrão do sistema em /etc/profile ou via /etc/login.defs (sistemas baseados em PAM). Verifique esses arquivos para entender a configuração base do seu sistema.

Valores Comuns de umask

umask Permissões de arquivo Permissões de diretório Caso de uso
022 644 (rw-r--r--) 755 (rwxr-xr-x) Ambiente geral desktop / servidor
027 640 (rw-r-----) 750 (rwxr-x---) Restringir escrita do grupo, bloquear outros
077 600 (rw-------) 700 (rwx------) Arquivos confidenciais, uso pessoal
002 664 (rw-rw-r--) 775 (rwxrwxr-x) Ambiente de desenvolvimento em grupo

Nota de segurança

Nunca use umask 000. Ele deixa todos os bits de permissão intactos, significando que cada novo arquivo é legível e gravável por todos.

Por Que o umask Não Concede Permissões de Execução

Independentemente do umask, arquivos criados com touch ou a maioria dos editores não recebem permissões de execução. O máximo para arquivos é 666, então mesmo umask 000 produz rw-rw-rw- -- bits de execução nunca aparecem apenas pelo umask.

$ umask 000
$ touch script.sh
$ ls -la script.sh
-rw-rw-rw- 1 user user 0 Jun  1 10:00 script.sh   # sem bit x

Para tornar um script executável, conceda explicitamente com chmod:

$ chmod +x script.sh
$ ls -la script.sh
-rwxrwxrwx 1 user user 0 Jun  1 10:00 script.sh

umask e Diretórios setgid

Quando um diretório tem o bit setgid (SGID) definido, arquivos criados dentro dele herdam o grupo do diretório. Combinado com umask 002, isso permite diretórios compartilhados onde todos os membros do grupo podem escrever.

# Verificar diretorio SGID (note o 's' na posicao de execucao do grupo)
$ ls -ld /var/shared/
drwxrwsr-x 2 root devteam 4096 Jun  1 10:00 /var/shared/

# Com umask 002, a permissao de escrita do grupo e preservada em novos arquivos
$ umask 002
$ touch /var/shared/project.conf
$ ls -la /var/shared/project.conf
-rw-rw-r-- 1 user devteam 0 Jun  1 10:00 /var/shared/project.conf

Resumo

Folha de Referência do umask

umask           # Mostrar valor atual (numerico)
umask -S        # Mostrar valor atual (simbolico)
umask 022       # Padrao (arquivo: 644, dir: 755)
umask 077       # Mais restritivo (somente proprietario)
umask 002       # Ambiente de colaboracao em grupo

O que evitar

  • Usar umask 000 -- expõe todos os arquivos a leitura/escrita mundial
  • Esquecer que alterações temporárias do umask são redefinidas quando a sessão termina
  • Ignorar a diferença entre arquivos de inicialização do shell de login e shell interativo ao fazer alterações persistentes

Próximas Leituras