Umask para leigos

Introdução

O que é Umask?

Umask pode ser definida como máscara de usuário. Esta função padroniza a criação de diretórios e arquivos, ou seja, quando você criar um novo diretório ou arquivo no Linux, ele herdará da Umask definida no sistema, suas devidas permissões.

A Umask padrão, em quase todas as distribuições do GNU/Linux, é 0022.

Até aí, ok. Ou mais ou menos, afinal, o Linux já definiu esta Umask, meus arquivos são criados com permissões especificas, porém, a grande questão é:

– Como chegamos a este resultado?
– Como o sistema realiza este cálculo?

Antes de tudo, precisamos entender como o Linux trata diretórios e arquivos (é, existe uma diferença).

Para o Linux, a permissão máxima para a criação de um diretório é:

→ 777 (rwx-rwx-rwx)  (111-111-111)

Já para os arquivos, ele assume que a permissão máxima para criação de um novo arquivo, é:

→ 666 (rw-rw-rw-) (110-110-110)

O motivo de o Linux tratar os arquivos diferentemente dos diretórios, é que a permissão de Execução (–x) (001), quando aplicada a um arquivo, o torna executável; sendo assim, o Linux deixa isso por conta do administrador do sistema, para que esta permissão apenas seja aplicada a script, ou programas, ou serviços (daemons).

Já para um diretório, a permissão (–x) (001), representa você poder acessa-lo.

Essa parte é de grande importância para compreensão da Umask, na verdade, para realizar o calculo, já estamos quase lá. 🙂

Funcionamento / Cálculo

Entendendo seu funcionamento

Após entender a diferença entre diretório e arquivo, vamos verificar qual a Umask está definida em nosso sistema, veja um exemplo:

Linux: Umask para leigos

Sendo assim, vamos verificar quais as permissões esta Umask atribuirá aos diretórios e arquivos criados no sistema.

Realizei um acesso até a pasta Documents/

E criei um diretório e um arquivo, logo em seguida, efetuei um comando para listar as permissões e os arquivos, comando equivalente ao ls -l, no caso da distribuição utilizada para realização do artigo.

Linux: Umask para leigos

Veja, para o diretório, esta Umask definiu as permissões:

  • rwx :: para o dono do diretório.
  • r-x :: para o grupo do diretório.
  • r-x :: para outros.

Já para os arquivos, houve uma diferença. Veja:

  • -rw :: para o dono do arquivo.
  • r– :: para o grupo do arquivo.
  • r– :: para outros.

Nesta parte, já fica mais fácil compreender o por quê. O mesmo foi criado diferente do diretório. Eu já vi muitos artigos, dicas e tutorias, ensinando cálculo de Umask, tanto pela Internet, como em livros.

Porém, o método de regras gerais, regras de exceção ou AND or NOT, creio ser muito confuso para quem está iniciando no mundo do terminal.

Neste artigo, você não irá se basear em regras e sim, aprender o método de cálculo binário, transforma-lo em octal e saber quais letras estes geram, ou seja, aprender para não precisar de regras ou macetes, além de ser mais fácil.

Para isto, veja esta imagem:

Linux: Umask para leigos

Tomaremos como base para calcular a Umask, o campo binário desta imagem.

A pouco, eu abordei que o Linux trata as permissões máximas para criação de um diretório, diferente de um arquivo. Os arquivos quando são criados, não herdam a permissão de execução.

Sendo assim, foi retirado este atributo do dono, grupo e outros. Isso será muito válido, quando formos executar o cálculo da Umask.

Vejamos como o Linux chegou a este resultado, as permissões máximas para criação de um diretório, são:

→ 777 (rwx/rwx/rwx) (111-111-111)

Sabendo que a Umask definida é 0022 (o primeiro número destina-se às permissões especiais como SUID, SGUID e Stick), não abordarei este assunto no artigo.

Sendo assim, interprete como 022:

→ 022 (—/-w-/-w-) (000-010-010)

O Linux vai subtrair a máscara da permissão total de criação, veja:

  • 777 (111-111-111) :: Permissão máxima para criação de Diretório.
  • 022 (000-010-010) :: Umask Desejada.
  • 755 (111-101-101) :: Permissão para diretórios.
  • 111 (001-001-001) :: Subtrair a permissão de execução.
  • 644 (110-100-100) :: Permissão para arquivos.

Veja como é simples, é só retirar a permissão de execução em todos os grupos (dono, grupo e outros), para obter a permissão padrão para criação de arquivos.

Como eu sei que o Linux não irá inserir as permissões de execução nos arquivos, eu subtraio esta permissão.

Agora, vamos ver se tudo isso que eu falei condiz com a realidade.

Calculando a Umask

Tendo como base a permissão máxima de criação de diretórios e a Umask desejada, vamos realizar algumas operações.

Sugiro que você realize os testes no seu diretório /tmp, para que tudo seja apagado no próximo boot do sistema.

$ cd /tmp

Agora, crie um diretório para começar a brincadeira, no meu caso, criei o diretório UMASK.

$ mkdir UMASK

Eu vou definir que todos os diretórios criados abaixo de UMASK, sejam criados com as seguintes permissões:

  • DONO = leitura, gravação e execução.
  • GRUPO = leitura e execução.
  • OUTROS = Nenhuma permissão.

Vejamos como calcular esta Umask. Eu vou subtrair as permissões que eu não desejo que os grupos tenham da permissão total que o Linux assume, sendo assim, eu terei minha permissão final. E o número da Umask, será este número subtraído da permissão total.

Veja:

  • 777 111-111-111 :: Permissão máxima para criação de diretórios.
  • 027 000-010-111 :: Umask desejada.
  • 750 111-101-000 :: Permissão dos diretórios.
  • 110 001-001-000 :: Subtrair a permissão de execução.
  • 640 110-100-000 :: Permissão de arquivos.

(Neste caso, não subtrai do grupo OUTROS, pois o mesmo já estava sem permissões, não sendo necessário retirar algo de onde não existe. 🙂

Veja o exemplo:

Linux: Umask para leigos

Vamos dizer que eu gostaria de definir a Umask para esta pasta como 007. Vejamos como ficariam as permissões para diretórios e arquivos:

  • 777 (111-111-111)
  • 007 (000-000-111)
  • 770 (111-111-000) :: Permissão para diretórios.
  • 110 (001-001-000) :: Retirando a permissão de execução.
  • 660 (110-110-000) :: Permissão para arquivos.

Neste caso, também não foi retirada a permissão de outros, pois os mesmos já não possuíam permissão alguma.

Calculando desta forma, utilizando a parte binária e retirando a permissão de execução da permissão obtida para diretórios, conseguimos facilmente a permissão para arquivos, sem utilizar regra alguma.

Linux: Umask para leigos

Ou seja, caso você precise implementar, ou esteja estudando para LPIC 101, isto ajudará bastante na hora de realizar os cálculos e não vacilar em algo relativamente simples, mas um pouco difícil de ser compreendido.

Obrigado a todos,
Dúvidas, criticas ou sugestões, comentem. 🙂

Rolar para cima