As permissões somente leitura ainda permitem salvar

3

Eu tenho uma estranha situação de permissões que não posso explicar. Deixe-me explicar meus usuários e grupo e, em seguida, mostrarei as permissões da pasta.

drwxrwsr-x.  2 jenkinsuser applog        4096 Jul 15 09:56 .
drwxrwxr-x. 13 jenkinsuser jenkinsuser   4096 Jul 15 09:40 ..
-rw-r--r--.  1 apache      applog      750409 Jul 15 09:56 application.log

Eu tenho 2 usuários apache e jenkinsuser. Ambos estão separados do grupo chamado applog. Eu tenho uma pasta de log com as permissões mostradas acima. A pasta tem o SGID configurado, portanto, os novos arquivos terão o grupo configurado para applog. Como você pode ver o arquivo application.log tem rw-r - r-- definido para o arquivo, o que eu entendo como o usuário do apache é o único usuário que pode gravar no arquivo.

Como jenkinsuser, consigo abrir o arquivo com o vi / vim, com base no fato de o applog ter acesso somente leitura. Quando eu salvá-lo (ex .: w dentro do vi) ele diz 'readonly' option is set (add ! to override) . Quando forçar o salvamento (ex.: W! Dentro do vi) ele salva com as novas permissões mostradas abaixo.

drwxrwsr-x.  2 jenkinsuser applog        4096 Jul 15 11:24 .
drwxrwxr-x. 13 jenkinsuser jenkinsuser   4096 Jul 15 09:40 ..
-rw-r--r--.  1 jenkinsuser applog      750448 Jul 15 11:24 application.log

Então, minha pergunta é: Por que o jenkinsuser pode salvar o arquivo se ele não tiver acesso de gravação a ele? O que estou perdendo?

    
por DFieldFL 15.07.2014 / 17:30

1 resposta

3

O vi apagou o arquivo antigo e escreveu um novo com o mesmo nome. Você tem permissão para remover o arquivo antigo, porque você tem acesso de gravação ao diretório que o contém. Para remover o arquivo, altere (escreva para) o diretório inode excluindo a referência ao arquivo existente. Quando a contagem de referência do arquivo for zerada, o sistema de arquivos libera o inode e o espaço do arquivo. Em seguida, você escreve no diretório inode novamente, adicionando o novo arquivo a ele.

Para evitar que isso aconteça, você precisará remover a permissão de gravação no diretório.

Observe que você também pode ter algumas ACLs no arquivo e no diretório que estão substituindo as permissões que você está vendo em ls -l . Veja o . à direita das permissões em cada linha da listagem? Isso mostra que algumas ACLs estão ativas. Para vê-los, execute getfacl /dir/name .

    
por 15.07.2014 / 19:08