当我修改文件时,之前设置的文件功能会丢失。这是预期的行为吗?
我首先设置一个文件能力:
$ setcap CAP_NET_RAW+ep ./test.txt
$ getcap ./test.txt
./test.txt = cap_net_raw+ep
正如预期的那样,我发现文件功能已设置。
然后我修改该文件。
$ echo hello >> ./test.txt
现在,当我检查文件功能时,没有找到任何功能。
$ getcap ./test.txt
答案1
是的,这是预期的行为。我没有这样的文件,但你可以在其中看到这个补丁从2007年开始
当具有 posix 功能的文件被覆盖时,应删除文件功能(例如 setuid 位)。
此补丁引入了 security_inode_killpriv()。目前仅针对功能进行定义,并在更改 inode 时调用以通知安全模块它可能想要清除附加到该 inode 的任何特权。功能模块检查是否为 inode 定义了任何文件功能,如果是,则清除它们。
security_inode_killpriv
今天仍然在内核中,被调用
notify_change
当 inode 在“响应写入或截断”中更改时:请参阅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)