Возможности файла Linux теряются при изменении файла. Это ожидаемое поведение?

Когда я изменяю файл, возможности файла, которые я установил ранее, теряются. Это ожидаемое поведение?

Я сначала установил возможность файла:

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

Как и ожидалось, я обнаружил, что установлен файл.

Затем я изменяю файл.

 $ echo hello >> ./test.txt 

Теперь, когда я проверяю возможности файла, никаких возможностей не обнаружено.

 $ getcap ./test.txt 

  • что делает «а» в chattr + ia?
  • Что означает атрибут «a» в lsattr?
  • Как получить дамп всех расширенных атрибутов для файла?
  • Невозможно установить атрибут файла
  • Просмотреть расширенные атрибуты с помощью coreutils ls на Mac
  • Что означает версия файла: lsattr -v
  • Расширенный атрибут по символической ссылке
  • Не удалось запустить 'sudo chmod + w / etc / hosts'
  • One Solution collect form web for “Возможности файла Linux теряются при изменении файла. Это ожидаемое поведение?”

    Да, это ожидаемое поведение. У меня нет документа, который говорит об этом, но вы можете увидеть в этом патче с 2007 года

    Когда файл с возможностями posix перезаписан, возможности файла, такие как бит setuid, должны быть удалены.

    Этот патч представляет security_inode_killpriv (). В настоящее время это определено только для возможностей и вызывается, когда индекс inode изменен, чтобы сообщить модулю безопасности, что он может захотеть удалить любую привилегию, прикрепленную к этому inode. Модуль возможностей проверяет, определены ли какие-либо возможности файла для inode, и, если это так, очищает их.

    security_inode_killpriv() все еще находится в ядре сегодня, вызывается из notify_change (), когда inode изменяется в «response to write or truncate»: см. 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) 
    Linux и Unix - лучшая ОС в мире.