Linux

當我修改文件時,Linux 文件功能失去。這是預期的行為嗎?

  • January 14, 2020

當我修改文件時,我之前設置的文件功能會失去。這是預期的行為嗎?

我首先設置了一個文件功能:

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

正如預期的那樣,我發現文件功能已設置。

然後我修改文件。

$ echo hello >> ./test.txt

現在,當我檢查文件功能時,沒有找到任何功能。

$ getcap ./test.txt

是的,這是預期的行為。我沒有說明它的文件,但你可以在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)

引用自:https://unix.stackexchange.com/questions/283366