Как сделать файл неизменяемым в Linux
Предположим, вы хотите защитить некоторые важные файлы в 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] [operator][attribute(s)] files...
Оператор может быть +
(добавляет выбранные атрибуты в список атрибутов), -
(удаляет выбранные атрибуты из списка атрибутов) или =
( который принудительно использует только выбранные атрибуты).
Вот некоторые из доступных атрибутов.
a
: можно открыть только в режиме добавления.A
: не обновлять atime (время доступа к файлу).c
: автоматически сжимается при записи на диск.C
: отключить копирование при записи.i
: сделать неизменяемым.s
: надежно удалены с автоматическим обнулением.
Неизменяемый атрибут
Чтобы сделать файл неизменяемым, вы можете добавить к нему атрибут immutable следующим образом. Например, чтобы защитить файл /etc/passwd
от записи:
$ sudo chattr +i /etc/passwd
Обратите внимание, что для установки или снятия атрибута immutable в файле необходимо использовать привилегии root. Теперь убедитесь, что атрибут immutable успешно добавлен в файл.
$ lsattr /etc/passwd
Как только файл установлен как неизменяемый, этот файл становится непроницаемым для изменения любым пользователем. Даже root не может изменить, удалить, перезаписать, переместить или переименовать файл. Вам нужно будет отключить неизменяемый атрибут, прежде чем вы сможете снова вмешиваться в файл.
Чтобы отключить неизменяемый атрибут, используйте следующую команду:
$ sudo chattr -i /etc/passwd
Если вы хотите сделать весь каталог (например, /etc
), включая все его содержимое, неизменяемым сразу рекурсивно, используйте параметр -R
:
$ sudo chattr -R +i /etc
Добавить только атрибут
Другим полезным атрибутом является атрибут только для добавления, который заставляет файл только увеличиваться. Вы не можете перезаписать или удалить файл с установленным атрибутом только для добавления. Этот атрибут может быть полезен, если вы хотите предотвратить случайную очистку файла журнала.
Как и в случае с неизменяемым атрибутом, вы можете перевести файл в режим только для добавления:
$ sudo chattr +a /var/log/syslog
Обратите внимание, что когда вы копируете неизменяемый файл или файл только для добавления в другой файл, эти атрибуты не будут сохранены во вновь созданном файле.
Заключение
В этом руководстве я показал, как использовать команды chattr
и lsattr
для управления дополнительными атрибутами файла, чтобы предотвратить (случайное или иное) изменение файла. Имейте в виду, что вы не можете полагаться на chattr
в качестве меры безопасности, так как можно легко отменить неизменяемость. Один из возможных способов обойти это ограничение — ограничить доступность самой команды chattr
или отказаться от возможностей ядра CAP_LINUX_IMMUTABLE
. Дополнительные сведения о chattr
и доступных атрибутах см. на его справочной странице.