xattr(7) расширенные атрибуты

ОПИСАНИЕ

Расширенные атрибуты представляют собой пары имя:значение, которые постоянно связаны с файлами и каталогами, подобно тому как строки окружения связаны с процессом. Атрибут может быть определён или не определён. Если он определён, то его значение может быть или пустым, или не пустым.

Расширенные атрибуты дополняют обычные атрибуты, которые связаны со всеми inode в файловой системе (т. е., данные stat(2)). Часто они используются для предоставления дополнительных возможностей файловой системы, например, дополнительные возможности безопасности, такие как списки контроля доступа (ACL), могут быть реализованы через расширенные атрибуты.

Пользователи, у которых доступ к поиску для файла или каталога могут использовать listxattr(2) для получения списка имён атрибутов, определённых для этого файла или каталога.

Расширенные атрибуты доступны как атомарные объекты. При чтении (getxattr(2)) возвращается всё значение атрибута и происходит его сохранение в буфер. При записи (setxattr(2)) происходит замещение старого значения на новое.

Место под расширенные атрибуты может быть учтено в дисковой квоте владельца файла и файловой группы.

Пространства имён расширенных атрибутов

Имена атрибутов представляют собой строки с null в конце. Имя атрибута всегда указывается в полной форме — пространство_имён.атрибут, например, user.mime_type, trusted.md5sum, system.posix_acl_access или security.selinux.

Механизм пространства имён используется для определения различных классов расширенных атрибутов. Эти различные классы существуют по нескольким причинам; например, права доступа и мандаты, требуемые для работы с расширенными атрибутами в одном пространстве имён, могут отличаться в другом.

В настоящее время определены следующие классы: security, system, trusted и user. В будущем могут появиться дополнительные классы.

Расширенные атрибуты безопасности

Пространство имён атрибутов безопасности используется модулями безопасности ядра, такими как Security Enhanced Linux, а также для реализации мандатов файлов (смотрите capabilities(7)). Доступ на чтение и запись атрибутов безопасности зависит от политики, реализуемой модулем безопасности для каждого атрибута безопасности. Если модуль безопасности не загружен, то все процессы могут читать расширенные атрибуты безопасности, а запись доступна только процессам с мандатом CAP_SYS_ADMIN.

Системные расширенные атрибуты

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

Доверительные расширенные атрибуты

Доверительные расширенные атрибуты видимы и доступны только для процессов с мандатом CAP_SYS_ADMIN. Атрибуты этого класса используются при реализации механизмов в пользовательском пространстве (т. е., вне ядра) для хранения информации в расширенных атрибутах, к которым у обычных процессов не должно быть доступа.

Пользовательские расширенные атрибуты

Пользовательские расширенные атрибуты могут быть назначены файлам и каталогам для хранения произвольной дополнительной информации, такой как тип mime, используемый набор символов или кодировка файла. Права доступа к пользовательским атрибутам определяется битами прав файлов: для получения значения атрибута требуется право на чтение, а для изменения значения атрибута требуется право на запись.

Биты прав по разному учитываются между обычными файлами и каталогами и специальными файлами и символическими ссылками. У обычных файлов и каталогов битами прав определяется доступ к содержимому файлов, а у специальных файлов ими определяется доступ к устройству, которое описывает специальный файл. Файловые права на символические ссылки не используются при проверке доступа. Эти различия позволили бы пользователям использовать ресурсы файловой системы без учёта выделенных дисковых квот для группы или всем остальным, имеющим доступ на запись в специальные файлы и каталоги.

По этой причине пользовательские расширенные атрибуты разрешены только для обычных файлов и каталогов, а доступ к пользовательским расширенным атрибутам разрешён только владельцу и пользователям с соответствующими мандатами для каталогов с установленным закрепляющим битом (описание закрепляющего бита смотрите в справочной странице chmod(1)).

Различия с файловой системой

Ядро и файловая система могут ограничивать максимальное количество и размер расширенных атрибутов, которые можно связать с файлом. size of extended attributes that can be associated with a file. VFS налагает ограничение на длину имени атрибута в 255 байт и на значение атрибута в 64 КБ. Размер возвращаемого списка имён атрибутов также ограничивается 64 КБ (смотрите раздел ДЕФЕКТЫ в listxattr(2)).

Для использования пользовательских расширенных атрибутов в некоторых файловых системах, таких как Reiserfs (и, исторически, ext2 и ext3), требуется, чтобы файловая система была смонтирована с параметром монтирования user_xattr.

В текущих реализациях файловых систем ext2, ext3 и ext4 общее количество байт, используемое для имён и значений расширенных атрибутов всех файлов, должно помещаться в один блок файловой системы (1024, 2048 или 4096 байт, в зависимости от размера блока, указанного при создании файловой системы).

В реализациях файловых систем Btrfs, XFS и Reiserfs нет ограничения на количество расширенных атрибутов, связанных с файлом, а для хранения информации о расширенных атрибутах на диске используются масштабируемые алгоритмы.

В реализациях файловых систем JFS, XFS и Reiserfs ограничение на количество байт, используемых для значения EA, задаётся потолком VFS.

В реализации файловой системы Btrfs общее количество байт, используемое для имени, значения и расходов реализации, ограничено значением файловой системы nodesize (по умолчанию 16 КБ).

СООТВЕТСТВИЕ СТАНДАРТАМ

Расширенные атрибуты не описаны в POSIX.1, но некоторых других системах (например, BSD и Solaris) есть подобное свойство.

ЗАМЕЧАНИЯ

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

Прежде эта страница называлась attr(5).