Защита файлов в Linux: как запретить удаление даже root-пользователю с помощью chattr
Представьте, что критически важный конфигурационный файл вашего сервера внезапно исчез или был изменен. Последствия могут быть катастрофическими. Стандартные разрешения в Linux не всегда могут вас защитить — у суперпользователя все равно остаются права на всё.
Но что, если бы вы могли поставить на файл «замок», который не сможет снять даже root? Это не магия, а реальная возможность, которую дает команда chattr.
Она работает на уровне файловой системы, устанавливая специальные атрибуты, которые обходят классические права доступа. С ее помощью вы можете сделать файл полностью неизменяемым, разрешить только добавление данных в конец или настроить мгновенную запись на диск.
В этой статье вы узнаете, как использовать chattr и ее спутницу lsattr для просмотра атрибутов. Мы разберем синтаксис команд и самые полезные флаги на практических примерах. Вы научитесь блокировать системные файлы от случайного редактирования и защищать логи от очистки.
Готовы получить в свое распоряжение инструмент, который добавит новый уровень контроля над вашей системой? Тогда продолжайте чтение, чтобы освоить скрытые возможности защиты файлов в Linux.
Предположим вы хотите защитить некоторые важные файлы в Linux. При чем они должны быть защищены не только от перезаписи но и от случайного или преднамеренного удаления и перемещения. Предотвратить перезапись или изменение битов доступа к файлов можно с помощью стандартных утилит chmod и chown, но это не идеальное решение, так как у суперпользователя по прежнему остается полный доступ. Но есть еще одно решение. Это команда chattr.
Эта утилита позволяет устанавливать и отключать атрибуты файлов, на уровне файловой системы не зависимо от стандартных (чтение, запись, выполнение). Для просмотра текущих аттрибутов можно использовать lsattr. Изначально атрибуты управляемые chattr и lsattr поддерживались только файловыми системами семейства ext (ext2,ext3,ext4). но теперь эта возможность доступна и в других популярных файловых системах таких как XFS, Btrfs, ReiserFS, и т д.
Содержание статьи
Синтаксис и опции chattr
Утилиты chattr и lsattr входят в пакет e2fsprogs и предустановлены во всех современных дистрибутивах. Базовый синтаксис chattr выглядит следующим образом:
$ chattr опции [оператор][атрибуты] файлы
Вот основные опции утилиты, которые вы можете использовать:
- -R - рекурсивная обработка каталога;
- -V - максимально подробный вывод;
- -f - игнорировать сообщения об ошибках;
- -v - вывести версию.
Оператор может принимать значения:
- + - включить выбранные атрибуты;
- - - отключить выбранные атрибуты;
- = - оставить значение атрибута таким, каким оно было у файла.
Вот некоторые доступные атрибуты:
- a - файл может быть открыт только в режиме добавления;
- A - не обновлять время перезаписи;
- c - автоматически сжимать при записи на диск;
- C - отключить копирование при записи;
- D - работает только для папки, когда установлен, все изменения синхронно записываются на диск сразу же;
- e - использовать extent'ы блоков для хранения файла;
- i - сделать неизменяемым;
- j - все данные перед записью в файл будут записаны в журнал;
- s - безопасное удаление с последующей перезаписью нулями;
- S - синхронное обновление, изменения файлов с этим атрибутом будут сразу же записаны на диск;
- t - файлы с этим атрибутом не будут хранится в отдельных блоках;
- u - содержимое файлов с этим атрибутом не будет удалено при удалении самого файла и потом может быть восстановлено.
А теперь давайте перейдем к примерам работы с утилитой chattr и сделаем файл неизменяемым.
Примеры использования chattr
Давайте сначала посмотрим текущие атрибуты файла /etc/passwd:
lsattr /etc/passwd
Для того чтобы сделать файл неизменяемым вам надо установить атрибут i. Например, защитим от записи тот же файл /etc/passwd:
sudo chattr +i /etc/passwd
Заметьте, нужно иметь права суперпользователя для установки и удаления атрибутов. Теперь проверим установился ли атрибут:
lsattr /etc/passwd
Теперь файл неизменяемый, и ни один пользователь не сможет его изменить. И более того, даже суперпользователь не сможет модифицировать, перезаписать или удалить этот файл. Перед тем как что либо делать с этим файлом нужно отключить атрибут.
Для отключения любого из атрибутов chattr используйте оператор минус (-):
sudo chattr -i /etc/passwd
Если вы хотите сделать все файлы в каталоге неизменяемыми используйте опцию -R:
sudo chattr -R +i /etc/
Еще один полезный атрибут только добавлять (a), который позволяет только добавлять информацию в файл, без возможности перезаписи. Он может понадобится, например, если вы не хотите чтобы кто-либо мог очистить журнал. Он устанавливается аналогично атрибуту i:
sudo chattr +a /var/log/syslog
Обратите внимание, если вы скопируете файл для которого настроены определенные атрибуты, на новый файл они распространятся не будут.
Выводы
В этой инструкции я показал как использовать команды управления дополнительными атрибутами файлов chattr и lsattr для защиты от случайной перезаписи или удаления. Не забывайте что вы не можете использовать chattr как меру безопасности так как атрибуты легко изменить. Один из способов решения этой проблемы - ограничить доступ к самой утилите chattr. Для получения более подробной информацию смотрите man страницу команды.