当我修改文件时,Linux 文件功能会丢失。这是预期的行为吗?

当我修改文件时,Linux 文件功能会丢失。这是预期的行为吗?

当我修改文件时,之前设置的文件功能会丢失。这是预期的行为吗?

我首先设置一个文件能力:

$ 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)

相关内容