Есть ли какой-либо способ предотвратить успешное выполнение unlink() привилегированной программой?

#c #linux #stat #unlink

#c #linux #статистика #разблокируйте

Вопрос:

Предполагая, что привилегированная программа содержит эту строку кода:

 unlink("hello.txt");
  

Могу ли я что-нибудь сделать перед запуском привилегированной программы, чтобы даже после выполнения вызова unlink() hello.txt будет ли он по-прежнему существовать, и lstat() и stat() все еще могут успешно зарегистрировать, что он существует?

Я думал о возможности создания символических или жестких ссылок с тем же именем, чтобы эти ссылки могли быть разорваны вызовом unlink(), оставляя фактическую hello.txt файл нетронутым. Однако я не был уверен, что это возможно.

Комментарии:

1. Вы могли бы настроить LD_PRELOAD для игнорирования всех или выбранных unlink вызовов

2. может быть, seccomp или chroot? У вас тоже есть привилегии?

3. Монтирование файловой системы как доступной только для чтения?

4. может быть, chattr i? Но это гонка вооружений, в которой в конечном итоге выиграет системный администратор … если им нужно отключить файловую систему, использовать редактор секторов для удаления inode и запустить fsck для устранения беспорядка, они могут это сделать.

5. @thatotherguy что, если команда вызывается remove(3) вместо unlink(2) ? Или если это rename(2) файл перед его удалением? Или процесс имеет setugid, и трюки ld_preload не работают?