O que é umask e como usá-lo em Linux?
Índice de conteúdo:
- Algumas palavras sobre umask
- Vamos experimentar como funciona?
- 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.
- 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.
- 777 rwxrwxrwx para diretório
- 666 rw-rw-rw- para ficheiro
- 0022 + 755 = 777 777 representa as permissões plenas de diretório
- 0022 + 644 = 666 666 representa as permissões plenas de ficheiro
- 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.
- 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.
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 |
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?
- Vamos saber qual o umask predefinido no nosso sistema.
- Vamos criar cinco diretórios com essa predefinição do umask.
- 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.
- Criar 5 novos diretórios com a nova umask.
- Criar 5 novos ficheiros com a nova umask.
- 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
.
A opção -S
mostra o valor do umask em forma de notação simbólica.
E se fizermos um teste como utilizador 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.
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
.
4 - Criar cinco novos diretórios com a nova umask
Redefinimos o umask para 0077
neste terminal e criamos cinco diretórios.
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
.
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
.
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?
- 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 comandosource ~/.bashrc
. Ao abrirmos um novo terminal e executarmos o comandoumask
, veremos a alteração aplicada.
Verificamos, em primeiro lugar, qual é o umask que temos como padrão.
Abrimos o ficheiro .bashrc no editor Vim
$ vim .bashrc
- Navegamos com o cursor até ao final do documento usando as teclas Shift + G
- Entramos em modo de inserção de texto: tecla i
- 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.
- Feita a alteração, voltamos ao modo normal do Vim premindo a tecla Esc
- Guardamos as alterações e saímos do editor com o comando:
:wq
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.
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:
- Algumas palavras sobre umask
- Vamos experimentar como funciona?
- 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
Enviar um comentário