O que é “umask” e como funciona?

162

Acredito que umask é algo que controla permissões de arquivo , mas não o compreende completamente.

Depois de executar umask 0644 em um terminal , não consigo ler os arquivos criados com o editor de texto de linha de comando %código%. Percebi que as permissões desse arquivo estão definidas como nano em vez do padrão 0022 .

Como funciona umask? Pensei em remover apenas cada dígito da umask de 0755 , 0777 e 7 - 6 = 1 , então espero que as permissões sejam 7 - 4 = 3 , mas aparentemente esse 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?
por Lekensteyn 22.05.2011 / 22:42

5 respostas

129

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 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 do proprietário e os bits de leitura dos outros, um padrão como 777 nos 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ê quiser que os arquivos não sejam lidos / gravados / executados por ninguém, mas pelo proprietário, use um umask como 077 para desativar essas permissões para o grupo & amp; outros.

Por outro lado, 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 configurar o umask para 000 .

O padrão umask no Ubuntu é 022 , o que significa que os 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 atual de umask, abra um terminal e execute o comando:

umask

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

umask 077

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, executar:

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. Edite ~/.profile e adicione uma nova linha com:

umask 007

Você precisa se logar novamente para essa mudança de umask em ~/.profile para entrar em vigor. 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 do sistema, edite o arquivo de perfil de todo o sistema em /etc/profile .

    
por ajmitch 22.05.2011 / 22:59
35

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 em diante.

Umask e pam_umask

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

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

Pam_umask é brevemente explicado 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 (execute apropos '^pam_' para encontrar as páginas de manual para os outros). Na página de manual para pam_umask , é de notar que

% bl0ck_qu0te%

Uma nota na umask padrão

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

Enquanto o umask padrão é 022 no Ubuntu, esta não é toda a história, pois 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

% bl0ck_qu0te%

Por isso, 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 iguais):

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

Para mais informações, consulte man pam_umask e Manipulações do Ubuntu online .

    
por user76204 02.04.2013 / 02:16
30

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 as premissas adequadas de umask 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 do novo arquivo (666-022) : 644 (rw-r–r–)

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

777 – 022 = 755
  • Permissões da base de diretório: 777
  • valor umask: 022
  • Subtrair para obter permissões do novo diretório (777-022) : 755 (rwxr-xr-x)
por amrx 06.04.2016 / 10:27
25

Outros respondidos 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, o 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, o umask não altera a permissão,

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

O comando que você usará é

umask 077

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

O que essa unmask fará é que ela desligará qualquer um dos seis primeiros LSBs (bits menos significativos) se eles forem 1 e não farão nenhuma alteração se algum deles já estiver desativado.

Veja 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 os valores de 110 foram alterados para 000 .

Da mesma forma,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
    
por Sufiyan Ghori 05.06.2016 / 16:09
9

Conceito básico:

Se você é como a maioria dos humanos e não entende o que diabos "octal souks são calculados via bit a bit AND 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. 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 bit de máscara de 1 significa bloquear / desativar essa permissão (coloque fita adesiva sobre esse bit).
  • Um bit de máscara de 0 permitirá a permissão para passar (sem fita adesiva sobre esse bit).

Portanto, uma máscara octal 022 (000 010 010) significa desativar group write e others write e permitir a passagem de todas as outras permissões.

Cálculo:

Aqui está um exemplo de cálculo para um novo arquivo (padrão 666 permissão) com uma 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.

Forma 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 da máscara.

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

Cálculo do bônus:

Se você realmente quer entender o que "octal souks são calculados via 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 desabilitar, 0 significa passar.

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ê criar a tabela com NOT(mask) , agora é apenas uma simples tabela lógica AND !

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)

Portanto, a fórmula para isso é: result = perm AND (NOT mask)

    
por wisbucky 04.04.2017 / 00:30