파일을 수정하면 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)

관련 정보