Команда chattr

Помимо прав доступа каждый из файлов стандартной файловой системы Linux имеет набор атрибутов, регламентирующих особенности работы с ним. Атрибуты поддерживаются такими файловыми системами Linux, как ext4, btrfs и xfs. Команда chattr позволяет вызывать соответствующую утилиту для их модификации.

Базовый синтаксис команды выглядит следующим образом:

# chattr [параметры] [атрибуты] файлы

Наиболее важными параметрами являются параметр -R, позволяющий рекурсивно изменять атрибуты файлов в дереве директорий, параметр -V, позволяющий выводить подробную информацию о производимых изменениях и параметр -f, позволяющий не выводить большую часть сообщений об ошибках.

Утилита chattr принимает описания атрибутов в буквенной нотации, которая наверняка знакома пользователям, имеющим опыт работы с утилитой chmod. Так, для установки атрибутов используется префикс +, для удаления атрибутов — префикс -, а для сохранения атрибутов — префикс =. Наиболее важные атрибуты приведены в таблице ниже.

Атрибут Значение
A Не обновлять метку времени доступа к файлу
S Открывать файл в синхронном режиме (немедленно записывать изменения на диск)
a Открывать файл в режиме дополнения (дописывать данные в конец файла)
i Запретить изменение содержимого файла (а также его переименование, создание ссылок, исполнение)
j Обновлять информацию в журнале файловой системы перед обновлением содержимого файла
d Не создавать резервную копию файла с помощью утилиты dump
u Не удалять данные файла при его удалении (что позволяет впоследствии восстановить его)
C Не использовать механизм копирования при записи
s Безопасно удалять файл (что не позволит впоследствии его восстановить)
D Открывать файлы из директории в синхронном режиме (немедленно записывать изменения на диск)
e Индикатор использования экстентов для указания на блоки данных (не может быть изменен)
E Индикатор использования шифрования (не может быть изменен)
N Индикатор использования структуры inode для хранения данных файла (не может быть изменен)

Очевидно, что некоторые атрибуты не могут быть изменены. Для их просмотра должна использоваться утилита lsattr.

Примеры использования

Установка атрибутов

Команда chattr может использоваться для установки любых поддерживаемых атрибутов файлов. Например, для того, чтобы сделать файл неудаляемым, следует использовать атрибут i:

# chattr +i 1.odt
# rm 1.odt
rm: невозможно удалить '1.odt': Операция не позволена

Очевидно, что даже суперпользователь теперь не может удалить файл. Но он все так же может убрать атрибут и удалить его:

# chattr -i 1.odt
# rm 1.odt

Данный атрибут — довольно удобный механизм для защиты от ошибок, который, тем не менее, не является механизмом защиты файлов.

Рекурсивная установка прав доступа

Команда chattr может использоваться для рекурсивной установки атрибутов файлов и директорий из любого фрагмента дерева файловой системы, то есть, установки одних и тех же атрибутов всех файлов из директории и ее поддиректорий благодаря поддержке параметра -R. Например, для установки атрибута безопасного удаления всех файлов директории параметр -R может использоваться следующим образом:

# lsattr TL-WR1043ND_V4_160607/
--------------e---- TL-WR1043ND_V4_160607/How to upgrade TP-LINK Wireless N Router.pdf
--------------e---- TL-WR1043ND_V4_160607/GPL License Terms.pdf
--------------e---- TL-WR1043ND_V4_160607/wr1043ndv4_eu-up-ver3-16-9-P1[20160607-rel58297].bin
# chattr -R +s TL-WR1043ND_V4_160607/
# lsattr TL-WR1043ND_V4_160607/
s-------------e---- TL-WR1043ND_V4_160607/How to upgrade TP-LINK Wireless N Router.pdf
s-------------e---- TL-WR1043ND_V4_160607/GPL License Terms.pdf
s-------------e---- TL-WR1043ND_V4_160607/wr1043ndv4_eu-up-ver3-16-9-P1[20160607-rel58297].bin

Очевидно, что атрибут безопасного удаления был установлен для каждого из файлов.