Os recursos de arquivos do Linux são perdidos quando modifico o arquivo. Esse comportamento é esperado?

4

Quando modifico um arquivo, os recursos de arquivo que eu defini anteriormente são perdidos. Esse é o comportamento esperado?

Primeiramente, configurei um recurso de arquivo:

$ setcap CAP_NET_RAW+ep ./test.txt
$ getcap ./test.txt
./test.txt = cap_net_raw+ep

Como esperado, descobri que a capacidade do arquivo está definida.

Depois modifico o arquivo.

$ echo hello >> ./test.txt

Agora, quando verifico os recursos do arquivo, nenhum recurso é encontrado.

$ getcap ./test.txt
    
por Keshav Gupta 16.05.2016 / 08:11

1 resposta

5

Sim, é um comportamento esperado. Eu não tenho um documento que diz isso, mas você pode ver em este patch de 2007

When a file with posix capabilities is overwritten, the file capabilities, like a setuid bit, should be removed.

This patch introduces security_inode_killpriv(). This is currently only defined for capability, and is called when an inode is changed to inform the security module that it may want to clear out any privilege attached to that inode. The capability module checks whether any file capabilities are defined for the inode, and, if so, clears them.

security_inode_killpriv() ainda está no kernel hoje, sendo chamado de notify_change () quando um inode é alterado em "response to write or truncate": veja dentry_needs_remove_privs ()

 /* Return mask of changes for notify_change() that need to be done as a
  * response to write or truncate... */
 int dentry_needs_remove_privs(struct dentry *dentry)
    
por 16.05.2016 / 11:53