div>Updated: 03/13/2021 por Computer Hope
Em sistemas operativos do tipo Unix, o comando umask retorna, ou define, o valor da máscara de criação do modo de ficheiro do sistema.
Esta página cobre a versão Linux de umask.
Descrição
No Linux e noutros sistemas operativos do tipo Unix, são criados novos ficheiros com um conjunto padrão de permissões. Especificamente, as permissões de um novo ficheiro podem ser restringidas de uma forma específica através da aplicação de uma “máscara” de permissões chamada “umask”. O comando umask é utilizado para definir esta máscara, ou para lhe mostrar o seu valor actual.
Syntax
umask
Opções
-S | Aceitar uma representação simbólica de uma máscara, ou devolver uma. |
mask | Se for especificada uma máscara válida, a máscara é definida para este valor. Se não for especificada uma máscara, o valor actual da máscara é devolvido. |
O que são as permissões, e como funcionam?
Como deve saber, cada ficheiro no seu sistema tem associado um conjunto de permissões utilizadas para proteger ficheiros: as permissões de um ficheiro determinam quais os utilizadores que podem aceder a esse ficheiro, e que tipo de acesso têm ao mesmo.
Existem três classes gerais de utilizadores:
- O utilizador que possui o ficheiro (“Utilizador”).
- Os utilizadores pertencentes ao grupo de propriedade definido do ficheiro (“Grupo”).
- Todos os outros (“Outros”).
Por sua vez, para cada uma destas classes de utilizadores, existem três tipos de acesso ao ficheiro:
- A capacidade de olhar para o conteúdo do ficheiro (“Ler”).
- A capacidade de alterar o conteúdo do ficheiro (“Write”).
- A capacidade de executar o conteúdo do ficheiro como um programa no sistema (“Execute”).
Assim, para cada uma das três classes de utilizador, existem três tipos de acesso. Em conjunto, esta informação constitui as permissões do ficheiro.
Como são representadas as permissões?
Existem duas formas de representar as permissões de um ficheiro: simbolicamente (utilizando símbolos como “r” para ler, “w” para escrever, e “x” para executar) ou com um valor numérico octal.
Por exemplo, ao listar o conteúdo de um directório na linha de comando utilizando o comando ls da seguinte forma:
ls -l
verá (entre outras informações) a informação de permissão do ficheiro para cada ficheiro. Aqui, é representado simbolicamente, o que se parece com o seguinte exemplo:
-rwxr-xr--
Existem aqui dez símbolos. O primeiro traço (“-“) significa que este é um ficheiro “regular”, por outras palavras, não um directório (ou um dispositivo, ou qualquer outro tipo de ficheiro especial). Os restantes nove símbolos representam as permissões: rwxr-xr–. Estes nove símbolos são na realidade três conjuntos de três símbolos cada, e representam as respectivas permissões específicas, da esquerda para a direita:
symbols | |
---|---|
rwx | o proprietário do ficheiro pode ler, escrever, ou executar este ficheiro como um processo no sistema. |
r-x | qualquer um no grupo do ficheiro pode ler ou executar este ficheiro, mas não escrever para ele. |
r–/td> | qualquer um pode ler este ficheiro, mas não escrever para ele ou executar o seu conteúdo como um processo. |
Especificar a máscara de criação do ficheiro usando símbolos
A forma simbólica geral de uma máscara é a seguinte:
...
símbolo de permissão é qualquer combinação de r (ler), w (escrever), ou x (executar), como descrito acima.
símbolo de classe de utilizador pode ser um ou mais dos seguintes:
u | Utilizador (o dono do ficheiro). |
g | Grupo (qualquer membro do grupo definido do ficheiro). |
o | Outros (qualquer outro). |
Todos (equivalente a ugo). |
operador de permissões pode ser um dos seguintes:
+ | permitir que as permissões de ficheiros especificadas sejam activadas para as classes de utilizadores especificadas (as permissões que não são especificadas mantêm-se inalteradas na máscara). |
– | proibir que as permissões de ficheiro especificadas sejam activadas para as classes de utilizador especificadas (as permissões que não são especificadas mantêm-se inalteradas na máscara). |
= | permitir que as permissões de ficheiro especificadas sejam activadas para as classes de utilizador especificadas (as permissões não especificadas serão proibidas pela máscara durante a criação do ficheiro). |
Assim, por exemplo, o seguinte comando umask:
umask u+w
configura a máscara para que, quando os ficheiros são criados, tenham permissões que permitam a permissão de escrita para o utilizador (proprietário do ficheiro). O resto das permissões do ficheiro ficariam inalteradas em relação ao padrão do sistema operativo.
Múltiplas alterações podem ser especificadas separando múltiplos conjuntos de notação simbólica com vírgulas (mas não espaços!). Por exemplo:
umask u-x,g=r,o+w
Este comando define a máscara para que, quando ficheiros subsequentes são criados, eles tenham permissões que:
- proibe que a permissão de execução seja definida para o proprietário do ficheiro (utilizador), deixando o resto das permissões do proprietário inalteradas;
li>permite a leitura do grupo, proibindo a permissão de escrita e execução para o grupo;li>permite a escrita para outros, deixando o resto das outras permissões inalteradas.
Note que se utilizar o operador de igualdade (“=”), quaisquer permissões não especificadas serão especificamente proibidas. Por exemplo, o comando
umask a=
Define a máscara de criação de ficheiros para que os novos ficheiros sejam inacessíveis a todos.
Especificar a máscara de criação de ficheiros usando representação numérica
A máscara de criação de ficheiros também pode ser representada numericamente, usando valores octal (os dígitos de 0 a 7). Ao utilizar representação numérica octal, certos números representam certas permissões, e estes números são adicionados ou subtraídos uns dos outros para representar o valor final, as permissões combinadas. Especificamente, os números 1, 2, e 4 representam as seguintes permissões:
number | th>permission |
---|---|
4 | read |
2 | write |
1 | execute |
Estes números são utilizados porque qualquer combinação destes três números será única. A tabela seguinte ilustra as suas combinações únicas:
valor de leitura + | valor de escrita + | valor exacto = | valor combinado: | |
---|---|---|---|---|
0 | 0 | 0 | /td>>>/td>>>>0 | |
0 | 1 | 1 | x | |
0 | 2 | 0 | 2 | w |
0 | 2 | 1 | 3 | wx |
0 | 0 | 4 | r | |
4 | 0 | 1 | 5 | rx |
2 | 0 | 6 | rw | |
4 | 2 | 1 | 7 | rwx |
Para cada classe de utilizador, um dígito pode representar as suas permissões; utilizando o exemplo acima, poderíamos representar a permissão simbólica do rwxr-xr– utilizando o número octal de três dígitos 754. A ordem dos dígitos é sempre a mesma: Utilizador, Grupo, Outro.
O outro dígito de permissão
Em representações octal de permissões de ficheiros, existem na realidade quatro dígitos. Os três dígitos importantes de que falámos são os últimos três dígitos. O primeiro dígito é um indicador especial de permissão de ficheiro, e para esta discussão pode ser sempre considerado como zero. Assim, a partir daqui, quando discutimos a permissão de ficheiro 777, também pode ser referido como 0777.
Então, como é que a máscara máscara funciona realmente?
A máscara mascara as permissões restringindo-as por um determinado valor.
Essencialmente, cada dígito da máscara é “subtraído” do valor por defeito do SO para chegar ao valor por defeito que se define. Não é realmente subtraído; tecnicamente, a máscara é negada (o seu cumprimento bitwise é tomado) e este valor é então aplicado às permissões padrão usando uma operação lógica AND. O resultado é que a máscara diz ao sistema operativo quais os bits de permissão a “desligar” quando cria um ficheiro.
No Linux, o valor por defeito das permissões é 666 para um ficheiro normal, e 777 para um directório. Ao criar um novo ficheiro ou directório, o kernel toma este valor por defeito, “subtrai” o valor da umask, e dá aos novos ficheiros as permissões resultantes.
Esta tabela mostra como cada dígito do valor umask afecta o novo ficheiro e as permissões do directório:
umak digit | default file permissions | default directory permissions |
---|---|---|
0 | rw | rwx |
1 | rw | rw |
2 | r | rx |
r | ||
4 | w | wx |
5 | w | w | x |
7 | (nenhuma permissão permitida) | (nenhuma permissão permitida) |
Então se o nosso valor umask for 022, então quaisquer novos ficheiros terão, por defeito, as permissões 644 (666 – 022). Da mesma forma, quaisquer novos directórios serão, por defeito, criados com as permissões 755 (777 – 022).
Exemplos
Para ver o valor actual da máscara do seu sistema, introduza o comando:
umask
que devolve a máscara do seu sistema como um número octal de quatro dígitos, por exemplo:
0002
Again, o primeiro zero é um dígito de permissão especial e pode ser ignorado; para os nossos propósitos, 0002 é o mesmo que 002.
Para ver isto como uma representação simbólica, usar a bandeira -S:
umask -S
Que retorna o mesmo valor simbolicamente, por exemplo:
u=rwx,g=rwx,o=rx
onde u representa o utilizador, g representa o grupo, e o representa o outro. Isto diz-nos que se criarmos um novo ficheiro, ele tem as permissões padrão 664, que é 666 (as permissões padrão para ficheiros) mascarado por 002 (o nosso valor umask).
Vamos testar isto criando um novo ficheiro com o comando touch:
touch testfile
E agora vamos obter uma listagem de directórios para esse ficheiro:
ls -l testfile
-rw-rw-r-- 1 myusername myusername 0 Jan 7 14:29 testfile
Como esperado, o novo ficheiro tem permissões -rw-rw-r–, ou 0664: O proprietário e o grupo podem ler ou escrever o ficheiro, e outros podem apenas lê-lo.
Agora vamos mudar a umask. Para definir umask de 022, use o comando:
umask 022
É o mesmo que executar umask 0022; se especificar apenas três dígitos, o primeiro dígito será assumido como sendo zero. Vamos verificar se a alteração ocorreu:
umask
0022
E agora vamos criar um novo ficheiro:
touch testfile2
E agora vamos ver a sua listagem de directórios, com o primeiro ficheiro que criámos, utilizando o wildcard asterisco (“*”) para ver todos os ficheiros cujo nome comece com “testfile”:
ls -l testfile*
-rw-rw-r-- 1 myusername myusername 0 Jan 7 14:29 testfile-rw-r--r-- 1 myusername myusername 0 Jan 7 14:39 testfile2
Como pode ver, testfile2 tem as permissões 644.
Aqui estão alguns outros exemplos de comandos umask:
umask a+r
Configura a máscara de modo a que novos ficheiros permitam a todos os utilizadores lê-los; outras permissões serão inalteradas em relação ao padrão.
umask a-x
Define a máscara de modo a que os novos ficheiros não sejam inicialmente executáveis por qualquer utilizador; outras permissões por defeito inalteradas em relação aos padrões.
umask u=rw,go=
Define a máscara de modo a que os novos ficheiros possam ser lidos e escritos pelo utilizador que é proprietário do ficheiro, mas não possam ser executados; os membros do grupo e outros não têm quaisquer permissões para aceder ao ficheiro.
umask 777
Fazer com que os novos ficheiros sejam inacessíveis a todos – ninguém os pode ler, escrever, ou executar.
umask 000
Fazer com que os novos ficheiros sejam completamente acessíveis (ler, escrever, e executar) a absolutamente todos. No entanto, isto é uma má ideia. Não faça isto.
chmod – Alterar as permissões dos ficheiros ou directórios.
csh – The C shell command interpreter.
ksh – The Korn shell command interpreter.
sh – The Bourne shell command interpreter.