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