- Команда Chattr в Linux (атрибуты файлов)
- chattr Синтаксис
- chattr Пример
- Выводы
- Как предотвратить модификацию файлов в Linux с помощью команды chattr
- Атрибуты и флаги
- Операторы
- 1. Как защитить файл от удаления
- 2. Как снять атрибут с файла
- 3. Как защитить файлы /etc/passwd и /etc/shadow
- 4. Добавление данных в файл без изменения уже существующих
- 5. Как защищать директории
- Атрибуты файлов в Linux
- Что это такое?
- Как это работает?
- Специальные биты режимов доступа setuid и setgid
- Sticky-бит
- Расширенные атрибуты файла linux
- Пространства имён расширенных атрибутов
- Расширенные атрибуты безопасности
- Системные расширенные атрибуты
- Доверительные расширенные атрибуты
- Пользовательские расширенные атрибуты
- Различия с файловой системой
- СООТВЕТСТВИЕ СТАНДАРТАМ
- ЗАМЕЧАНИЯ
Команда Chattr в Linux (атрибуты файлов)
В Linux атрибуты файла — это свойства метаданных, которые описывают поведение файла. Например, атрибут может указывать, сжат ли файл, или указывать, можно ли удалить файл.
Некоторые атрибуты, такие как неизменяемость, могут быть установлены или очищены, в то время как другие, такие как шифрование, доступны только для чтения и могут быть только просмотрены. Поддержка определенных атрибутов зависит от используемой файловой системы.
В этой статье объясняется, как использовать команду chattr для изменения атрибутов файлов в файловых системах Linux.
chattr Синтаксис
Команда chattr имеет следующую общую форму:
Значение части [OPERATOR] может быть одним из следующих символов:
- + — Оператор «плюс» сообщает chattr о необходимости добавления указанных атрибутов к существующим.
- — — Оператор минус указывает chattr удалить указанные атрибуты из существующих.
- = — Оператор равенства сообщает chattr о необходимости установить указанные атрибуты как единственные.
За оператором следует один или несколько флагов [ATTRIBUTES] которые вы хотите добавить или удалить из атрибутов файла. Ниже приведен список нескольких общих атрибутов и связанных флагов:
- a — если этот атрибут установлен, файл можно открыть только в режиме добавления для записи.
- A — Когда файл с этим установленным атрибутом открыт, его временная запись не изменяется. atime (время доступа) — это время последнего доступа / открытия файла какой-либо командой или приложением.
- e — этот атрибут означает, что файл использует экстенты для сопоставления блоков на диске. Атрибут e нельзя изменить с помощью chattr .
- i — этот атрибут указывает, что файл неизменяемый, что означает, что файл нельзя удалить или переименовать.
Чтобы получить полный список всех атрибутов и флагов файлов, введите в терминале man chattr .
По умолчанию атрибуты файла не сохраняются при копировании файла с помощью таких команд, как cp или rsync .
chattr Пример
Одно из распространенных применений chattr — установка флага неизменяемости для файла или каталога, чтобы пользователи не могли удалить или переименовать файл.
Вы можете просмотреть атрибуты файла с помощью команды lsattr :
Вывод ниже показывает, что установлен только флаг e :
Чтобы сделать файл неизменяемым, добавьте флаг i с оператором + к существующим атрибутам:
Мы используем sudo, потому что только root может изменить неизменяемый флаг.
Подтвердите, что атрибут добавлен:
Чтобы отменить изменения и удалить неизменяемый флаг, используйте оператор — :
С помощью chattr вы можете добавлять или удалять сразу несколько атрибутов. Например, чтобы сделать файл неизменяемым и указать ядру не отслеживать время последнего доступа, вы должны использовать:
Последний оператор, который вы можете использовать, — это оператор = . Например, чтобы установить атрибут e как единственный атрибут, вы должны запустить:
Обратите внимание, что оператор и флаг заключены в кавычки, чтобы избежать интерпретации оболочки символа + .
Выводы
chattr — это инструмент командной строки для изменения атрибутов файлов в файловой системе Linux.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
Как предотвратить модификацию файлов в Linux с помощью команды chattr
chattr (Change Attribute) — это утилита командной строки в linux, которая используется для установки/снятия специальных атрибутов файлов для предотвращения случайной модификации и удаления файлов или директорий, даже если вы авторизованы как root.
Нативные файловые системы в Linux, такие как ext2, ext3, ext4, btrfs, поддерживают все флаги для файлов. Никто не сможет удалить или модифицировать файл/директорию, защищенный атрибутами, установленными с помощью команды chattr, даже имея полный доступ ко всем операциям с файлом. Очень полезно защитить атрибутами такие файлы , как passwd и shadow, содержащие информацию о пользователе.
Атрибуты и флаги
Ниже приведен список часто используемых атрибутов и соответствующих флагов, которые согут быть установлены с помощью команды chattr.
1. Если обращаются к файлу с установленным атрибутом «А», его запись atime не обновляется.
2. Если модифицируется файл с установленным атрибутом «S», изменения синхронизируются с диском.
3. Если установлен атрибут «a», файл может быть открыт для записи только в режиме добавления текста.
4. Если установлен атрибут «i», файл нельзя модифицировать (immutable). Это значит нельзя переименовывать, создавать символьные ссылки, исполнять и записывать, снять этот втрибут может только суперпользователь.
5. Если установлен атрибут «j», то при модификации файла сначала будет обновлена информация о файле в журнале ext3, а затем уже сам файл.
6. Если установлен атрибут «t», файл нельзя объединять с другими файлами.
7. Файл с атрибутом «d» не будет являться кандидатом для резервного копирования при запуске процесса dump.
8. При удалении файла с атрибутом «u» его данные сохраняются, и пользователь сможет восстановить его.
Операторы
+ : добавляет атрибут к существующим у файла атрибутам.
— : удаляет атрибут файла.
= : оставляет существующие у файла атрибуты.
Теперь мы продемонстрируем вам несколько примеров применения команды chattr.
1. Как защитить файл от удаления
Для демонстрационных целей мы будем использовать директорию demo и файл important_file.conf. Сначала посмотрим, какие атрибуты у них установлены, с помощью команды ls -l. Как можно видеть ниже пока никаких атрибутов нет.
Для установки атрибута мы используем оператор +, для снятия — оператор -. Давайте защитим файл от удаления кем бы то ни было, даже суперпользователем.
Замечание: Бит +i может быть установлен только суперпользователем, либо пользователем с привилегиями sudo.
Давайте проверим установленные атрибуты с помощью команды ‘lsattr’.
Теперь, попытавшись удалить, переименовать или изменить права доступа к файлу, вы увидите сообщение: «Operation not permitted».
2. Как снять атрибут с файла
В приведенном выше примере мы увидели, как установить атрибут для предотвращения непреднамеренного удаления файл, здесь же мы научимся удалять атрибут, чтобы снова поучить возможность удалять или редактировать файл.
Теперь снова проверим наличие атрибутов с помощью команды ‘lsattr’.
Флаг ‘-i’ удален, поэтому мы спокойно можем удалить файлы и директории.
3. Как защитить файлы /etc/passwd и /etc/shadow
Предотвратив модификацию файлов /etc/passwd или /etc/shadow, мы защитим их от случайного удаления или подмены, а также отключим создание пользовательских аккаунтов.
Теперь попробуем создать создать нового пользователя, и получаем сообщение об ошибке ‘cannot open /etc/passwd’.
Таким образом вы можете защитить важные файлы от удаления.
4. Добавление данных в файл без изменения уже существующих
Если вы хотите разрешить только добавление данных файл, без редактирования уже существующих данных, это можно сделать с помощью установки атрибута ‘a’:
Теперь файл можно открыть на запись только в режиме добавления данных. Попробовав заменить существующее содержимое файла example.txt, вы увидите сообщение об ошибке ‘Operation not permitted’:
Попытаемся добавить в файл новый контент и проверить результат:
5. Как защищать директории
Для защиты всей директории вместе с содержащимися в ней файлами используется флаг ‘-R’ (рекурсия) вместе с ‘+i’.
После рекурсивной установки атрибута попробуем удалить директорию вместе со всеми файлами:
Источник
Атрибуты файлов в Linux
Файловую систему (ФС) невозможно представить без такого важного её компонента, как атрибуты файлов. С технической точки зрения такое, конечно же, возможно, однако это было бы абсолютно бессмысленно. Поскольку не отвечало бы даже далеко не самым «строгим» требованиям для обеспечения безопасности, надёжности и масштабируемости. Поскольку вся работа с операционными системами Linux «завязана» на ФС. То становится очевидным то, как важно уметь её (ФС) понимать. Атрибуты файлов — это, образно выражаясь, «язык», на котором «общаются» между собой, собственно ФС и пользователи (особенно системные администраторы) систем Linux.
Что это такое?
Технически это набор из девяти основных битов. Определяющих какие из пользователей обладают правами на чтение, запись. А также запуск файлов для выполнения. Данный набор формирует код, называемый режимом доступа к файлу/каталогу. Первые три бита определяют права доступа для владельца. Следующие — для группы пользователей, к которой относится файл. и последние три бита — права доступа для всех остальных пользователей в системе. На практике это выглядит так:
Этот вывод говорит о том, что файл .mysql_history доступен для чтения и записи только его владельцу — пользователю john. О чём свидетельствуют первые три символа (rw-) в режима доступа. Символ «-», стоящий перед ними — это признак, что это файл, а не каталог, блочное устройство и т. д. Таким образом, ФС на всем понятном языке говорит, что данный файл может быть прочитан или отредактирован только его владельцем (или суперпользователем).
Существует также ещё четыре дополнительных бита. Которые определяют тип самого файла и задаются непосредственно при создании файла. С помощью команды chmod можно менять основные (и некоторые дополнительные) биты режима доступа. Сделать это может только владелец файла или суперпользователь. Просматривать атрибуты (в том числе и режимы доступа) позволяет команда ls. Таким образом, характер поведения ФС, а также распределение доступа и управление им полностью определяется атрибутами файлов. Которые хранит сама ФС — это самодостаточный и универсальный подход.
Как это работает?
Для записи кода режима доступа используется восьмеричная запись чисел. Как уже было отмечено, код доступа содержит три «триады» битов — для пользователя, группы и всех остальных, именно в таком порядке. Битам из первой триады соответствуют значения в восьмеричной записи 400, 200 и 100. Для второй триады (т. е. для группы) — 40, 20 и 10. Наконец, для третьей (все остальные) — 4, 2 и 1. В свою очередь, первому биту в каждой триаде соответствует доступ на чтение (r — «read»). Второму — на запись (w — «write») и третьему — на выполнение, т. е. x — «execute».
В традиционной модели прав доступа UNIX предполагается, что каждый пользователь «заперт» в пределах всего одной категории (триады). Это означает, что для неоднозначной ситуации применяются самые строгие права. Например, право на владение всегда определяется только битами из триады владельца. И никак и никогда группой или другими пользователями.
Установка бита чтения (r) в одной из триад (или во всех) задаёт право открывать данный файл для чтения соответствующим категориям пользователей. Наличие бита записи (w) позволяет изменять файл. При этом возможно его удаление и/или переименование файла, но только в том случае, если заданы соответствующие биты для его родительского каталога, поскольку именно в его записях хранятся имена файлов.
Установка бита запуска позволяет, собственно, запускать файл на выполнение. Такие файлы называются «исполняемыми». Исполняемых файлов существует две разновидности: бинарные — исполняемые центральным процессором, а также сценарии или скрипты, исполняемые командным интерпретатором. В последнем случае это обычный текстовый файл, но для того, чтобы интерпретатор мог определить, с кем «имеет дело», в самое начало таких файлов помещаются специальные инструкции, вроде такой:
В данном примере указывается, что файл является сценарием для выполнения интерпретатором Perl. Вместо perl может быть указан любой другой интерпретатор, например bash или sh.
Когда бит выполнения устанавливается для каталога. То это означает, что в данный каталог разрешён переход, либо разрешён доступ к файлу через данный (транзитом, так сказать) каталог. Но без получения списка подкаталогов и всего содержимого каталога. Для того, чтобы получить содержимое какого-либо каталога. Необходимо, чтобы для него вместе с битом выполнения был установлен также и бит чтения.
Специальные биты режимов доступа setuid и setgid
Очень важное значение в системах Linux имеют биты setuid (бит смены идентификатора пользователя) и setgid (бит смены идентификатора группы). Их назначение в том, чтобы помочь, в определённых ситуациях, программам получить полноценный доступ к каким-либо файлам и/или процессам. Которые по спецификации основного режима доступа недоступны пользователям, от имени которых эти программы запускаются. Битам setuid и setgid в восьмеричной записи соответствуют значения 4000 и 2000. Так что всё это значит? Дело в том, что если для какого-либо файла установлен бит setuid.То какой-либо пользователь (неважно кто) может запускать на исполнение этот файл от имени владельца этого файла. Таким образом работают такие программы как passwd, которую может использовать пользователь для смены своего пароля. Однако исполняемый файл passwd принадлежит суперпользователю root. Естественно, setuid и setgid можно устанавливать командой chmod:
Здесь первая команда устанавливает для файла settings.php бит setuid. Вторая — setgid, третья — оба этих бита сразу.
В выводе команды ls это выглядит так:
Здесь символ «s» в спецификации режима доступа. Говорит о том, что установлен бит setgid (вторая триада). Вместо него может быть символ «S», т. е. заглавная буква, которая говорит о том, что данный бит для этого файла был установлен впервые.
В контексте каталога может устанавливаться бит setgid. В этом случае всем создаваемым внутри этого каталога файлам будут назначаться идентификатор группы этого каталога. А не группы владельца файлов.
Sticky-бит
Этот дополнительный бит служит для того, чтобы внутри каталога, для которого установлен этот бит, удаление и/или переименование файлов могли производить только их владельцы или суперпользователь.
Установить sticky-бит может только суперпользователь, но обычный пользователь-владелец файла может его снять. Sticky-биту соответствует восьмеричное значение 1000, пример:
А в выводе команды ls это будет выглядеть следующим образом:
В данном выводе в спецификации режима доступа символ «T» говорит об установленном sticky-бите. Его представление в виде заглавной и строчной букв имеет то же значение, как и по аналогии с битами setuid и setgid.
В заключении стоит ещё раз отметить то, насколько важно понимать и правильно интерпретировать атрибуты файлов. От этого зависит, насколько корректно и надёжно будет функционировать вся система. Грамотное системное администрирование невозможно без понимания работы ФС, в частности того, что такое атрибуты файлов.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Расширенные атрибуты файла linux
Расширенные атрибуты дополняют обычные атрибуты, которые связаны со всеми inode в файловой системе (т. е., данные stat(2)). Часто они используются для предоставления дополнительных возможностей файловой системы, например, дополнительные возможности безопасности, такие как списки контроля доступа (ACL), могут быть реализованы через расширенные атрибуты.
Пользователи, у которых доступ к поиску для файла или каталога могут использовать listxattr(2) для получения списка имён атрибутов, определённых для этого файла или каталога.
Расширенные атрибуты доступны как атомарные объекты. При чтении (getxattr(2)) возвращается всё значение атрибута и происходит его сохранение в буфер. При записи (setxattr(2)) происходит замещение старого значения на новое.
Место под расширенные атрибуты может быть учтено в дисковой квоте владельца файла и файловой группы.
Пространства имён расширенных атрибутов
Механизм пространства имён используется для определения различных классов расширенных атрибутов. Эти различные классы существуют по нескольким причинам; например, права доступа и мандаты, требуемые для работы с расширенными атрибутами в одном пространстве имён, могут отличаться в другом.
В настоящее время определены следующие классы: security, system, trusted и user. В будущем могут появиться дополнительные классы.
Расширенные атрибуты безопасности
Системные расширенные атрибуты
Доверительные расширенные атрибуты
Пользовательские расширенные атрибуты
Биты прав по разному учитываются между обычными файлами и каталогами и специальными файлами и символическими ссылками. У обычных файлов и каталогов битами прав определяется доступ к содержимому файлов, а у специальных файлов ими определяется доступ к устройству, которое описывает специальный файл. Файловые права на символические ссылки не используются при проверке доступа. Эти различия позволили бы пользователям использовать ресурсы файловой системы без учёта выделенных дисковых квот для группы или всем остальным, имеющим доступ на запись в специальные файлы и каталоги.
По этой причине пользовательские расширенные атрибуты разрешены только для обычных файлов и каталогов, а доступ к пользовательским расширенным атрибутам разрешён только владельцу и пользователям с соответствующими мандатами для каталогов с установленным закрепляющим битом (описание закрепляющего бита смотрите в справочной странице chmod(1)).
Различия с файловой системой
Для использования пользовательских расширенных атрибутов в некоторых файловых системах, таких как Reiserfs (и, исторически, ext2 и ext3), требуется, чтобы файловая система была смонтирована с параметром монтирования user_xattr.
В текущих реализациях файловых систем ext2, ext3 и ext4 общее количество байт, используемое для имён и значений расширенных атрибутов всех файлов, должно помещаться в один блок файловой системы (1024, 2048 или 4096 байт, в зависимости от размера блока, указанного при создании файловой системы).
В реализациях файловых систем Btrfs, XFS и Reiserfs нет ограничения на количество расширенных атрибутов, связанных с файлом, а для хранения информации о расширенных атрибутах на диске используются масштабируемые алгоритмы.
В реализациях файловых систем JFS, XFS и Reiserfs ограничение на количество байт, используемых для значения EA, задаётся потолком VFS.
В реализации файловой системы Btrfs общее количество байт, используемое для имени, значения и расходов реализации, ограничено значением файловой системы nodesize (по умолчанию 16 КБ).
СООТВЕТСТВИЕ СТАНДАРТАМ
ЗАМЕЧАНИЯ
Прежде эта страница называлась attr(5).
Источник