Как запретить изменение, удаление файлов

chattr (Change Attribute) - это утилита командной строки в linux, которая используется для установки/снятия специальных атрибутов файлов для предотвращения случайной модификации и удаления файлов или директорий, даже если вы авторизованы как root.

Нативные файловые системы в Linux, такие как ext2, ext3, ext4, btrfs, поддерживают все флаги для файлов. Никто не сможет удалить или модифицировать файл/директорию, защищенный атрибутами, установленными с помощью команды chattr, даже имея полный доступ ко всем операциям с файлом. Очень полезно защитить атрибутами такие файлы , как passwd и shadow, содержащие информацию о пользователе.

Синтаксис chattr:

# chattr [operator] [flags] [filename]

Атрибуты и флаги

Ниже приведен список часто используемых атрибутов и соответствующих флагов, которые согут быть установлены с помощью команды chattr. \1. Если обращаются к файлу с установленным атрибутом “А”, его запись atime не обновляется. \2. Если модифицируется файл с установленным атрибутом “S”, изменения синхронизируются с диском. \3. Если установлен атрибут “a”, файл может быть открыт для записи только в режиме добавления текста. \4. Если установлен атрибут “i”, файл нельзя модифицировать (immutable). Это значит нельзя переименовывать, создавать символьные ссылки, исполнять и записывать, снять этот втрибут может только суперпользователь. \5. Если установлен атрибут “j”, то при модификации файла сначала будет обновлена информация о файле в журнале ext3, а затем уже сам файл. \6. Если установлен атрибут “t”, файл нельзя объединять с другими файлами. \7. Файл с атрибутом “d” не будет являться кандидатом для резервного копирования при запуске процесса dump. \8. При удалении файла с атрибутом “u” его данные сохраняются, и пользователь сможет восстановить его.

Операторы

+ : добавляет атрибут к существующим у файла атрибутам. - : удаляет атрибут файла. = : оставляет существующие у файла атрибуты.

Теперь мы продемонстрируем вам несколько примеров применения команды chattr.

1. Как защитить файл от удаления

Для демонстрационных целей мы будем использовать директорию demo и файл important_file.conf. Сначала посмотрим, какие атрибуты у них установлены, с помощью команды ls -l. Как можно видеть ниже пока никаких атрибутов нет.

[root@tecmint tecmint]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Aug 31 18:02 demo
-rwxrwxrwx. 1 root root 0 Aug 31 17:42 important_file.conf

Для установки атрибута мы используем оператор +, для снятия - оператор -. Давайте защитим файл от удаления кем бы то ни было, даже суперпользователем.

[root@tecmint tecmint]# chattr +i demo/
[root@tecmint tecmint]# chattr +i important_file.conf

Замечание: Бит +i может быть установлен только суперпользователем, либо пользователем с привилегиями sudo. Давайте проверим установленные атрибуты с помощью команды ‘lsattr’.

[root@tecmint tecmint]# lsattr
----i----------- ./demo
----i----------- ./important_file.conf

Теперь, попытавшись удалить, переименовать или изменить права доступа к файлу, вы увидите сообщение: “Operation not permitted”.

[root@tecmint tecmint]# rm -rf demo/
rm: cannot remove demo/: Operation not permitted

[root@tecmint tecmint]# mv demo/ demo_alter
mv: cannot move demo/ to demo_alter: Operation not permitted

[root@tecmint tecmint]# chmod 755 important_file.conf
chmod: changing permissions of important_file.conf: Operation not permitted

2. Как снять атрибут с файла

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

[root@tecmint tecmint]# chattr -i demo/ important_file.conf

Теперь снова проверим наличие атрибутов с помощью команды ‘lsattr’.

[root@tecmint tecmint]# lsattr
---------------- ./demo
---------------- ./important_file.conf

Флаг ‘-i’ удален, поэтому мы спокойно можем удалить файлы и директории.

[root@tecmint tecmint]# rm -rf *

[root@tecmint tecmint]# ls -l
total 0

3. Как защитить файлы /etc/passwd и /etc/shadow

Предотвратив модификацию файлов /etc/passwd или /etc/shadow, мы защитим их от случайного удаления или подмены, а также отключим создание пользовательских аккаунтов.

[root@tecmint tecmint]# chattr +i /etc/passwd
[root@tecmint tecmint]# chattr +i /etc/shadow

Теперь попробуем создать создать нового пользователя, и получаем сообщение об ошибке ‘cannot open /etc/passwd’.

[root@tecmint tecmint]# useradd tecmint
useradd: cannot open /etc/passwd

Таким образом вы можете защитить важные файлы от удаления.

4. Добавление данных в файл без изменения уже существующих

Если вы хотите разрешить только добавление данных файл, без редактирования уже существующих данных, это можно сделать с помощью установки атрибута ‘a’:

[root@tecmint tecmint]# chattr +a example.txt

[root@tecmint tecmint]# lsattr example.txt
-----a---------- example.txt

Теперь файл можно открыть на запись только в режиме добавления данных. Попробовав заменить существующее содержимое файла example.txt, вы увидите сообщение об ошибке ‘Operation not permitted’:

[root@tecmint tecmint]# echo "replace contain on file." > example.txt
-bash: example.txt: Operation not permitted

Попытаемся добавить в файл новый контент и проверить результат:

[root@tecmint tecmint]# echo "replace contain on file." >> example.txt

[root@tecmint tecmint]# cat example.txt
Here is the example to test 'a' attribute mean append only.
replace contain on file.

5. Как защищать директории

Для защиты всей директории вместе с содержащимися в ней файлами используется флаг ‘-R’ (рекурсия) вместе с ‘+i’.

[root@tecmint tecmint]# chattr -R +i myfolder

После рекурсивной установки атрибута попробуем удалить директорию вместе со всеми файлами:

[root@tecmint tecmint]# rm -rf myfolder/
rm: cannot remove 'myfolder/': Operation not permitted