Как предотвратить модификацию файлов в Linux с помощью команды chatt

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

Комментарии

Популярные сообщения из этого блога

Права на папки и файлы (unix/chmod)

Автоматическое монтирование дисков и разделов в Linux или что такое fstab? Проблема Debian

Как подключить сетевой диск Windows в Linux