파일을 수정하면 이전에 설정한 파일 기능이 손실됩니다. 이것이 예상되는 동작입니까?
먼저 파일 기능을 설정했습니다.
$ 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)