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 recebem644(rw-r--r--), diretórios recebem755(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