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)