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

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

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

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

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

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

 $ echo hello >> ./test.txt 

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

 $ getcap ./test.txt 

  • Страница attr man отсутствует?
  • Каков эффект «chattr + a» в каталоге
  • Не удается удалить файлы даже с помощью root, lsattr также не отвечает
  • Является ли хорошей практикой сделать файл блокировки init скрипта неизменным?
  • Каковы затраты на хранение xattrs в файловых системах ext4, btrfs?
  • Как определяются разрешения по умолчанию (на OS X)?
  • что делает «а» в chattr + ia?
  • Как получить дамп всех расширенных атрибутов для файла?
  • 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 - лучшая ОС в мире.