Команда chattr: управляем атрибутами файлов

Chattr (Change Attribute) – команда в Linux, которая изменяет атрибуты файлов. Изначально применялась только в ext2, ext3, ext4, но сегодня может использоваться и в других файловых системах, например, XFS, ReiserFS, Btrfs и других.
Синтаксис команды
chattr [ -RV ] [ -v версия ] [ атрибуты ] файл/директорияОпции
-R – рекурсивное изменение атрибутов каталогов и их содержимого, игнорирование символических ссылок во время рекурсии;
-v version – вывод версии и номера сборки файловой системы;
-V – вывод версии программы;
-d – показ данных по всем атрибутам для всех каталогах;
-а – вывод атрибутов для всех файлов.
Атрибуты
а – разрешается добавлять информацию в файл или каталог, но изменять или удалять ее нельзя;
с – автоматическое сжатие файла при записи на диск;
D – синхронное обновление каталогов;
d – если запущена утилита dump, не выполняется бэкап для файла;
i – файлу присваивается статус неизменяемого;
j – все данные файла перед записью сохраняются в системный журнал;
s – обнуление блоков файла;
S – синхронное обновление;
u – содержимое файла сохраняется даже при его удалении.
Рассмотрим примеры
Присвоение файлу/каталогу статус неизменяемого
Например, мы хотим присвоить файлу /etc/passwd статус неизменяемого
# chattr +i /etc/passwdТеперь внести правки, перезаписать или удалить этот файл не может даже суперпользователь. Любые манипуляции с правами файла можно делать только после отключения атрибута.
Чтобы посмотреть, установился ли наш атрибут, используем команду lsattr
# lsattr /etc/passwdЧтобы удалить этот атрибут, пишем команду
# chattr –i /etc/passwdПроверяем, действительно ли мы отменили атрибут, снова прописывая команду
# lsattr /etc/passwdДолжно получиться примерно вот так
Добавление данных в файл без изменения содержимого
Если мы хотим разрешить каждому добавлять информацию в файл без изменения уже введенных данных, используем ключ a. Пишем
# chattr +a file2.txtПроверяем командой
# lsattr file2.txt
Теперь попробуем внести изменения в содержимое файла file2.txt
Добавим содержимое файла file1.txt в файл file2.txt
# echo "replace contain on file1.txt" > file2.txtПолучаем сообщение о том, что это действие запрещено.
-bash: file2.txt: Operation not permittedОбеспечение безопасности каталогов
Чтобы присвоить каталогу статус неизменяемого, мы используем опцию –R с атрибутом +i и указываем имя каталога.
Пишем команду
# chattr –R +i mydir1Теперь попробуем удалить каталог вместе с содержимым
# rm –rf mydir1Получаем сообщение
rm: cannot remove ‘mydir1’: Operation not permittedОтменяем запрет при помощи атрибута -i
# chattr -R -i mydir1Мы рассмотрели основные примеры использования этой команды. На самом деле, ее возможности далеко превосходят описанные нами в статье. Хотите знать и уметь больше? Записывайтесь на наши авторские курсы Linux!