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