Questão O que é “umask” e como funciona?


Eu acredito que umask é algo que controla permissões de arquivo, mas não entendo isso completamente.

Depois de correr umask 0644 em um terminal, Não consigo ler os arquivos que eu crio com o editor de texto de linha de comando nano. Notei que as permissões desse arquivo estão definidas para 0022 em vez do padrão 0755.

Como funciona umask? Eu pensei que eu poderia apenas remover cada dígito no umask de 0777, 7 - 6 = 1 e 7 - 4 = 3, então espero que as permissões sejam 0133, mas aparentemente, este não é o caso.

  1. O que é umask exatamente? Explique para mim como se eu fosse um "noob Linux"
  2. Como faço para calcular com umask?
  3. O que são casos de uso para umask?

160
2018-05-22 20:42


origem


app_mode 666 rw- rw- rw-  umask 644 --0 -00 -00  file_mode 022 --- -w- -w- - grabantot


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 definido para diretórios em si. A maioria dos aplicativos não criaria arquivos com permissões de execução configuradas, então eles teriam um padrão de 666, que é então modificado pelo umask.

Como você definiu o umask para remover os bits de leitura / gravação para o proprietário e os bits de leitura para os outros, um padrão como 777 em aplicativos resultaria em permissões de arquivo 133. Isso significaria que você (e outros) poderiam executar o arquivo, e outros poderiam escrever nele.

Se você quer fazer com que os arquivos não sejam lidos / escritos / executados por ninguém além do dono, você deve usar umask como 077 para desativar essas permissões para o grupo e outros.

Em contraste, um umask de 000 tornará os diretórios recém-criados legíveis, graváveis ​​e descendentes para todos (as permissões serão 777). Essa umask é altamente insegura e você nunca deve definir o umask para 000.

O padrão umask no Ubuntu é 022 o que significa que arquivos recém-criados são legíveis por todos, mas apenas graváveis ​​pelo proprietário:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

Visualizando e modificando umask

Para ver sua configuração de umask atual, abra um terminal e execute o comando:

umask

Para alterar a configuração de umask do shell atual para outra coisa, digamos, 077, execute:

umask 077

Para testar se esta configuração funciona ou não, você pode criar um Novo arquivo (permissões de arquivo de um arquivo existente não serão afetadas) e mostrar informações sobre o arquivo, execute:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

A configuração de umask é herdada por processos iniciados a partir do 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 de umask do terminal.

Caso de uso: sistema multiusuário

Se você estiver em um sistema compartilhado por vários usuários, é recomendável que outras pessoas não possam ler arquivos em seu diretório pessoal. Para isso, um umask é muito útil. Editar ~/.profile e adicione uma nova linha com:

umask 007

Você precisa fazer o login novamente para essa mudança de umask ~/.profile para fazer efeito. Em seguida, você precisa alterar as permissões de arquivos existentes em seu diretório pessoal removendo o bit de leitura, gravação e execução do mundo. Abra um terminal e execute:

chmod -R o-rwx ~

Se você quiser que essa configuração de umask seja aplicada a todos os usuários no sistema, você pode editar o arquivo de perfil de todo o sistema em /etc/profile.


125
2018-05-22 20:59



Então, o que significam os dígitos na umask? Porque 777 significa que o grupo e outros poderão escrever para ele, enquanto 077 significa que eles não podem? - HelloGoodbye
Além disso, você diz que se o umask é 000, a permissão do arquivo será 777. Então, com uma máscara padrão de 022, as permissões de arquivo não devem ser 755, isto é, correspondente a -rwxr-xr-x, não -rw-r--r--? - HelloGoodbye
Deve admitir, essa explicação me confundiu mais do que me ajudou. - Connel Hooley
Nota aquele Umask padrão do Ubuntu mudou para 0002 apenas um mês depois que essa resposta foi publicada. - Jeff Puckett
@HelloGoodbye se o umask é 000 então nenhuma permissão será removida. aplicações como touch e nano criar arquivos com padrão 666 então a permissão do arquivo permanecerá 666 mas um umask de 022 irá remover os bits de escrita para o grupo e outros, então 666 fica reduzido a 644 aka -rw-r--r-- Considerar mkdir qual modo de criação padrão de 777 com umask de 022 reduzirá as permissões para 755 - Jeff Puckett


