Entendendo o umask - Controlando Permissoes Padrao de Arquivos

Entendendo o umask - Controlando Permissoes Padrao de Arquivos

O Que e o umask?

umask e uma mascara que controla as permissoes padrao atribuidas a arquivos e diretorios recem-criados. Ele remove bits de permissao especificos das permissoes maximas permitidas -- 666 para arquivos e 777 para diretorios -- usando uma operacao bitwise AND NOT.

Resumo Rapido

  • Permissoes maximas padrao para arquivos: 666 (rw-rw-rw-)
  • Permissoes maximas padrao para diretorios: 777 (rwxrwxrwx)
  • Com umask 022: arquivos recebem 644 (rw-r--r--), diretorios recebem 755 (rwxr-xr-x)

Como o umask Funciona?

umask especifica os bits a serem removidos das permissoes maximas padrao. Qualquer bit definido no umask e removido das permissoes resultantes.

A Formula

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--)

Subtracao vs. AND NOT

O umask e frequentemente descrito como "subtrair" das permissoes, mas ele usa AND NOT bitwise -- nao subtracao aritmetica. Com umask 023, por exemplo, o resultado nao e 666 - 023 = 643 mas 644, porque os bits de write e execute para other sao tratados como bits independentes, ambos removidos pela mascara.

Como Verificar o umask Atual

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

$ umask
0022

Para uma representacao simbolica legivel:

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

O 0 inicial representa os bits especiais (setuid, setgid, sticky). Na pratica, o valor e tipicamente mostrado como 0022.

Como Definir o umask

Passe um valor para umask para alterar a configuracao. Isso se aplica apenas a sessao atual do shell -- abrir um novo terminal redefine para o padrao do sistema.

Configuracao temporaria

$ 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 inicializacao do seu shell para que seja aplicado automaticamente a cada login.

Configuracao por usuario

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

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

Configuracao 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 distribuicoes Linux definem o umask padrao do sistema em /etc/profile ou via /etc/login.defs (sistemas baseados em PAM). Verifique esses arquivos para entender a configuracao base do seu sistema.

Valores Comuns de umask

umask Permissoes de arquivo Permissoes de diretorio 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 seguranca

Nunca use umask 000. Ele deixa todos os bits de permissao intactos, significando que cada novo arquivo e legivel e gravavel por todos.

Por Que o umask Nao Concede Permissoes de Execucao

Independentemente do umask, arquivos criados com touch ou a maioria dos editores nao recebem permissoes de execucao. O maximo para arquivos e 666, entao mesmo umask 000 produz rw-rw-rw- -- bits de execucao 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 executavel, 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 Diretorios setgid

Quando um diretorio tem o bit setgid (SGID) definido, arquivos criados dentro dele herdam o grupo do diretorio. Combinado com umask 002, isso permite diretorios 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 Referencia 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 -- expoe todos os arquivos a leitura/escrita mundial
  • Esquecer que alteracoes temporarias do umask sao redefinidas quando a sessao termina
  • Ignorar a diferenca entre arquivos de inicializacao do shell de login e shell interativo ao fazer alteracoes persistentes

Proximas Leituras