chattr, chflags и неудаляемые файлы

Как защитить файл от удаления из-под 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *