Como as permissões de arquivo são aplicadas aos arquivos criados recentemente?

12

Eu tenho um diretório que possui as seguintes permissões definidas:

drwxr-s---. user group folder

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

Quando verifico as permissões desses 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 extra de gravação para grupos e a permissão de leitura para outras pessoas?

Pergunta Overflow
fonte

Respostas:

16

setguid

Existem 2 forças aqui no trabalho. O primeiro é o bit setgid ativado na pasta folder.

drwxr-s---. user group folder

Esse é o spacote de caracteres no início desta linha. Eles estão agrupados da seguinte forma:

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

Os r-smeios que quaisquer arquivos ou diretórios criados dentro desta pasta terão o grupo definido automaticamente para o grupo group.

Isso foi o que causou os arquivos foo.txte bar.txta serem criados assim:

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

permissões & umask

As permissões que você vê são outra questão. Eles são regidos pelas configurações do seu umask. Você pode ver como umaskestá definido com o comando umask:

$ umask
0002

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

É uma máscara, portanto, desativará qualquer um dos bits relacionados às permissões ativadas. Neste exemplo, o único bit que eu quero é as permissões de gravação para outros.

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. Portanto, 2 equivale a 010 na forma binária, que é o bit de gravação. Um 4 (100) significa que você deseja que a leitura seja desativada. Um 7 (111) significa que você deseja ler / gravar / executar todos desativados. Construindo a partir daqui:

$ umask 007

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

Então e os seus arquivos?

Bem, ele umaskgoverna as permissões que serão definidas quando um novo arquivo for criado. Portanto, se tivéssemos o seguinte umaskconjunto:

$ umask 007

E começamos a tocar em novos arquivos, 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 o seguinte:

$ 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

No entanto, não terá nenhum 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?

Era o umaskque eu chamava de configuração "suave". Não é absolutamente absoluto e pode ser ignorado facilmente no Unix de várias maneiras. Muitas das ferramentas utilizam switches que permitem especificar as permissões como parte de sua operação.

Tomemos mkdirpor exemplo:

$ umask
0037

$ mkdir -m 777 somedir1
$

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

Com o -minterruptor, podemos substituir umask. O touchcomando não possui esse recurso, então você precisa ser criativo. Consulte esta seção de perguntas e respostas da U&L intitulada: Arquivos podem ser criados com permissões definidas na linha de comando? apenas para esses métodos.

Outras maneiras? Apenas substitua umask. O navegador de arquivos provavelmente está fazendo isso ou simplesmente ignorando umaske definindo o arquivo usando as permissões que ele está configurado para fazer.

slm
fonte
Eu pensei que umask deveria remover privilégios, não adicionar. Ou eu estou esquecendo de alguma coisa?
Pergunta Overflow
@QuestionOverflow - você mascara controla quais permissões são permitidas quando arquivos e diretórios são criados. Daí o seu nome. Mascara os bits de serem usados ​​durante o processo de criação.
slm
Meu umask lê 0002. Se umask definir permissões em vez de remover permissões, o bit de execução será definido para o usuário e o grupo quando eu fizer isso touch, mas não é.
Pergunta Overflow
@QuestionOverflow - essa é uma limitação do touchcomando. Veja o link que eu incluí no meu A. Este link: unix.stackexchange.com/questions/47178/…
slm
Apenas para esclarecer alguns pontos com base nos comentários: 1) as permissões do novo arquivo são sempre determinadas pelo umask + o programa usado para criar o arquivo; 2) as permissões nunca são herdadas do diretório pai.
Pergunta Overflow