Além da boa discussão na resposta aceita, vale acrescentar mais alguns pontos sobre umask, com referência a como ele é gerenciado em 12.04 e em diante.

Umask e pam_umask

O umask padrão está agora em /etc/login.defs e não em /etc/profile, como a nota oficial em /etc/profile lê:

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

Pam_umask é brevemente explicado abaixo, e deve ser dito que o arquivo padrão para o usuário colocar sua configuração personalizada de umask ainda é ~/.profile.

Pam_umask é um dos muitos importantes Módulos PAM que são cruciais na operação do Ubuntu (executar apropos '^pam_' para encontrar os manpages para os outros). No manpage para pam_umask Percebe-se que

O pam_umask é um módulo PAM para definir a máscara de criação do modo de arquivo do ambiente atual. O umask afeta o          permissões padrão atribuídas a arquivos recém-criados.

Uma nota no umask padrão

Novas pastas em $HOME pode ser criado por mkdir com 775 permissões padrão e arquivos criados com touch com 664 permissões padrão, mesmo quando o umask padrão é 022. Isso parece, a princípio, contraditório e vale a pena ser explicado.

Enquanto o umask padrão é 022 no Ubuntu, isso não é toda a história, como há uma configuração em /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ção USERGROUPS_ENAB yes. Isso é o que

Permite que os bits do grupo umask sejam iguais aos bits do proprietário    (exemplos: 022 -> 002, 077 -> 007) para usuários não-root, se o uid for    o mesmo que gid e o nome de usuário é o mesmo que o nome do grupo principal.

Daí porque você vê o seguinte com stat quando uma nova pasta é criada com mkdir em um sistema de usuário único como o meu (uid e gid são os mesmos):

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

Para mais informações, veja man pam_umask e a Manpages Ubuntu on-line.


35
2018-04-02 00:16



Parece que sua segunda parte está faltando alguma coisa? (USERGROUP_ENABLE?) +1 para informações atualizadas - Lekensteyn
@Lekensteyn Estranhamente, a configuração em /etc/login.defs é definitivamente USERGROUPS_ENAB yes depois de verificar isso. A sintaxe desse arquivo é um pouco incomum.
Acabei de verificar o arquivo e a fonte e você está certo, essa (e algumas outras) configurações são confusamente chamadas de "_ENAB". - Lekensteyn


Isso é muito antigo, mas isso vale a pena mencionar. Para calcular para o umask, ao contrário das permissões do sistema de arquivos. Os octal são calculados via bit a bit AND do complemento unário do argumento usando NOT bit a bit. As notações octal são as seguintes:

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

Então você pode calcular para definir uma premissa adequada como:

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

Calculando a 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 forma:

666 – 022 = 644
  • Permissões da base de arquivos: 666
  • valor umask: 022
  • subtrair para obter permissões de novo arquivo (666-022) : 644 (rw-r–r–)

Cálculo da permissão final para diretórios

Você pode simplesmente subtrair o umask das permissões de base para determinar a permissão final do diretório da seguinte forma:

777 – 022 = 755
  • Permissões da base de diretório: 777
  • valor umask: 022
  • Subtrair para obter permissões de novo diretório (777-022) : 755 (rwxr-xr-x)

30
2018-04-06 08:27



