Como as permissões de arquivo são aplicadas aos arquivos recém-criados?

10

Eu tenho um diretório com as seguintes permissões:

drwxr-s---. user group folder

Na área de trabalho, acesso essa pasta e clico com o botão direito do mouse para criar uma nova chamada de arquivo foo.txt . Então, usando o terminal, criei outro arquivo usando o comando $ touch bar.txt .

Quando verifico as permissões para esses arquivos, tenho:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

Eu estava esperando -rw-r-----. user group . Como surgiu a permissão de gravação extra para permissão de grupo e leitura para outras pessoas?

    
por Question Overflow 04.11.2013 / 03:51

1 resposta

12

setguid

Existem 2 forças aqui no trabalho. O primeiro é o bit setgid que está habilitado na pasta, folder .

drwxr-s---. user group folder

Esse é o s no pacote de caracteres no início desta linha. Eles estão agrupados assim:

d - directory
rwx - read/write/execute bits for user
r-s - read/execute/setuid bits for group
--- - nothing for other users

O r-s significa que quaisquer arquivos ou diretórios criados dentro dessa pasta terão o grupo configurado automaticamente para o grupo group .

Isso fez com que os arquivos foo.txt e bar.txt fossem criados da seguinte forma:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

permissões & umask

As permissões que você está vendo são outro assunto. Eles são regidos pelas configurações do seu umask . Você pode ver com o que seu umask está definido com o comando umask :

$ umask
0002

NOTA: esses bits também são chamados de bits "mode".

É uma máscara, por isso irá desabilitar qualquer um dos bits relacionados às permissões que estão habilitadas. Neste exemplo, o único bit que eu quero desativar são as permissões de gravação para outras.

0 - skipping for this conversation
0 - value of user bits
0 - value of group bits
2 - value of other bits

A representação dos "bits" neste comando está na forma decimal. Então, um 2 equivale a 010 na forma binária, que é o bit de gravação. Um 4 (100) significaria que você quer ler desativado. Um 7 (111) significa que você quer ler / gravar / executar todos os desabilitados. Construindo a partir daqui:

$ umask 007

Desabilitaria os bits de leitura / gravação / execução para outros usuários.

Então, e os seus arquivos?

Bem, o umask controla as permissões que serão definidas quando um novo arquivo for criado. Então, se tivéssemos o seguinte umask set:

$ umask 007

e começamos a tocar em novos arquivos, nós os veríamos criados assim:

$ touch newfile1.txt newfile2.txt
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile2.txt

Se mudarmos para outra coisa, diga isto:

$ umask 037
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Não terá impacto nos arquivos que já criamos. Veja aqui:

$ umask
0037
$ touch newfile1.txt newfile2.txt
$ ls -l | grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Então, o que está acontecendo com o navegador de arquivos?

O umask é o que eu chamei de configuração "soft". Não é absolutamente absoluto e pode ser ignorado com bastante facilidade no Unix de diversas maneiras. Muitas das ferramentas usam switches que permitem especificar as permissões como parte de sua operação.

Tome mkdir , por exemplo:

$ umask
0037

$ mkdir -m 777 somedir1
$

$ ls -ld somedir1
drwxrwxrwx 2 saml saml 4096 Nov  3 22:44 somedir1

Com a opção -m , podemos substituir umask . O comando touch não tem esse recurso, portanto, você precisa ser criativo. Veja este P & D Q & A intitulado: Os arquivos podem ser criados com permissões definidas na linha de comando? para esses métodos.

Outras maneiras? Apenas substitua umask . O navegador de arquivos provavelmente está fazendo isso ou ignorando completamente o umask e estabelecendo o arquivo usando as permissões para as quais ele está configurado.

    
por 04.11.2013 / 04:38