Главная >> Команды >> Команда chattr в Linux

Команда chattr в Linux

Предположим вы хотите защитить некоторые важные файлы в 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 страницу команды.

7 комментариев к “Команда chattr в Linux”

  1. Спасибо за статью, а можно вопрос?

    Вот вывод команды ls
    -rwxrwxrwx+ 1 user User 304227 окт 5 09:18 Копия Агентское

    Что означает «+» после «rwxrwxrwx» ? Нигде не могу найти информации

    Ответить
  2. chattr +u my_test_file
    Если удалить файл с этим атрибутом, то он будет сохранен и можно восстановить данные при необходимости. А где этот файл сохраняется?

    Ответить
  3. Я добавил все возможные права директории drwxrwxrwx 4 handyst01 handyst01 4096 Oct 17 23:21 handystore.ua
    потом еще нашел что был атрибут i на файле с логами в этой директории, я снял этот атрибут. И это все равно не помогло. Несмотря на то что я под рутом, я все равно не могу удалить эту директорию /home/handystore.ua как это может быть? в чем еще проблема?

    Ответить

Оставьте комментарий