Eu não acho que é assim que as permissões finais são calculadas, e se o valor de unmask é 077 como você subtrairia 666-077 nesse caso ? - Sufiyan Ghori
A explicação do @SufiyanGhori Baron não está completa para permissão de arquivos. No seu caso e em qualquer cálculo futuro, para fácil memorização, você deve ter em mente que subtrai-os desta forma: 6-0 6-7 6-7 se algum resultado desses três for -1, então seja 0. Então nós tem resultado final 600 - Huy.PhamNhu
@ Huy.PhamNhu Isso não é correto também. Com permissão básica de 666 e umask de 033 você certamente não obterá 633. - maaartinus
Não não não. Você não pode usar subtração para calcular umask (funciona com determinados valores, mas não todos). Você tem que pensar no umask como "bits desabilitados". Veja as outras respostas de Sufiyan e Wisbucky. - wisbucky


Outros responderam explicaram muito bem o conceito deking 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.

Primeiro de tudo, “Máscara” não significa “subtrair”, no sentido aritmético - não há empréstimo ou porte envolvido, em segundo lugar, umask é uma máscara; não é um número a ser subtraído.

Em terceiro lugar, a máscara desativa os bits de permissão. Se eles já estão desligados, o umask não faz alterações na permissão,

Por exemplo, suponha que você tenha que desmascarar 077 dos padrões do sistema para arquivos que são 666 e diretórios que é 777.

O comando que você vai usar é,

umask 077

(desmascarar o valor em binário, 000 111 111)

O que essa unmask fará é desligar qualquer um dos seis primeiros LSBs (bits menos significativos) se eles forem 1 e não fará alterações se alguma delas já estiver desativada.

Aqui está como a permissão final é calculada:

file permisison 666 = 110 110 110 
unmask value    077 = 000 111 111
will result in, 600 = 110 000 000

Observe como ambos 110 valores mudaram para 000.

Similarmente,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000

24
2018-06-05 14:09



esta deve ser a resposta! - Abdelouahab
@SufiyanGhori Então, se umask 177 (001 111 111), ele irá desligar primeiro 7 bits menos significativos se eles forem 1 - Kasun Siyambalapitiya
está correto @KasunSiyambalapitiya - Sufiyan Ghori


Conceito básico:

Se você é como a maioria dos humanos e não entende o que diabos "octal umaks são calculados através do bit a bit AND do complemento unário do argumento usando NOT bit a bit" significa, aqui está minha explicação simples:

Primeiro de tudo, pense no que é uma "máscara". Uma máscara bloqueia alguma coisa. Pense em fita adesiva. Neste 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 são octal 777 (111 111 111)e um novo arquivo é octal 666 (110 110 110). Nós definimos o umask para bloquear / desativar certas permissões.

  • Um pouco de máscara de 1 significa bloquear / desativar essa permissão (colocar fita adesiva sobre esse bit).
  • Um pouco de máscara de 0 permitirá a permissão para passar (sem fita adesiva sobre esse bit).

Então um octal 022 (000 010 010) máscara significa desabilitar group write e others writee permitir que todas as outras permissões passem.

Cálculo:

Aqui está um exemplo de cálculo para um novo arquivo (padrão 666 permissão) com um 022 umask:

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

Então é assim que você acaba com o resultado de 644 quando você cria um novo arquivo.

Maneira mais fácil:

Mas se os cálculos de máscara inversa apenas confundem você, há uma maneira mais fácil de usar a notação simbólica de umask. Quando você usa esse método, você está apenas especificando os bits de passagem em vez dos bits de máscara.

  • umask u=rwx,g=rx,o=rx significa permitir passagem por user rwx, group rx, other rx. O que implica desabilitar group w, others w. Se você executar este comando, verifique umask, você vai ter 022.
  • umask u=rwx,g=,o= significa permitir passagem por user rwx. O que implica desativar todo o acesso para group e others. Se você executar este comando, verifique umask, você vai ter 077.

Cálculo de bônus:

Se você realmente quer entender o que "octal umaks são calculados através do bit a bit AND 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 atravessar.

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

Se você fizer a mesa com NOT(mask)agora é apenas um simples AND mesa lógica!

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

Então a fórmula para isso é: result = perm AND (NOT mask)


9
2018-04-03 22:30