Как защитить файлы или директорий от удаления в Linux

Как защитить файлы или директорий от удаления в Linux

В предыдущем посте я рассказал как восстанавливать удаленный файл. Но лучший способ борьбы с чем-то - это предотвращение. Поэтому в сегодняшней статье рассмотрим как защитить файлы или директории от нечаянного удаления, переименования и модификации.

Сделать это можно двумя способами. Каждый из них обладает своими недостатками.

Предотвращение удаления с помощью алиаса

При удалении файлов через терминал мы обычно используем команду rm. Так вот для этой команды мы можем создать так называемый алиас. Для этого выполните следующую команду:

echo 'alias rm="rm -i"' >> ~/.bashrc && source ~/.bashrc

Теперь каждый раз когда вы пытаетесь удалить файл, система будет спрашивать подтверждения. Минус этого метода в том, что его можно обойти без проблем добавив директиву -f, что принудительно удаляет файл. К тому же люди не всегда пользуются терминалом для удаления файла.

Предотвращение удаления с флагом "неизменный"

Не всем это известно, но в файловой системе Linux существует флаг под названием immutable - неизменный. Включить этот флаг можно на файлах и директориях. Если пресловутый флаг включен, то файл или директорию невозможно будет модифицировать или удалять без отключения флага "неизменный". Для включения этого флага на файле или директории вам нужны привилегий root пользователя.

Прежде всего создадим тестовый файл:

$ touch file.txt

Проверить включен-ли этот флаг можно следующим образом:

$ lsattr file.txt
--------------e---- file.txt

Теперь мы запишем данные в этот файл:

$ echo Test >> file.txt
$ cat file.txt
Test

Как видите модификация файла происходит без проблем. А теперь попробуем добавить флаг "неизменности" в этот файл с помощью команды chattr:

$ sudo chattr +i file.txt

Если снова запустить команду lsattr, то можно увидеть, что флаг был успешно включен:

$ lsattr file.txt
----i---------e---- file.txt

Убедившись, что в файле имеется флаг i, давайте попробуем изменить или удалить его:

$ echo 'test' >> file.txt
zsh: operation not permitted: file.txt
$ sudo rm -f file.txt
rm: cannot remove 'file.txt': Operation not permitted

Как видно из примеров выше, файл со включенным флагом immutable просто невозможно удалять или изменять даже с привилегией root.

После отключения флага неизменности файл или директорию снова можно будет удалять и изменять:

$ sudo chattr -i file.txt
$ lsattr file.txt
--------------e---- file.txt

Единственный минус этого метода предотвращения в том, что нужно постоянно включать и отключать флаг. Но это не проблема если файл изменяется очень редко.