- Расширенные атрибуты файлов linux
- ОПИСАНИЕ
- Пространства имён расширенных атрибутов
- Расширенные атрибуты безопасности
- Системные расширенные атрибуты
- Доверительные расширенные атрибуты
- Пользовательские расширенные атрибуты
- Различия с файловой системой
- СООТВЕТСТВИЕ СТАНДАРТАМ
- ЗАМЕЧАНИЯ
- Дополнительные атрибуты файлов: sticky bit, suid, sgid
- Sticky bit
- SUID (Set User ID)
- SGID (Set Group ID)
- Обозначение атрибутов sticky, suid, sgid
Расширенные атрибуты файлов linux
ОПИСАНИЕ
Расширенные атрибуты представляют собой пары имя:значение, которые постоянно связаны с файлами и каталогами, подобно тому как строки окружения связаны с процессом. Атрибут может быть определён или не определён. Если он определён, то его значение может быть или пустым, или не пустым. Расширенные атрибуты дополняют обычные атрибуты, которые связаны со всеми 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).
Дополнительные атрибуты файлов: sticky bit, suid, sgid
В Linux существует три основных вида прав — право на чтение ( read ), запись ( write ) и выполнение ( execute ), а также три категории пользователей, к которым они могут применяться — владелец файла ( user ), группа владельца ( group ) и все остальные ( others ). Но, кроме прав чтения, выполнения и записи, есть еще три дополнительных атрибута.
Sticky bit
Используется в основном для каталогов, чтобы защитить в них файлы. В такой каталог может писать любой пользователь. Но, из такой директории пользователь может удалить только те файлы, владельцем которых он является. Примером может служить директория /tmp , в которой запись открыта для всех пользователей, но нежелательно удаление чужих файлов.
SUID (Set User ID)
Атрибут исполняемого файла, позволяющий запустить его с правами владельца. В Linux приложение запускается с правами пользователя, запустившего указанное приложение. Это обеспечивает дополнительную безопасность т.к. процесс с правами пользователя не сможет получить доступ к важным системным файлам, которые принадлежат пользователю root .
Если на исполняемый файл установлен бит suid , то при выполнении его «эффективный userID» автоматически меняется на идентификатор того пользователя, который является владельцем этого файла. То есть, независимо от того, кто запускает эту программу, она при выполнении имеет права владельца этого файла.
Исполняемый файл с установленным атрибутом suid является «потенциально опасным». Без установленного атрибута, файл не позволит обычному пользователю сделать то, что выходит за пределы прав пользователя (пример, программа passwd позволяет пользователю изменить только собственный пароль). Но, даже незначительная ошибка в такой программе может привести к тому, что злоумышленник сможет заставить её выполнить ещё какие-нибудь действия, не предусмотренные автором программы.
SGID (Set Group ID)
Аналогичен suid , но относиться к группе. Если установить sgid для каталога, то все файлы созданные в нем, при запуске будут принимать идентификатор группы каталога, а не группы владельца, который создал файл в этом каталоге.
Однако это не самый частый случай использования suid . Если применить этот флаг к каталогу — все файлы и подкаталоги в этом каталоге будут создаваться с группой исходного каталога. Это может быть полезно при использовании общих папок.
Например, в системе есть два пользователя user1 и user2 , они работают с каталогом /var/tmp/common , к которому у обоих есть доступ (так как оба входят в группу common ). В стандартной ситуации, когда каждый из пользователей создает файл, этому файлу присваиваются права основной группы пользователя. В этом случае user1 не может прочитать файлы пользователя user2 и наоборот.
После установки бита sgid на каталог /var/tmp/common , он будет иметь следующие права — drwxr-sr-x. 2 root common 4096 . В этом случае все файлы и подкаталоги, созданные в /var/tmp/common , будут иметь группу common , что позволит обоим пользователям работать с файлами.
Обозначение атрибутов sticky, suid, sgid
Специальные права используются довольно редко, поэтому при выводе программы ls -l символ, обозначающий указанные атрибуты, закрывает символ стандартных прав доступа. Пример:
где первая s — это suid , вторая s — это sgid , а последняя t — это sticky bit .
В приведенном примере не понятно, rwt — это rw- или rwx ? Определить это просто. Если t маленькое, значит x установлен. Если T большое, значит x не установлен. То же самое правило распространяется и на s .
В числовом эквиваленте данные атрибуты определяются первым символом при четырехзначном обозначении (который часто опускается при назначении прав), например в правах 1777 — символ 1 обозначает sticky bit . Остальные атрибуты имеют следующие числовое соответствие:
$ chmod 4755 backup.sh # установить suid
$ chmod 2755 backup.sh # установить sgid
$ chmod 1775 /home/dev # установить sticky bit
Есть еще один способ, более удобный
$ chmod u+s file # установить suid $ chmod u-s file # удалить suid
$ chmod g+s file # установить sgid $ chmod g-s file # удалить sgid
$ chmod +t file # установить sticky bit $ chmod -t file # удалить sticky bit
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
- 1С:Предприятие (31)
- API (29)
- Bash (43)
- CLI (99)
- CMS (139)
- CSS (50)
- Frontend (75)
- HTML (66)
- JavaScript (150)
- Laravel (72)
- Linux (145)
- MySQL (76)
- PHP (125)
- React.js (66)
- SSH (27)
- Ubuntu (68)
- Web-разработка (509)
- WordPress (73)
- Yii2 (69)
- БазаДанных (95)
- Битрикс (66)
- Блог (29)
- Верстка (43)
- ИнтернетМагаз… (84)
- КаталогТоваров (87)
- Класс (30)
- Клиент (27)
- Ключ (28)
- Команда (68)
- Компонент (60)
- Конфигурация (61)
- Корзина (32)
- ЛокальнаяСеть (28)
- Модуль (34)
- Навигация (31)
- Настройка (139)
- ПанельУправле… (29)
- Плагин (33)
- Пользователь (26)
- Практика (99)
- Сервер (74)
- Событие (27)
- Теория (105)
- Установка (66)
- Файл (47)
- Форма (58)
- Фреймворк (192)
- Функция (36)
- ШаблонСайта (68)