Como um usuário pode editar um arquivo mesmo quando o bit de gravação está desativado em um arquivo

3

Aqui está o que eu tive vontade de jogar com umask na minha máquina de treino.

Eu criei o usuário de teste john e entrei usando o john. e configure o umask para 0200 e criei um testfile no vim e salvei-o. Agora as permissões para este testfile são

-r--rw-rw-. 1 john john 26 Jun 28 12:25 testfile

Agora eu tentei editar o arquivo novamente e digitei algumas palavras sem sentido.

Agora, quando tento salvar usando o editor ": wq", ele diz que o arquivo é somente leitura e não pode ser salvo. Mas quando eu adicionei o ponto de exclamação no final ": wq!" salvou o arquivo.

O que aconteceu? mesmo quando o bit de gravação está desativado no testfile

Host OS = RedHat (rhel) 7.2

    
por OmiPenguin 28.06.2016 / 11:53

2 respostas

5

Com "wq", "!" pede ao Vim para ignorar o atributo somente leitura. De a documentação :

:wq [++opt] Write the current file and quit. Writing fails when the file is read-only or the buffer does not have a name. Quitting fails when the last file in the argument list has not been edited.

:wq! [++opt] Write the current file and quit. Writing fails when the current buffer does not have a name.

Observe a diferença: sem "!", "falha quando o arquivo é somente leitura ..."; que não se aplica mais com "!".

Por que isso acontece tecnicamente, já que você é o proprietário do arquivo, o Vim pode efetivamente ignorar as permissões nele (na pior das hipóteses, isso pode mudá-los e restaurá-los ). Na prática, o Vim suporta algumas maneiras de escrever arquivos somente para leitura:

  • se o diretório for gravável, ele renomeará o arquivo existente (adicionando ~ ao seu nome), criará um novo arquivo, gravará o novo conteúdo nesse arquivo e restaurará as permissões do arquivo original (isso funciona mesmo usuário executando o Vim não é o proprietário do arquivo);
  • se o diretório não for gravável, ele fará um backup do arquivo em um diretório gravável ( ~/tmp normalmente), alterará as permissões do arquivo para torná-lo gravável, gravará o novo conteúdo no arquivo e restaurará seu arquivo. permissões originais (o único funciona se o usuário que está executando o Vim for o proprietário do arquivo).
por 28.06.2016 / 12:07
3

Em minha resposta, não me preocuparei com Vim, mas, ao invés disso, olharei para os mecanismos subjacentes, sobre os quais você se deparou. É importante entender isso, pois afeta a segurança de todo o seu sistema.

Não tem nada a ver com o dono: experimente, faça um arquivo que não é de sua propriedade e, em seguida, dê a sua própria leitura e não escreva. Você terá os mesmos resultados. Então, por que isso acontece?

(embora seja possível ser proprietário, root ou ter o recurso CAP_CHOWN, CAP_DAC_OVERRIDE ou CAP_FOWNER, talvez outros.)

É por causa da permissão do diretório. O diretório é gravável, portanto, o vim pode excluir um arquivo e adicionar um arquivo. Portanto, é isso que faz. Ele remove o antigo e o substitui pelo novo. Isso faz com que o w bit em um arquivo seja principalmente consultivo (embora não se não houver gravação no diretório).

Provavelmente faz isso de uma maneira mais segura do que isso: mova o antigo, crie novo, exclua o antigo.

    
por 28.06.2016 / 12:18