Linux / Comando umask: definir permissões de novos arquivos
umask define quais bits de permissão serão retirados quando o processo criar novos arquivos ou diretórios. No shell, a configuração é herdada pelos processos filhos; ela não muda as permissões de arquivos já existentes. Com pedidos usuais de criação e sem uma lista de controle de acesso (ACL) padrão no diretório pai, a máscara 022 costuma resultar em arquivos 644 e diretórios 755.
Sintaxe e implementação
umask [-p] [-S] [máscara]
No Bash, umask é um comando interno. Consulte help umask no próprio shell para confirmar as opções disponíveis; outros shells podem oferecer formatos diferentes. A máscara numérica é interpretada em base oito: use apenas dígitos de 0 a 7. Os colchetes da sintaxe indicam argumentos opcionais, não caracteres a digitar.
Consultar a máscara atual
Sem argumento, o comando mostra o valor atual em formato octal:
umask
Por exemplo, 0022 representa a máscara 022. Esse número descreve os bits a retirar, não o modo de um arquivo existente. Para ver a forma simbólica:
umask -S
Com a máscara 027, o Bash mostra u=rwx,g=rx,o=. Nessa exibição, as letras indicam as permissões permitidas pela máscara para o proprietário (u), o grupo (g) e os demais usuários (o). Isso não garante execução em novos arquivos: o programa criador também precisa solicitar esse bit.
Alterar e restaurar a configuração do shell
Antes de experimentar no shell atual, guarde o valor com umask_anterior=$(umask). O exemplo a seguir altera a máscara e a consulta novamente:
umask 027
umask
No Bash, a consulta deve mostrar 0027. A configuração passa a valer para criações posteriores desse shell e de seus processos filhos. Ela não muda o shell que o iniciou nem processos que já estavam em execução. Para repor o valor salvo, execute umask "$umask_anterior" no mesmo shell; não escolha 022 como restauração sem conhecer o valor anterior.
Em vez de alterar o shell interativo, o exercício seguinte usa parênteses para criar um subshell. A máscara e a mudança de diretório ficam nesse contexto e terminam com ele. Salvar um número não faz uma restauração automática: no primeiro exemplo, é preciso executar a reposição explicitamente.
Criar arquivo e diretório numa pasta nova
Use Bash e ferramentas GNU num diretório gravável. O bloco cria uma subpasta exclusiva com mktemp e só avança quando a etapa anterior termina com sucesso, por causa dos &&. Assim, demo.txt e demo-dir ainda não existem no local de prática:
(
umask_lab=$(mktemp -d ./umask-demo.XXXXXX) &&
cd -- "$umask_lab" &&
umask 027 &&
umask &&
touch demo.txt &&
mkdir demo-dir &&
stat -c '%a %n' demo.txt demo-dir
)
Saída esperada num sistema Linux em que touch peça 0666, mkdir peça 0777 e o diretório pai não tenha uma ACL padrão:
0027
640 demo.txt
750 demo-dir
O modo 640 permite leitura e escrita ao proprietário, leitura ao grupo e nenhum desses bits aos demais usuários. No diretório 750, o proprietário recebe leitura, escrita e busca; o grupo recebe leitura e busca; os demais não recebem esses bits. O x de um diretório permite busca ou travessia, não significa executar seu conteúdo como um programa.
Confira o diagnóstico se uma etapa falhar. Um nome já existente pode fazer mkdir falhar; touch sobre um arquivo existente apenas atualiza seus horários e não recalcula seu modo pela máscara. O exemplo deixa os itens na subpasta de prática e não altera arquivos de outras pastas.
Na verificação com Bash 5.3.9 e GNU stat 8.32 do Git para Windows, o bloco mostrou 0027, 640 e 750. Consultas em outros contextos de shell apresentaram modos diferentes. Esses resultados não verificam a imposição de permissões entre contas num Linux; confira o modo, a ACL e o acesso no sistema de arquivos Linux onde fará a tarefa.
Entender a retirada de bits
Sem ACL padrão no diretório pai, a regra é aplicar ao modo solicitado os bits que a máscara deixa passar: modo solicitado & ~máscara, considerando os bits de permissão. Para 0666 e 0027, o resultado é 0640; para 0777 e 0027, é 0750. Não faça uma subtração aritmética comum: 0666 menos 0027 em octal daria 0637, que não é o resultado dessa operação de bits.
Um programa pode pedir 0600 desde o início; a máscara 022 não acrescenta leitura ao grupo nem aos demais usuários. Da mesma forma, uma máscara 000 não dá automaticamente execução a um arquivo cujo pedido foi 0666. O resultado depende do pedido de criação e pode ainda ser alterado posteriormente pelo próprio programa.
Uma lista de controle de acesso, ou ACL, padrão no diretório pai muda a regra no Linux: a ACL padrão é herdada, a umask é ignorada nesse cálculo e os bits ausentes do modo solicitado são retirados. O manual Linux de umask(2) descreve essa exceção. Não atribua automaticamente uma diferença de modo a um erro da máscara; examine também a ACL e o sistema de arquivos.
Máscaras e opções comuns
| Formato | Significado |
|---|---|
022 |
Retira escrita do grupo e dos demais; com pedidos 0666 e 0777, os modos usuais são 0644 e 0755. |
027 |
Retira escrita do grupo e todos os bits dos demais; nas mesmas condições, resulta em 0640 e 0750. |
077 |
Retira todos os bits do grupo e dos demais; nas mesmas condições, resulta em 0600 e 0700. |
-S |
Sem nova máscara, mostra a forma simbólica das permissões permitidas pela máscara. |
-p |
No Bash, sem nova máscara, imprime uma forma reutilizável como comando, por exemplo umask 0027. |
Os resultados numéricos da tabela pressupõem a regra sem ACL padrão mencionada acima. Escolha a máscara conforme a necessidade de compartilhamento; 077 restringe os bits do grupo, portanto não serve automaticamente a uma pasta em que colegas precisam ler ou escrever novos arquivos.
Escopo, persistência e arquivos existentes
Um filho herda a máscara do pai, mas pode substituí-la. Executar umask num Bash separado não reconfigura o shell pai. Uma alteração interativa também não é, por si só, uma configuração permanente para logins futuros, serviços ou contêineres. Identifique o processo que cria o arquivo e a configuração de inicialização desse contexto antes de mudar políticas.
Para ajustar os bits de um arquivo existente, use o comando chmod. A máscara também não escolhe o proprietário nem o grupo do novo item. Quando o objetivo é acesso compartilhado, confira o grupo e os bits, como explicado no guia de chgrp, além da travessia dos diretórios do caminho e das demais políticas aplicáveis.
No Bash, uma máscara inválida produz diagnóstico e status diferente de zero. Consulte echo "$?" imediatamente após a operação para verificar seu status, e depois use umask para conferir o valor. Um status de sucesso do comando não substitui a consulta do modo e do acesso efetivo ao arquivo criado.
Pergunta frequente
Umask 022 transforma os arquivos existentes em 644?
Não. A máscara participa da criação de novos itens no contexto do processo; ela não modifica os arquivos existentes. Mesmo para um novo arquivo, 644 depende do modo solicitado e da ausência de condições como uma ACL padrão que determine outro cálculo.
Documentação
Consulte a seção de comandos internos do Bash, incluindo umask para a sintaxe, as formas numérica e simbólica e as opções do shell.




