Представьте, что вы хотите защитить от перезаписи какие-либо важные файлы в вашей Linux-системе таким образом, чтобы их невозможно было умышленно или случайно изменить или удалить. В некоторых случаях вам может понадобиться защитить некоторые файлы конфигурации от автоматической перезаписи использующим их программным обеспечением. Хотя изменение владельца и прав доступа к этим файлам с помощью таких утилит, как chown и chmod и является одним из корректных решений в данной ситуации, данное решение не является идеальным, так как оно не позволяет предотвратить любые действия, выполняемые с использованием учетной записи пользователя root. Поэтому в описанной ситуации, несомненно, будет полезной утилита chattr
.
Утилита chattr
является стандартной утилитой Linux, позволяющей устанавливать или удалять атрибуты файла, которые отделены от стандартных прав доступа (чтение, запись, исполнение). Для работы с механизмом атрибутов предназначена еще одна утилита под названием lsattr
, которая выводит список атрибутов, установленных для заданного файла. Хотя механизм атрибутов файлов, для работы с которым используются утилиты chattr
и lsattr
, изначально и поддерживался лишь файловыми системами семейства EXT (EXT2/3/4), на сегодняшний день он также поддерживается многими другими файловыми системами в Linux, такими, как XFS, Btrfs, Reiserfs и некоторыми другими.
В данной статье я продемонстрирую методику использования утилиты chattr
для защиты от перезаписи файлов в Linux.
Утилиты chattr
и lsattr
являются частью пакета утилит e2fsprogs
, который предустановлен по умолчанию во всех современных дистрибутивах Linux.
Базовый синтаксис команд на основе утилиты chattr
представлен ниже:
$ chattr [-RVf] [оператор][атрибут(ы)] файлы...
В качестве оператора может использоваться символ “+” (указывающий на то, что следует добавить заданные атрибуты в список атрибутов файла), символ “-” (указывающий на то, что следует удалить заданные атрибуты из списка атрибутов файла), а также символ “=” (указывающий на то, что следует установить для файла лишь заданные атрибуты).
А это список некоторых доступных атрибутов:
- a: файл может быть открыт лишь в режиме дополнения.
- A: не следует обновлять метку времени доступа к файлу (atime).
- c: файл должен автоматически сжиматься в процессе записи на диск.
- C: следует отключить механизм копирования при записи.
- i: файл не должен перезаписываться.
- s: файл должен быть безопасно удален с последующим заполнением использованных для хранения его данных секторов диска нулевыми байтами.
Атрибут защиты от перезаписи файла (immutable)
Для того, чтобы защитить файл от перезаписи, вы можете добывать соответствующий атрибут “immutable” к списку его атрибутов. Например, для защиты от перезаписи файла /etc/passwd следует выполнить следующую команду:
$ sudo chattr +i /etc/passwd
Обратите внимание на то, что вам потребуются права пользователя root для того, чтобы защитить файл от перезаписи путем установки атрибута “immutable”, а также для последующего снятия этого атрибута. Теперь вы можете убедиться в том, что атрибут “immutable” был успешно добавлен в список атрибутов упомянутого файла.
$ lsattr /etc/passwd
После установки рассматриваемого атрибута, данный файл не сможет модифицировать ни один из пользователей системы. Даже пользователь root не сможет модифицировать, удалить, перезаписать, переместить или переименовать его. Вам придется снять этот атрибут перед началом работы с файлом.
Для снятия рассматриваемого атрибута следует воспользоваться следующей командой:
$ sudo chattr -i /etc/passwd
Если вы хотите защитить от перезаписи всю директорию (например, /etc) вместе со всем ее содержимым, вы можете воспользоваться флагом рекурсивного обхода “-R”:
$ sudo chattr -R +i /etc
Атрибут открытия файла лишь в режиме дополнения (append-only)
Еще одним полезным атрибутом является атрибут открытия файла лишь в режиме дополнения “append-only”, который позволяет разрешить исключительно дописывать данные в файл. Вы не сможете перезаписать или удалить файл с данным атрибутом. Он может быть полезен в том случае, если вы хотите защитить файл системного журнала от случайной очистки.
По аналогии с атрибутом защиты от перезаписи файла, вы можете установить атрибут открытия файла лишь в режиме дополнения с помощью следующей команды:
$ sudo chattr +a /var/log/syslog
Обратите внимание на то, что при копировании защищенного от перезаписи с помощью любого из упомянутых выше атрибутов файла, атрибуты не будут переноситься на новый файл.
Заключение
В данной статье была продемонстрирована методика использования утилит chattr
и lsattr
для управления дополнительными атрибутами файлов, позволяющими предотвратить случайную или преднамеренную модификацию последних. Помните о том, что вы не можете полагаться на утилиту chattr
как на инструмент дополнительной защиты системы, так как снятие соответствующих атрибутов с файлов не будет представлять каких-либо сложностей для злоумышленников. Один из способов исправления данной проблемы заключается в ограничении доступа пользователей к самой утилите chattr
или в лишении ее привилегии CAP_LINUX_IMMUTABLE
. Для ознакомления с дополнительной информацией, касающейся использования утилиты chattr
и доступных атрибутов файлов, рекомендую обратиться к данной странице руководства.