Para que realmente serve umask
o comando no *nix OS?
Como é seu mecanismo de funcionamento e utilidade? por exemplo
$ umask 022
Muito obrigado antes
Responder1
umask
éum comando interno da maioria dos shells que é apenas uma interface para a umask()
chamada do sistema, e vocêencontrará sua descrição na documentação do seu shell (cuidado, man umask
você pode apontar para a documentação da umask()
chamada do sistema ou para o umask
interno de um shell diferente do seu).
A máscara do usuário é um atributo de um processo (herdado do pai para os filhos e preservado na execução do comando) que determina quais permissões são concedidas automaticamente aos arquivos por padrão quando criados.
O umask
utilitário permite definir a máscara do usuário do processo shell para controlar as permissões dos arquivos criados por qualquer comando executado na sessão shell.
O umask
de todos os shells toma a máscara como um número octal, enquanto em alguns shells, incluindo todos os POSIX, ela também pode ser especificada em uma forma simbólica como for chmod
.
A máscara determina quais partes das permissões devem serlimpoquando o arquivo é criado. Por exemplo umask 777
, onde 0777 é 511 ou 0b111_111_111 faria com que os arquivos fossem criados sem permissão, pois todos os 9¹ bits das permissões de arquivo Unix (3 ( r
ler, w
escrever e x
executar) parado utilizador, 3 paragrupo, 3 paraoutro) seria apagado.
A forma simbólica especifica quais bits devemnãoser limpo. Assim umask 777
seria umask u=,g=,o=
.
Geralmente, você deseja que pelo menos o umask inclua o w
bit para o
thers, pois não deseja que os arquivos criados sejam graváveis em todo o mundo ( umask 002
ou umask u=rwx,g=rwx,o=rx
).
Você provavelmente desejará que o w
bit g
roup também seja definido, pelo menos em sistemas onde o grupo principal do usuário não é pessoal (é compartilhado com outros usuários): umask 022
ou umask u=rwx,g=rx,o=rx
.
Um umask 077
ou umask u=rwx,g=,o=
garante que todos os arquivos criados sejam privados para você (não acessíveis a mais ninguém). Você costuma ver isso em scripts que criam arquivos temporários, às vezes em um subshell, como em:
(umask 077; echo test > "$tmpfile")
Definir umask
bits para o u
ser pode causar problemas, pois você pode acabar criando arquivos que nem você consegue abrir.
Observe que a máscara de usuário aplicadaem cimadas permissões solicitadas pelos aplicativos quando eles open()
ou creat()
um arquivo. Se fizerem isso, creat("file", 0666)
while umask
is 022
( u=rwx,g=rx,o=rx
), as permissões acabarão sendo 0644
( u=rw,g=r,o=r
). Os aplicativos ainda podem ligar fchmod()
ou chmod()
posteriormente para alterar as permissões como quiserem (e o umask não tem efeito nisso).
umask
sem argumentos informa a máscara do usuário atual em formato octal. umask -S
em alguns shells, reporte isso de forma simbólica. umask -p
in bash
ou fish
gera código shell que, uma vez interpretado, definiria a mesma máscara de usuário.
Isso pode ser usado para restaurar o umask anterior depois de modificá-lo:
previous_umask=$(umask)
umask 077
# create some private files
umask "$previous_umask"
¹ Tecnicamente, existem 12 bits de permissões onde os 3 extras são bits especiais usados para vários fins dependendo do tipo de arquivo e às vezes combinados com outros bits de permissão (como setuid, bits setgid para executáveis, t
bit para diretórios. .). Em alguns sistemas, esses bits são ignorados quando solicitados em open()
/ creat()
e de qualquer maneira, quando são definidos por aplicativos (geralmente via chmod()
posterior), é por um bom motivo, portanto, geralmente não é útil incluí-los no umask
e a umask()
chamada do sistema irá ignorá-los de qualquer forma.