Chattr — это программа командной строки UNIX, которая поставляется в большинстве дистрибутивов Linux. Роль этой команды заключается в том, чтобы позволить пользователю-администратору устанавливать атрибуты файла, которые налагают ограничения на файлы.
Существует несколько атрибутов файла для разных ролей, таких как атрибут “+i
”, который предотвращает переименование, удаление или модификацию файла, и атрибут “+a
”, который позволяет добавлять только новое содержимое, а также несколько других, которые будут рассмотрены позже в этом руководстве.
Преимущество использования этой команды заключается в том, что ограничение распространяется как на обычного пользователя, так и на пользователя root, что делает ее хорошим выбором для защиты важных и конфиденциальных файлов от случайных или имеющих обратную силу изменений.
В этой статье, удобном для начинающих, мы объясним вам, как использовать команду chattr
с ее различными параметрами, операторами и атрибутами файла в реальном сценарии.
Команда chattr
принимает три аргумента: первый — это параметр, второй — атрибут файла, а третий — путь к файлу, к которому вы хотите применить выбранный атрибут файла.
$ chattr [option] [attribute*] [path/to/file*]
При указании атрибута файла вы будете в основном использовать операторы “+
” и “-
”: оператор “+
” добавляет ограничение выбранного атрибута к файлу, в то время как оператор “-
” удаляет его. Кроме того, вы используете оператор “=
”, чтобы удалить все существующие атрибуты и заменить их выбранными.
Доступными опциями для chattr
являются опция “-R
” для рекурсивного применения указанного атрибута к каждому файлу в выбранном каталоге, опция “-V
” для отображения измененных файлов и опция “-f
” для скрытия распространенных ошибок.
Нравится, не так ли? Теперь давайте узнаем немного больше о некоторых важных атрибутах файла, которые вы в основном будете использовать для установки ограничений с помощью команды chattr
, начиная с…
Ниже приведен список часто используемых chattr
атрибутов и их назначения.
a
: Разрешать добавление нового содержимого только при наложении ограничений на запись, переименование и удаление.A
: Запись времени доступа (или atime) заморожена.c
: Включает прозрачное сжатие файла в поддерживаемой файловой системе.S
: Изменения в файле обновляются синхронно, что обеспечит целостность критически важных данных.i
: Включает неизменяемый режим, который позволяет просматривать содержимое файла, но запрещает действия по записи, переименованию, удалению или добавлению.j
: Это гарантирует, что изменения сначала будут применены к журналу ext3, а затем к самому файлу.t
: Отключите хвостовое слияние.d
: Она отклонит процесс создания дампа для выбранного файла, который часто используется для создания резервных копий.u
: При случайном удалении файла создается копия файла, которую позже можно восстановить.e
: Это атрибут по умолчанию, применяемый ко всем файлам, который указывает, что файловая система использует экстенты для сопоставления местоположения файла на диске.
Приведенный выше список содержит несколько атрибутов из полного списка. Чтобы просмотреть весь список, вы можете использовать команду “man chattr
”. Однако для новичка этого достаточно, поскольку ваша работа в основном будет вращаться вокруг них. Давайте теперь рассмотрим несколько практических примеров использования этого атрибута.
Атрибут “+i
” делает файл неизменяемым, предотвращая любые модификации, даже пользователем root. В реальной ситуации критически важный файл конфигурации был бы защищен от случайных изменений.
$ sudo chattr +i myfile.txt
Вывод:
andreyex@linux: $ sudo chattr +1 myfile.txt <- Применение ограничения andreyex@linux:-$ echo "test" > myfile.txt bash: myfile.txt: Operation not permitted <- Выполнение ограниченной задачи andreyex@linux: $ rm myfile.txt rm: cannot remove 'myfile.txt': Operation not permitted andreyex@linux:-5 my myfile.txt newfile.txt mv: cannot move 'myfile.txt' to 'newfile.txt': Operation not permitted <- Выполнение ограниченной задачи andreyex@linux:-$
Содержимое файла по-прежнему можно просматривать, несмотря на ограничения на запись, переименование и удаление.
Чтобы снять ограничения, наложенные на файл предыдущим способом, вы можете использовать атрибут “-i
”.
$ sudo chattr -i myfile.txt
Вывод:
andreyex@linux:-$ sudo chattr -i myfile.txt <- Снятие ограничения andreyex@linux:-$ echo "test" > myfile.txt <- Тестирование ограничения andreyex@linux: -$ rm myfile.txt <- Тестирование ограничения andreyex@linux:-
Обратите внимание, что это снимет ограничение только для атрибута “+i
”. Если пользователь назначит другой атрибут или несколько атрибутов одновременно, они все равно будут существовать.
Атрибут “+a
” очень похож на атрибут “+i
» и запрещает действия по записи, переименованию и удалению, но позволяет добавлять новое содержимое в файл. Вы можете применить этот атрибут к файлам журнала, чтобы предотвратить изменения, имеющие обратную силу.
$ sudo chattr +i myfile.txt
Вывод:
andreyex@linux: $ sudo chattr +a myfile.txt <- Добавление ограничений andreyex@linux: 5 echo "New content" >> myfile.txt <- Добавление разрешения andreyex@linux: $ echo "Write content" > myfile.txt <- Запись запрещена bash: myfile.txt: Operation not permitted andreyex@linux:-5
Чтобы восстановить файл в исходное состояние, используйте атрибут “-a
”, чтобы снять ограничение только на добавление.
Чтобы отслеживать существующие атрибуты или проверять, установлен ли применяемый атрибут, вы можете использовать команду “lsattr
”, в которой перечислены все атрибуты, присвоенные выбранному файлу.
$ lsattr myfile.txt
Вывод:
andreyex@linux:-$ lsattr myfile.txt ----i---------e------- myfile.tx andreyex@linux:-$
Приведенный выше вывод указывает, что файл имеет два атрибута: “i
“, что означает неизменяемость файла, и “e
“, который является атрибутом по умолчанию, применяемым ко всем файлам.
Если к файлу применено несколько атрибутов, но вы хотите заменить их все выбранным, вы можете указать атрибут с помощью оператора “=
” для этой задачи.
$ sudo chattr =u myfile.txt
Вывод:
andreyex@linux:-$ lsattr myfile.txt ----i---------e------- myfile.txt andreyex@linux:-$ sudo chattr =u myfile.txt <- Замена существующего атрибута andreyex@linux:-$ lsattr myfile.txt - -u-------------------- myfile.txt andreyex@linux:-$
Чтобы применить выбранный атрибут ко всем файлам в целевом каталоге, используйте опцию “-RV
” для рекурсивного внесения изменений во все файлы, а затем перечислите затронутые файлы.
$ sudo chattr -RV +u mydir/
Вывод:
andreyex@linux:-$ sudo chattr -RV +u mydir/ chattr 1.47.0 (15-Feb-2024) Flags of mydir/ set as -u------------e------- Flags of mydir//file3.txt set as -u------------e------- Flags of mydir//file2.txt set as -u------------e------- Flags of mydir//filel.txt set as -u------------e------- Flags of mydir//file5.txt set as -u------------e------- Flags of mydir//file4.txt set as -u------------e------- andreyex@linux:-$
В этой статье вы узнали, как использовать команду chattr
с различными операторами и атрибутами, а также ее доступные опции. Если у вас есть какие-либо вопросы по теме, не стесняйтесь обращаться к нам через раздел комментариев.