Как защитить файл от удаления из-под root’a? Ведь root может удалить любой файл? Или не любой? Оказывается, и здесь есть небольшая защита от дурака.
Создатели файловых систем позаботились о том, что бы добавить возможность выставить дополнительные флаги на файлы или папки, которые бы ввели дополнительную защиту:
– нельзя удалить файл (неважно под каким пользователем это делать)
– можно только дописывать/добавлять, но не изменять или удалять
а так же много других возможностей. Напомню, что это свойство файловой системы, а не ОС, поэтому, не для всех ОС эти свойства применимы
Linux
Для файловых систем ext (а возможно и других так же) существует утилита chattr, которая и выставляет нужные нам флаги. Изменить флаги может только пользователь root. Вот некоторые примеры:
– выставить неудаляемый флаг (может только root)
#chattr +i /tmp/test
– посмотреть флаги:
$ lsattr test
----i------------e- test
– убрать флаг:
#chattr -i /tmp/test
Обо всем возможностях можно узнать в man chattr/lsattr
FreeBSD/OpenBSD
Здесь такую возможность предоставляет ФС UFS/UFS2 и отвечает за это утилита chflags. Вот некоторые примеры использования:
– выставить неудаляемый флаг (в отличии от ext это может НЕ только root)
$chflags uunlnk /tmp/test
– посмотреть флаги:
$ ls -lao test
-rw-r--r-- 1 skeletor wheel uunlnk 0 Jul 6 10:56 test
– убрать флаг:
$chflags nouunlnk /tmp/test
Обо всем возможностях можно узнать в man chflags
Solaris
Тут всё выставляется через ACL (NFS mode):
# chmod S+vnounlink /tmp/test
# rm /tmp/test
rm: test not removed: Not owner
# chmod S-vnounlink /tmp/test
# rm test
Обо всем возможностях можно узнать в man chmod