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 recebem644(rw-r--r--), diretorios recebem755(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