Как запретить изменение, удаление файлов
chattr (Change Attribute) - это утилита командной строки в linux, которая используется для установки/снятия специальных атрибутов файлов для предотвращения случайной модификации и удаления файлов или директорий, даже если вы авторизованы как root.
Нативные файловые системы в Linux, такие как ext2, ext3, ext4, btrfs, поддерживают все флаги для файлов. Никто не сможет удалить или модифицировать файл/директорию, защищенный атрибутами, установленными с помощью команды chattr, даже имея полный доступ ко всем операциям с файлом. Очень полезно защитить атрибутами такие файлы , как passwd и shadow, содержащие информацию о пользователе.
Синтаксис chattr:
Атрибуты и флаги
Ниже приведен список часто используемых атрибутов и соответствующих флагов, которые согут быть установлены с помощью команды 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
Для установки атрибута мы используем оператор +, для снятия - оператор -. Давайте защитим файл от удаления кем бы то ни было, даже суперпользователем.
Замечание: Бит +i может быть установлен только суперпользователем, либо пользователем с привилегиями sudo. Давайте проверим установленные атрибуты с помощью команды ‘lsattr’.
Теперь, попытавшись удалить, переименовать или изменить права доступа к файлу, вы увидите сообщение: “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. Как снять атрибут с файла
В приведенном выше примере мы увидели, как установить атрибут для предотвращения непреднамеренного удаления файл, здесь же мы научимся удалять атрибут, чтобы снова поучить возможность удалять или редактировать файл.
Теперь снова проверим наличие атрибутов с помощью команды ‘lsattr’.
Флаг ‘-i’ удален, поэтому мы спокойно можем удалить файлы и директории.
3. Как защитить файлы /etc/passwd и /etc/shadow
Предотвратив модификацию файлов /etc/passwd или /etc/shadow, мы защитим их от случайного удаления или подмены, а также отключим создание пользовательских аккаунтов.
Теперь попробуем создать создать нового пользователя, и получаем сообщение об ошибке ‘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’.
После рекурсивной установки атрибута попробуем удалить директорию вместе со всеми файлами: