Предположим вы хотите защитить некоторые важные файлы в 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 страницу команды.
Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали







Спасибо за статью, а можно вопрос?
Вот вывод команды ls
-rwxrwxrwx+ 1 user User 304227 окт 5 09:18 Копия Агентское
Что означает «+» после «rwxrwxrwx» ? Нигде не могу найти информации
Знак плюс означает что для данного файла кроме стандартных флагов прав Unix используются ACL списки доступа.
Хм... как/где их посмотреть?
По моему нужно сначала настроить расширение "ACL списки" в системе, а потом уже можно ими управлять с помощью утилит getfacl и setfacl. Вот например описание всего процесса и этой утилиты в частности на Ubuntu wiki http://help.ubuntu.ru/wiki/access_control_list#утилита_getfacl
chattr +u my_test_file
Если удалить файл с этим атрибутом, то он будет сохранен и можно восстановить данные при необходимости. А где этот файл сохраняется?
После удаления он останется на том же месте, но увидеть его смогут только спецпрограммы
Я добавил все возможные права директории drwxrwxrwx 4 handyst01 handyst01 4096 Oct 17 23:21 handystore.ua
потом еще нашел что был атрибут i на файле с логами в этой директории, я снял этот атрибут. И это все равно не помогло. Несмотря на то что я под рутом, я все равно не могу удалить эту директорию /home/handystore.ua как это может быть? в чем еще проблема?