🐧 Как составить список и управлять атрибутами файлов на Linux |

🐧 Как составить список и управлять атрибутами файлов на Linux

Мануал

При использовании Linux у нас есть много способов управления доступом к ресурсам: самый основной – это установка соответствующих прав UGO/RWX на файлы и каталоги.

В некоторых случаях мы также можем использовать setuid, setgid и sticky bit.

Кроме того, мы можем использовать ACL (список контроля доступа) для достижения более высокого уровня детализации или реализовать обязательный контроль доступа, например, на основе SELinux или AppArmor.

В дополнение к вышеупомянутым стратегиям, в большинстве файловых систем мы можем манипулировать набором “атрибутов”, чтобы, например, сделать файл неизменяемым.

В этой статье мы поговорим об атрибутах файлов в Linux, узнаем, как проверить атрибуты, назначенные файлу, и как ими управлять.

Вывод списка атрибутов файлов

Для составления списка атрибутов файлов в Linux можно воспользоваться утилитой lsattr, которая входит в пакет e2fsprogs наиболее распространенных дистрибутивов Linux (несмотря на название, ее можно использовать и в файловых системах, отличных от ext2/3/4, например, xfs).

Утилита принимает в качестве аргументов один или несколько файлов и поддерживает ряд опций для изменения своего поведения.

Рассмотрим пример ее использования.

Когда lsattr вызывается без каких-либо аргументов или опций, она возвращает список атрибутов, связанных с файлами и каталогами, содержащимися в рабочем каталоге, точно так же, как это делает команда ls:

lsattr
--------------e------- ./Templates
--------------e------- ./Downloads
--------------e------- ./Projects
--------------e------- ./Documents
--------------e------- ./Desktop
--------------e------- ./Music
--------------e------- ./Public
--------------e------- ./Videos
--------------e------- ./Pictures

В приведенном выше примере видно, что я вызвал команду в каталоге HOME.

Из вывода команды видно, что видимым каталогам присвоен только атрибут thee: это означает, что они используют “экстенты” для отображения блоков на диске (это связано с тем, как работает файловая система ext4).

Как видите, скрытые файлы по умолчанию не включаются в вывод; чтобы включить их, мы можем передать команде параметр -a.

Мы также можем перечислить атрибуты каталога рекурсивно, используя опцию -R, или перечислить атрибуты каталога вместо его содержимого, используя -d.

Другой полезной опцией является -l, которая используется для отображения полного имени атрибутов, связанных с файлами, вместо одной буквы, идентифицирующей их:

lsattr -l
./Templates                  Extents
./Downloads                  Extents
./Projects                   Extents
./Documents                  Extents
./Desktop                    Extents
./Music                      Extents
./Public                     Extents
./Videos                     Extents
./Pictures                   Extents

Значение различных атрибутов можно найти в руководстве к утилите chattr, которая, как мы увидим в ближайшее время, используется для установки или удаления атрибутов.

Здесь мы приведем лишь некоторые из них (некоторые атрибуты могут быть установлены только на определенных файловых системах – “j”, например, не может быть установлен на файловой системе ext2, которая не имеет логирования):

Атрибут Использование
a Если файл имеет атрибут a, содержимое может быть только добавлено к нему.
c Файл с атрибутом c прозрачно сжимается ядром при записи и распаковывается при чтении.
i Файл с атрибутом i не может быть изменен, удален или переименован (неизменяемый).
s Файл с атрибутом s автоматически обнуляется при удалении.
j Файл с установленным атрибутом j записывает данные в журнал файловой системы до фактической записи.

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

Утилита, которую мы используем для назначения атрибутов, – это chattr; ее синтаксис довольно прост: чтобы назначить атрибут файлу, мы используем знак +, за которым следует буква атрибута, и передаем путь к файлу (файлам), которому должен быть назначен атрибут, в качестве аргумента команды.

Ранее мы уже рассматривали эту утилиту:

🐧 Предотвращение случайного удаления или изменения файлов и папок в Linux

Как разрешить редактирование файла resolv.conf Linux

Рассмотрим пример.

Предположим, у нас есть файл (допустим, он называется example.txt), и мы хотим присвоить ему атрибут a, чтобы избежать перезаписи его содержимого. Вот команда, которую мы должны выполнить:

sudo chattr +a example.txt

Вы можете заметить, что мы приписали к команде sudo, поскольку большинство атрибутов могут быть назначены или удалены только пользователем root.

Мы можем проверить, что атрибут был присвоен файлу, используя команду lsattr:

lsattr -l example.txt
example.it                   Append_Only, Extents

Теперь, если мы попытаемся записать, чтобы перезаписать файл, используя оператор перенаправления >  на shell, мы получим ошибку:

echo "line" > example.txt
bash: example.txt: Operation not permitted

см. также:

🐧 Как скопировать и вставить текстовый контент из терминала Linux

Если вместо этого мы используем оператор перенаправления >>, который делает так, что содержимое добавляется в файл, ошибок не возникает:

echo "line" >> example.txt

Вот еще один пример.

Атрибут i может быть использован для того, чтобы сделать файл неизменяемым и невозможным для удаления или перемещения даже пользователем root (который, однако, может удалить атрибут вообще):

sudo chattr +i example.txt
sudo rm example.txt
rm: cannot remove 'example.txt': Operation not permitted

Удаление атрибутов

Чтобы удалить один или несколько атрибутов из файлов, достаточно изменить “оператор”, который мы используем в chattr.

Вместо + мы используем -.

Чтобы удалить из файла “example.txt” атрибуты i и a, которые мы задали в предыдущем примере, выполните следующие действия:

sudo chattr -ai example.txt

В некоторых случаях мы хотим применить “обратную” логику и, по сути, сказать: “удалить все атрибуты, кроме указанных”: для применения этой стратегии мы можем использовать оператор =.

Заключение

В этом руководстве мы научились составлять список и управлять атрибутами файлов в Linux с помощью утилит “lsattr” и “chattr”, а также узнали значение некоторых атрибутов, таких как “i” (неизменяемый) или “a” (только для добавления).

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

Чтобы узнать больше об атрибутах в целом, вы можете заглянуть в документацию вышеупомянутых утилит.

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий