Acredito que umask é algo que controla as permissões de arquivo , mas não o entendo completamente.
Depois de executar umask 0644
em um terminal , não consigo ler os arquivos criados com o editor de texto da linha de comando nano
. Notei que as permissões desse arquivo estão definidas como em 0022
vez do padrão 0755
.
Como umask funciona? Eu pensei que eu poderia apenas remover a cada dígito na umask partir 0777
, 7 - 6 = 1
e 7 - 4 = 3
, por isso espero que as permissões para ser 0133
, mas, aparentemente, este não é o caso.
- O que é umask exatamente? Explique-me como se eu fosse um "Linux noob"
- Como faço para calcular com umask?
- O que são casos de uso para umask?
permissions
umask
Lekensteyn
fonte
fonte
app_mode 666 rw- rw- rw-
umask 644 --0 -00 -00
file_mode 022 --- -w- -w-
Respostas:
O umask atua como um conjunto de permissões que os aplicativos não podem definir nos arquivos. É uma máscara de criação de modo de arquivo para processos e não pode ser definida para os próprios diretórios. A maioria dos aplicativos não criaria arquivos com permissões de execução definidas, portanto, eles teriam um padrão de
666
, que é modificado pelo umask.Como você configurou o umask para remover os bits de leitura / gravação do proprietário e os bits de leitura de outros, um padrão, como
777
nos aplicativos, resultaria em permissões de arquivo133
. Isso significaria que você (e outros) poderiam executar o arquivo e outros seriam capazes de gravá-lo.Se você quiser fazer com que os arquivos não sejam lidos / gravados / executados por qualquer pessoa, exceto pelo proprietário, você deve usar umask como
077
para desativar essas permissões para o grupo e outros.Por outro lado, uma umask
000
tornará os diretórios recém-criados legíveis, graváveis e descendentes para todos (as permissões serão777
). Essa umask é altamente insegura e você nunca deve configurá-la para000
.O umask padrão no Ubuntu era o
022
que significa que os arquivos recém-criados são legíveis por todos, mas somente graváveis pelo proprietário:A partir do Ubuntu Oneiric (11.10), o umask padrão foi relaxado
002
, o que expande o acesso de gravação ao grupo do proprietário:Visualizando e Modificando umask
Para visualizar sua configuração atual do umask, abra um terminal e execute o comando:
Para alterar a configuração umask do shell atual para outra coisa, digamos 077, execute:
Para testar se essa configuração funciona ou não, você pode criar um novo arquivo (as permissões de arquivo de um arquivo existente não serão afetadas) e mostrar informações sobre o arquivo, execute:
A configuração do umask é herdada pelos processos iniciados no mesmo shell. Por exemplo, inicie o editor de texto GEdit executando
gedit
no terminal e salve um arquivo usando o gedit. Você notará que o arquivo recém-criado é afetado pela mesma configuração umask do terminal.Caso de uso: sistema multiusuário
Se você estiver em um sistema compartilhado por vários usuários, é desejável que outras pessoas não possam ler arquivos no diretório inicial. Para isso, uma umask é muito útil. Edite
~/.profile
e adicione uma nova linha com:Você precisa fazer login novamente para que essa alteração umask entre em
~/.profile
vigor. Em seguida, você precisa alterar as permissões de arquivos existentes no diretório inicial, removendo os bits de leitura, gravação e execução para o mundo. Abra um terminal e execute:Se você deseja que essa configuração umask seja aplicada a todos os usuários no sistema, você pode editar o arquivo de perfil em todo o sistema em
/etc/profile
.fonte
777
significa que o grupo e outros serão capazes de escrever, enquanto077
significa que não podem?000
, a permissão do arquivo será777
. Portanto, com uma máscara padrão de022
, as permissões de arquivo não deveriam ser755
, ou seja, correspondentes a-rwxr-xr-x
, não-rw-r--r--
?000
, nenhuma permissão será removida. aplicativos gostamtouch
enano
criam arquivos com o padrão,666
para que a permissão do arquivo permaneça,666
mas uma umask022
removerá os bits de gravação para o grupo e outros, então666
é reduzida para644
aka-rw-r--r--
Consideremkdir
o modo de criação padrão777
com uma umask022
reduz as permissões para755
Além da boa discussão na resposta aceita, vale a pena acrescentar mais alguns pontos sobre
umask
, com referência à forma como ela é gerenciada a partir do 12.04.Umask e pam_umask
O umask padrão agora está dentro
/etc/login.defs
e não está/etc/profile
, como diz a nota oficial/etc/profile
:Pam_umask
é explicado brevemente abaixo e deve-se dizer que o arquivo padrão para o usuário colocar sua configuração personalizada de umask ainda é~/.profile
.Pam_umask
é um dos muitos módulos PAM importantes que são cruciais na operação do Ubuntu (executeapropos '^pam_'
para encontrar as páginas de manual dos outros). Na página de manual parapam_umask
observa-se queUma observação no umask padrão
Novas pastas
$HOME
podem ser criadasmkdir
com permissões 775 padrão e arquivos criados comtouch
permissões 664 padrão, mesmo quando o umask padrão é 022. Isso parece, a princípio, contraditório e vale a pena explicar.Enquanto o umask padrão é 022 no Ubuntu, essa não é a história completa, pois existe uma configuração
/etc/login.defs
que permite que o umask seja 002 para usuários não-root se uma condição for atendida (veja o trecho abaixo). Em uma instalação normal,/etc/login.defs
contém a configuraçãoUSERGROUPS_ENAB yes
. Isso é o quePor isso, você vê o seguinte com
stat
quando uma nova pasta é criadamkdir
em um sistema de usuário único como o meu (uid e gid são os mesmos):Para obter mais informações, consulte
man pam_umask
e o Ubuntu manpages online .fonte
/etc/login.defs
é definitivamenteUSERGROUPS_ENAB yes
após a verificação. A sintaxe desse arquivo é um pouco incomum.Isso é bem antigo, mas vale a pena mencionar. Para calcular a umask, diferente das permissões do sistema de arquivos. As umasks octais são calculadas através do AND bit a bit do complemento unário do argumento usando NOT bit a bit. As notações octais são as seguintes:
Em seguida, você pode calcular para definir premissas adequadas para umask, como:
Cálculo da permissão final para arquivos
Você pode simplesmente subtrair o umask das permissões base para determinar a permissão final para o arquivo da seguinte maneira:
666
022
(666-022)
:644 (rw-r–r–)
Cálculo da permissão final para diretórios
Você pode simplesmente subtrair o umask das permissões base para determinar a permissão final para o diretório da seguinte maneira:
777
022
(777-022)
:755 (rwxr-xr-x)
fonte
077
como você subtrairia666-077
nesse caso?Outros respondidos explicaram muito bem o conceito de umasking e por que é necessário. Deixe-me adicionar meus dois centavos e dar um exemplo matemático de como as permissões são realmente calculadas.
Antes de tudo, “Máscara” não significa “subtrair”, no sentido aritmético - não há empréstimos ou transferências envolvidos; em segundo lugar,
umask
é uma máscara; não é um número a ser subtraído.Terceiro, a máscara desativa os bits de permissão. Se eles já estiverem desativados, a
umask
alteração não será feita na permissão,Por exemplo, suponha que você precise desmascarar
077
os padrões do sistema para arquivos666
e diretórios777
.O comando que você usará é,
(desmascarar o valor em binário
000 111 111
)O que esse desmascaramento fará é desativar qualquer um dos seis primeiros LSBs (bits menos significativos) se houver
1
e não fará nenhuma alteração se algum deles já estiver desativado.Aqui está como a permissão final é calculada:
Observe como os dois
110
valores foram alterados para000
.Similarmente,
fonte
umask 177
(001 111 111), ele irá desligar primeiros 7 bits menos significativos se eles são1
result = file permission & (!umask)
Conceito básico:
Se você é como a maioria dos humanos e não entende o que diabos "umasks octal são calculadas através do AND bit a bit do complemento unário do argumento usando NOT bit a bit" significa, aqui está minha explicação simples:
Antes de tudo, pense no que é uma "máscara". Uma máscara bloqueia alguma coisa. Pense em fita adesiva. Nesse caso, umask é como fita adesiva para bloquear / desativar permissões ao criar um novo arquivo ou diretório.
As permissões padrão ao criar um novo diretório é
octal 777 (111 111 111)
e um novo arquivo éoctal 666 (110 110 110)
. Definimos o umask para bloquear / desativar determinadas permissões.1
para bloquear / desativar essa permissão (coloque fita adesiva sobre esse bit).0
permitirá a permissão de passagem (sem fita adesiva sobre esse pedaço).Assim, uma
octal 022 (000 010 010)
máscara significa desativargroup write
eothers write
, e permitir que todas as outras permissões para passar.Cálculo:
Aqui está um exemplo de cálculo para um novo arquivo (permissão padrão 666) com umask 022:
Então é assim que você acaba com o resultado de 644 quando cria um novo arquivo.
Maneira mais fácil:
Mas se os cálculos de máscara inversa confundem você, existe uma maneira mais fácil de usar a notação simbólica umask. Quando você usa esse método, está apenas especificando os bits de passagem em vez dos bits da máscara.
umask u=rwx,g=rx,o=rx
meios permitem passar através deuser rwx
,group rx
,other rx
. O que implica desativargroup w
,others w
. Se você executar este comando, verifiqueumask
, você receberá022
.umask u=rwx,g=,o=
significa permitir passagem poruser rwx
. O que implica desativar todo o acesso paragroup
eothers
. Se você executar este comando, verifiqueumask
, você receberá077
.Cálculo de bônus:
Se você realmente deseja entender o que "umasks octal são calculadas através do AND bit a bit do complemento unário do argumento usando NOT bit a bit" significa, aqui estão algumas tabelas lógicas que podem ajudar a demonstrar. Lembre-se, um bit de máscara
1
significa desativar,0
significa passar.Se você preparar a mesa
NOT(mask)
, agora é apenas umaAND
tabela lógica simples !Portanto, a fórmula para isso é:
result = perm AND (NOT mask)
fonte