При использовании Linux у нас есть много способов управления доступом к ресурсам: самый основной – это установка соответствующих прав UGO/RWX на файлы и каталоги.
В некоторых случаях мы также можем использовать setuid, setgid и sticky bit.
Кроме того, мы можем использовать ACL (список контроля доступа) для достижения более высокого уровня детализации или реализовать обязательный контроль доступа, например, на основе SELinux или AppArmor.
- 🔥 Реализация мандатного контроля доступа с помощью SELinux или AppArmor в Linux
- ☸️ Как исправить отсутствующие профили AppArmor в microk8s на LXD
В дополнение к вышеупомянутым стратегиям, в большинстве файловых систем мы можем манипулировать набором “атрибутов”, чтобы, например, сделать файл неизменяемым.
В этой статье мы поговорим об атрибутах файлов в Linux, узнаем, как проверить атрибуты, назначенные файлу, и как ими управлять.
Вывод списка атрибутов файлов
Для составления списка атрибутов файлов в Linux можно воспользоваться утилитой lsattr, которая входит в пакет e2fsprogs наиболее распространенных дистрибутивов Linux (несмотря на название, ее можно использовать и в файловых системах, отличных от ext2/3/4, например, xfs).
Утилита принимает в качестве аргументов один или несколько файлов и поддерживает ряд опций для изменения своего поведения.
Рассмотрим пример ее использования.
Когда lsattr вызывается без каких-либо аргументов или опций, она возвращает список атрибутов, связанных с файлами и каталогами, содержащимися в рабочем каталоге, точно так же, как это делает команда ls:
В приведенном выше примере видно, что я вызвал команду в каталоге HOME.
Из вывода команды видно, что видимым каталогам присвоен только атрибут thee: это означает, что они используют “экстенты” для отображения блоков на диске (это связано с тем, как работает файловая система ext4).
Как видите, скрытые файлы по умолчанию не включаются в вывод; чтобы включить их, мы можем передать команде параметр -a.
Мы также можем перечислить атрибуты каталога рекурсивно, используя опцию -R, или перечислить атрибуты каталога вместо его содержимого, используя -d.
Другой полезной опцией является -l, которая используется для отображения полного имени атрибутов, связанных с файлами, вместо одной буквы, идентифицирующей их:
Значение различных атрибутов можно найти в руководстве к утилите chattr, которая, как мы увидим в ближайшее время, используется для установки или удаления атрибутов.
Здесь мы приведем лишь некоторые из них (некоторые атрибуты могут быть установлены только на определенных файловых системах – “j”, например, не может быть установлен на файловой системе ext2, которая не имеет логирования):
Атрибут | Использование |
a | Если файл имеет атрибут a, содержимое может быть только добавлено к нему. |
c | Файл с атрибутом c прозрачно сжимается ядром при записи и распаковывается при чтении. |
i | Файл с атрибутом i не может быть изменен, удален или переименован (неизменяемый). |
s | Файл с атрибутом s автоматически обнуляется при удалении. |
j | Файл с установленным атрибутом j записывает данные в журнал файловой системы до фактической записи. |
Установка и удаление атрибутов
Утилита, которую мы используем для назначения атрибутов, – это chattr; ее синтаксис довольно прост: чтобы назначить атрибут файлу, мы используем знак +, за которым следует буква атрибута, и передаем путь к файлу (файлам), которому должен быть назначен атрибут, в качестве аргумента команды.
Ранее мы уже рассматривали эту утилиту:
🐧 Предотвращение случайного удаления или изменения файлов и папок в Linux
Рассмотрим пример.
Предположим, у нас есть файл (допустим, он называется example.txt), и мы хотим присвоить ему атрибут a, чтобы избежать перезаписи его содержимого. Вот команда, которую мы должны выполнить:
Вы можете заметить, что мы приписали к команде sudo, поскольку большинство атрибутов могут быть назначены или удалены только пользователем root.
Мы можем проверить, что атрибут был присвоен файлу, используя команду lsattr:
Теперь, если мы попытаемся записать, чтобы перезаписать файл, используя оператор перенаправления > на shell, мы получим ошибку:
см. также:
🐧 Как скопировать и вставить текстовый контент из терминала Linux
Если вместо этого мы используем оператор перенаправления >>, который делает так, что содержимое добавляется в файл, ошибок не возникает:
Вот еще один пример.
Атрибут i может быть использован для того, чтобы сделать файл неизменяемым и невозможным для удаления или перемещения даже пользователем root (который, однако, может удалить атрибут вообще):
Удаление атрибутов
Чтобы удалить один или несколько атрибутов из файлов, достаточно изменить “оператор”, который мы используем в chattr.
Вместо + мы используем -.
Чтобы удалить из файла “example.txt” атрибуты i и a, которые мы задали в предыдущем примере, выполните следующие действия:
В некоторых случаях мы хотим применить “обратную” логику и, по сути, сказать: “удалить все атрибуты, кроме указанных”: для применения этой стратегии мы можем использовать оператор =.
Заключение
В этом руководстве мы научились составлять список и управлять атрибутами файлов в Linux с помощью утилит “lsattr” и “chattr”, а также узнали значение некоторых атрибутов, таких как “i” (неизменяемый) или “a” (только для добавления).
Некоторые файловые системы принимают только определенный набор атрибутов: обратитесь к соответствующим руководствам, чтобы проверить, какие из них поддерживаются.
Чтобы узнать больше об атрибутах в целом, вы можете заглянуть в документацию вышеупомянутых утилит.
см. также:
- Linux – Основные права доступа к файлам и каталогам
- 🧟 Команды от A до Z Kali Linux
- Как использовать Udev для обнаружения и управления устройствами в Linux
- 🐧 Как сохранить права собственности и права доступа к файлам при копировании файлов или каталогов
- ⚖ Как настроить владельца / группу файлов на устройстве с помощью правил udev
- Автоматическое резервное копирование файлов на USB-носители при подключении
- Обнаружение вторжений и проверка целостности файловой системы Linux с помощью AIDE
- 📋 Что такое метаданные?
- 🕷️ Быстрый обзор: Уязвимость обхода пути
- 📁 Как создать скрытую, почти не удаляемую папку в Windows 10/11
- 🐧 Как узнать дату последнего изменения файла на Linux
- 🐚 Как проверить, какую оболочку вы используете на Linux
- 💉 9 популярных типов атак на веб-приложения
- 🖧 Burp Bounty: BurpSuite расширение для улучшения активного и пассивного сканера
- Как получить информацию о системе в Ubuntu Linux
- Как показать скрытые файлы зараженные вирусом