O que é umask e como usá-lo em Linux?

Três pastas azuis sobre fundo em dégradé verde, com quatro retângulos pretos em cada uma. Os retângulos exibem os números 0, 0, 7 e 7, da esquerda para a direita.

Índice de conteúdo:

  1. Algumas palavras sobre umask
  2. Vamos experimentar como funciona?
  3. Alteração permanente do umask a nível do utilizador comum

Algumas palavras sobre umask

O comando umask (User File Creation Mask) é usado para definir as permissões padrão para ficheiros e diretórios a serem criados em sistemas Linux. Este comando só afeta ficheiros e diretórios recém-criados; portanto, os já existentes mantêm as permissões previamente definidas.

O Umask é um valor de 4 dígitos octais (ex: 0022), embora frequentemente vejamos apenas os 3 últimos (ex: 022). O primeiro dígito, quando presente, refere-se a permissões especiais (SUID, SGID, Sticky bit), e geralmente é '0' para permissões padrão. Esta ferramenta pode ajudar a reforçar a segurança. Ao definirmos um umask mais restritivo, reduzimos as possibilidades de utilizadores não autorizados acederem aos nossos ficheiros.

Evite usar umask 000 (cria ficheiros/diretórios com 666/777.

É claro que podemos criar os ficheiros e depois alterar as permissões, mas a aplicação do umask facilita essa tarefa.

Imagine que vamos criar dez ficheiros nos quais queremos que apenas o proprietário tenha permissões de leitura e escrita, e não queremos que o grupo e outros tenham quaisquer permissões. Precisamos, neste caso, aplicar as permissões 600, na forma numérica de permissões, que dá ao dono do ficheiro as permissões de leitura e escrita e retira todas as permissões ao grupo e a outros. Isso corresponde a rw------- na representação simbólica de permissões.

Mas sabemos que o umask padrão é 0022. Criar os dez ficheiros com esse padrão resultaria em permissões de leitura e escrita para o proprietário dos ficheiros e apenas leitura para o grupo e outros. Ou seja, os ficheiros teriam as permissões 644, o que não é o que pretendemos. Assim, teríamos de alterar as permissões para 600 usando o comando chmod 600 nomeDosFicheiros. Imagina o trabalho de usar o chmod (Change mode) em cada um dos ficheiros ou diretórios criados!

Neste caso, todo o trabalho é facilitado ao definirmos o umask 0066 e, a partir dele, criarmos os nossos dez ficheiros.

O umask definido no terminal onde nos encontramos só funciona nesse terminal e não tem caráter permanente. Para que uma nova definição do umask seja permanente, deverá ser acrescentada ao ficheiro .bashrc.

A ideia é: estando num terminal, se precisarmos de criar cinco ficheiros com o mesmo padrão de permissões, como sendo 600, definimos o umask para esse padrão. Se precisarmos agora de criar oito diretórios com um novo padrão de permissões, por exemplo o 770 (leitura, escrita e execução para o proprietário e para o grupo; e nenhuma permissão para os outros), redefinimos o umask para esse novo padrão. O Umask para 770 seria 0007 (777 - 0007 = 770).

As permissões completas para ficheiros são 666, que inclui apenas leitura e escrita (não execução). Isso ocorre porque, por padrão, ficheiros comuns (não executáveis) não precisam da permissão x para funcionar. No entanto, scripts ou programas exigirão permissão de execução (+x) manualmente, caso necessário.

As permissões completas para diretórios são 777, concedendo permissões de leitura, escrita e execução ao proprietário, grupo e outros utilizadores. São completas porque concedem todas as permissões de forma igual a todos os utilizadores do sistema.

Atenção à segurança!
  • 777 em diretórios ou 666 em ficheiros podem ser riscos graves, pois permitem que qualquer ulitizador do sistema modifique ou apague conteúdos.
  • Ficheiros com permissão 666 são editáveis por todos, o que pode facilitar ataques de injeção de código (ex.: scripts maliciosos).
  • Diretórios com 777 permitem que qualquer usuário crie/delete arquivos, comprometendo a integridade do sistema.

O valor umask é subtraído das permissões completas para determinar as permissões efetivas de novos ficheiros ou diretórios.

Normalmente, quando criamos um novo diretório ou um novo ficheiro, as permissões aplicadas são as predefinidas, geralmente 755 para diretórios e 644 para ficheiros. Isso acontece devido à definição padrão do umask, que neste caso é 0022.

0022 + 0755 = 0777, e 0777 representa as permissões plenas dos diretórios.

0022 + 0644 = 0666, e 0666 representa as permissões plenas dos ficheiros.

Permissões plenas em ficheiros e diretórios
  • 777 rwxrwxrwx para diretório
  • 666 rw-rw-rw- para ficheiro
Relação umask, permissões definidas e permissões plenas
  • 0022 + 755 = 777 777 representa as permissões plenas de diretório
  • 0022 + 644 = 666 666 representa as permissões plenas de ficheiro
Explicação da relação do umask com as permissões desejadas e com as permissões plenas.
Permissões 755 aplicadas num diretório e o que conferem a cada utilizador do sistema
  • Proprietário do diretório - pode ler, editar e executar o diretório.
  • Membros do grupo do diretório - podem ler e executar o diretório.
  • Todos os outros utilizadores - podem ler e executar o diretório.
Permissões 644 aplicadas num ficheiro e o que conferem a cada utilizador do sistema
  • Proprietário do ficheiro: - pode ler e editar o ficheiro.
  • Membros do grupo do ficheiro - podem ler o ficheiro.
  • Todos os outros utilizadores - podem ler o ficheiro.
Tabela nº 1 - Relação entre o valor do umask e as permissões efetivas
Num diretório as permissões plenas são 777 rwxrwxrwx
Permissões Subtração Valor modo umask
777 777 - 777 0000
764 777 - 764 0013
755 777 - 755 0022
754 777 - 754 0023

Tabela nº 2 - Relação entre o valor do umask e as permissões efetivas
Num ficheiro as permissões plenas são 666 rw-rw-rw-
Permissões Subtração Valor modo umask
666 666 - 666 0000
662 666 - 662 0004
644 666 - 644 0022
600 666 - 600 0066

Vamos experimentar como funciona?

Lista de tarefas para o experimento:
  1. Vamos saber qual o umask predefinido no nosso sistema.
  2. Vamos criar cinco diretórios com essa predefinição do umask.
  3. Abrimos um terminal, que vamos chamar de **terminal 1**, e alteramos o modo umask. No mesmo terminal, criamos os diretórios. Queremos que os novos diretórios criados tenham as permissões 700: queremos dar permissões de leitura, escrita e execução para o proprietário dos diretórios, mas nenhuma permissão para os membros do grupo nem para todos os outros.
  4. Criar 5 novos diretórios com a nova umask.
  5. Criar 5 novos ficheiros com a nova umask.
  6. Abrir outro terminal, que vamos chamar de **terminal 2**, e criar 5 novos diretórios.

1 - Saber qual o umask predefinido no nosso sistema

O comando umask tem esta forma:

umask [-p] [-S] [mode]

A opção -p exibe o valor atual do modo umask. Na imagem abaixo, vemos que esse modo predefinido é 0022.

Comando umask com a opção -p

A opção -S mostra o valor do umask em forma de notação simbólica.

Comando umask com a opção -S

E se fizermos um teste como utilizador root?

Comando umask como usuário root

2 - Vamos criar cinco diretórios com essa predefinição do umask

Primeiro, verificamos qual umask está predefinido e criamos 5 diretórios no terminal atual, ao qual vamos chamar terminal 1.

testa qual umask está como predefinido e cria directórios com o umask predefinido

No meu caso, vemos que os diretórios foram criados com as permissões padrão do sistema (0022), e este também poderá ser o seu caso, caso não tenha havido redefinição do umask padrão.

3 - Vamos alterar o modo umask no mesmo terminal no qual nos encontramos.

O argumento mode especifica o valor desejado do umask. Aqui, redefinimos o modo padrão para 0077.

Comando umask com o argumanto do umask desejado
Comando umask com o argumanto do umask desejado

4 - Criar cinco novos diretórios com a nova umask

Redefinimos o umask para 0077 neste terminal e criamos cinco diretórios.

Altera umask e cria directórios com o novo umask e lista directŕios criados

5 - Criar cinco novos ficheiros com a nova umask

Com o mesmo umask 0077 neste terminal, criamos cinco ficheiros que terão o nome de: teste__umask-007__terminal-1__n.txt.

Criados também ficheiros com o umask 0077

6 - Abrir outro terminal e criar cinco novos diretórios

Abrimos um novo terminal, ao qual vamos chamar terminal 2, e criamos cinco diretórios que terão o nome de: teste__umask-007__terminal-2__n.

Abre outro teminal e cria novos directórios para testar se a alteração do umask continua prevalecendo.

Podemos verificar pela imagem que os cinco diretórios criados no terminal 2 têm outras permissões: 755. Estas concedem permissões de leitura, escrita e execução para o proprietário do diretório; para o grupo, permissões de leitura e execução; e para todos os outros, também leitura e execução. Isto ocorre porque, ao definirmos um novo modo umask no terminal anterior (terminal 1), o modo funciona apenas nesse terminal, caso não editemos o ficheiro .bashrc para definir ali um novo modo padrão. Sendo assim, os diretórios criados no terminal 2 continuam com as permissões definidas pelo modo umask padrão 0022, que é o modo atual do sistema.

Alteração permanente do umask a nível do utilizador comum

A definição do umask que fizemos anteriormente só funciona na sessão do terminal em que nos encontramos. Não tem efeito permanente, pois ao fecharmos o terminal, a definição do umask que havíamos feito desaparece.

Para que tenha efeito permanente, é necessário adicionar essa definição no ficheiro .bashrc.

Vamos iniciar este teste?

Para adicionarmos um novo umask padrão:
  • Abrimos o ficheiro .bashrc — num editor de texto; neste exemplo, usaremos o editor Vim.
  • Inserimos o modo do umask que pretendemos definir como novo padrão.
  • Gravamos a alteração e saímos do editor Vim.
  • Para que as alterações tenham efeito no mesmo terminal, fazemos o reload do ficheiro .bashrc com o comando source ~/.bashrc. Ao abrirmos um novo terminal e executarmos o comando umask, veremos a alteração aplicada.

Verificamos, em primeiro lugar, qual é o umask que temos como padrão.

Verificando o umask default antes de alterar para um outro.

Abrimos o ficheiro .bashrc no editor Vim

$ vim .bashrc
  1. Navegamos com o cursor até ao final do documento usando as teclas Shift + G
  2. Entramos em modo de inserção de texto: tecla i
  3. Na última linha, inserimos a nova definição do umask padrão 0077, conferindo permissões de leitura, escrita e execução para o proprietário e nenhuma permissão para grupo e outros.
  4. Feita a alteração, voltamos ao modo normal do Vim premindo a tecla Esc
  5. Guardamos as alterações e saímos do editor com o comando: :wq
Editando o ficheiro .bashrc introduzindo um novo padrão para umask o que será 0077, conferindo as permissões de leitura, escrita e execução para o proprietário do arquivo e nenhuma permissão para o grupo do arquivo e todos os outros.
Verificando o umask default após alterar para um outro, aida continua o mesmo por estarmos no mesmo terminal.
Verificando o umask default após alteração para um outro no mesmo terminal e desta vez a alteração feita aparece que é o umask 0077. Isto porque foi feito o reload do .bashrc neste terminal com o comando 'source ~/.bashrc'.

Chegámos ao fim de mais um post, desta vez abordando a permissão padrão de ficheiros e diretórios. Falámos sobre o comando umask (User File Creation Mask) e a forma de mudar as definições do modo padrão usando esse comando como utilizador normal no nosso sistema.

Espero que este post tenha acrescentado algo mais ao que até este momento sabias. Se já tinhas conhecimento do umask, também espero que haja algo por aqui que sirva para refrescar a memória.

Falando em permissões, caso seja também do teu interesse:

Conclusão

Com este pequeno experimento, aprendemos como o umask influencia diretamente as permissões atribuídas a novos ficheiros e diretórios no momento da sua criação. Vimos que, ao alterar o valor do umask, conseguimos controlar de forma precisa quem pode aceder ou modificar os nossos ficheiros e pastas.

Este conhecimento é particularmente útil em ambientes multiutilizador, onde a gestão adequada de permissões é essencial para garantir a segurança e a privacidade dos dados. Também percebemos que cada terminal herda o valor do umask no momento da sua abertura, o que significa que alterações feitas num terminal não afetam outros já abertos.

Experimenta tu mesmo com diferentes valores de umask e observa o comportamento do sistema. Esta é uma ótima forma de consolidar o conhecimento e ganhar maior controlo sobre o teu ambiente Linux.

Índice de conteúdo:

  1. Algumas palavras sobre umask
  2. Vamos experimentar como funciona?
  3. Alteração permanente do umask a nível do utilizador comum

Teste seus conhecimentos!

Curioso para saber o quanto você absorveu sobre Umask? Clique no botão abaixo para fazer um rápido quiz e desafie sua compreensão:

Comentários

Mensagens populares deste blogue

Dominando o Comando history no Linux

Aliases no Linux: Domine a Linha de Comando com Praticidade e Eficiência

Problemas com o Nome de Usuário? Aprenda a Renomeá-lo no Linux