segunda-feira, 14 de agosto de 2023

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

Head-post-image

Índice de conteúdo:

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

Algumas palavras sobre umask

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

O umask é uma ferramenta que pode ajudar a reforçar a segurança. Ao definirmos um umask mais restritivo reduzimos as possibilidades de utilizadores não autorizados acessarem os nossos arquivos.

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

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

Mas sabemos que temos um umask padrão de 0022, criando os dez ficheiros com esse padrão resultaria na autorização de leitura e escrita para o proprietário dos arquivos e permissão de leitura para o grupo e outros, pelo que os ficheiros teriam as permissões 644, e não é isso que queremos, mas como os ficheiros foram criados com permissões 644 terão de ser alterados para 600 usando o comando chmod 600 nomeDosFicheiros, imaginas o trabalho de usar o chmod (Change mode) em cada um dos ficheiros ou directórios criados?

Neste caso, todo o trabalho nos é facilitado ao definirmos o umask 0023 e a partir dele criar 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, precisamos criar cinco ficheiros com o mesmo padrão de permissões, como sendo 600, definimos o umask para esse padrão; precisamos agora criar oito directórios com um novo padrão de permissões, por exemplo o 775 (leitura, escrita e execução para o proprietário dos directórios; leitura, escrita e execução para o grupo ao qual os directórios pertencem e só leitura e execução para todos os outros) redefinimos o umask para esse novo padrão.

As permissões completas para arquivos são 666, o que dá permissões de leitura e gravação ao proprietário, grupo e outros usuários.

As permissões completas para directórios são 777 e concedem permissões de leitura, gravação e execução ao proprietário, grupo e outros usuários. São completas porque concedem todas as permissões em grau de igualdade para todos os usuários do sistema.

O valor umask é determinado quando o valor das permissões efetivas dos novos arquivos é subtraído do valor das permissões completas do arquivo.

Normalmente, quando criamos um novo diretório ou um novo arquivo, as permissões aplicadas nos diretórios ou arquivos criados são as permissões predefinidas e costumam ser: 755 para diretórios e 644 para arquivos. Isso acontece dado a definição padrão do modo umask que neste caso é 0022.

0022+0755 = 777 e 777 representa as permissões plenas dos directórios.

0022+0644 = 666 e 666 representa as permissões plenas dos arquivos.

Permissões plenas em arquivos e directórios
  • 777 rwxrwxrwx para directório
  • 666 rw-rw-rw- para arquivo
Relação umask, permissões definidas e permissões plenas
  • 0022 + 755 = 777 777 representa as permissões plenas de directório
  • 0022 + 644 = 666 666 representa as permissões plenas de arquivo
Explicação da relação do umask com as permissões desejadas e com as permissões plenas.
Permissões 755 aplicadas num directório e o que conferem a cada utilizador do sistema
  • Poprietário do directório - pode ler, editar e executar o diretório.
  • Membros do Grupo do directório - podem ler e executar o diretório.
  • Todos os outros usuários - podem ler e executar o diretório
Permissões 644 aplicadas num arquivo e o que conferem a cada utilizador do sistema.
  • Poprietário do arquivo: - pode ler e editar o arquivo..
  • Membros do Grupo do arquivo - podem ler o arquivo.
  • Todos os outros usuários - podem ler o arquivo
Tabela nº 1 - Relação entre o valor do umask e as permissões efectivas
Num directório as permissões plenas são 777 rwxrwxrwx
Permissões Subtração Valor modo de 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 efectivas
Num ficheiro as permissões plenas são 666 rw-rw-rw-
Permissões Subtração Valor modo de 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 predefenido no nosso sistema.
  2. Vamos criar cinco directórios com essa predefinição do umask
  3. Abrimos um terminal ao qual vamos chamar terminal 1 e alteramos o modo umask, e no mesmo terminal criamos os directórios. Queremos que os novos directórios criados tenham as permissões 700. Queremos dar permissões de leitura, escrita e execução para o proprietário dos directórios, para membros do grupo dos directórios e todos os outros nenhuma permissão.
  4. Criar 5 novos directórios com a nova umask
  5. Criar 5 novos ficheiros com a nova umask
  6. Abrir outro terminal ao qual vamos chamar de terminal 2 e criar 5 novos directórios

1 - Saber qual o umask predefenido no nosso sistema

O comando umask tem esta forma:

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

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

Comando umask com a opção -p

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

Comando umask com a opção -S

E se fizermos um teste como usuário root?

Comando umask como usuário root

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

Primeiro nos informamos de qual umask está como predefinido e criamos 5 directórios no terminal atual que vamos chamar de terminal-1.

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

No meu caso vemos que os directórios foram criados com as permissões padrão do sistema 0022 e isto também poderá ser o teu, 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 directórios com a nova umask

Redefinimos o umask 0077 neste terminal e criamos cinco directó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

Abrir outro terminal e criar cinco novos directórios

Abrimos um novo terminal ao qual vamos chamar de terminal-2 e criamos cinco directó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 directórios criados no terminal 2 têm outras permissões: 755, que dão permissões de leitura, escrita e execução para o proprietário do directório, para o grupo as permissões de leitura e execução e para todos os outros tabém leitura e execução. Isto é porque ao definirmos um novo modo umask no terminal anterior, terminal 1, o modo funciona só nesse terminal caso não editemos o ficheiro .bashrc e colocarmos ali um novo modo padrão e sendo assim os directórios criados no terminal 2 têm as permissões definidas pelo modo padrão umask 0022 que é o actual modo padrão do sistema.

Alteração permanente do umask a nível do usuário comum

A definição do umask que fizemos anteriormente só funciona na sessão do terminal no qual nos encontramos. Não tem efeito permanente porque ao fecharmos o terminal a definição do umask que tínhamos feito. desaparece

Para que tenha efeito permanente temos que adicionar essa definição do umask no ficheiro .bashrc.

Vamos iniciar este teste?

Para adicionarmos um novo umask padrão.
  • Abrimos o ficheiro .bashrc - num editor de texto, vou usar o editor Vim
  • Inserimos o mode do umask - que pretendemos passe a ser o modo padrão.
  • Gravamos a alteração e saimos do editor Vim
  • Para que as alterações passem a ser efetivas no mesmo terminal, fazemos o reload do ficheiro .bashrc nesse terminal source ~/.bashrc , mas se abrirmos um novo terminal e darmos o comando umask vemos a alteração efetuada.

Verificamos em primeiro lugar qual umask temos como padrão

Verificando o umask default antes de alterar para um outro.

Abrimos o ficheiro .bashrc no editor Vim

$ vim .bashrc
Abrindo o ficheiro .bashrc no editor Vim
  1. Navegamos com o cursor até o final do documento usando as teclas <Shift> + g (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 as permissões de leitura, escrita e execução para o proprietário do arquivo e nenhuma permissão para grupo e outros.
  4. Feita a alteração, voltamos ao modo normal do editor Vim premindo a tecla <Esc>
  5. Guardamos as alterações feitas e saimos do editor Vim: 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'.

Chegamos ao fim de mais um post, desta vez abordando permissão padrão de ficheiros e directórios. Falamos sobre comando umask (User File Creation Mask) e a forma de mudar as definições do modo padrão usando esse comando como usuário 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:

Índice de conteúdo:

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

Sem comentários:

Enviar um comentário