15.5. Как отмечалось в подразделе 15.4.6, системный вызов umask() всегда задает маску umask для процесса и в то же время возвращает копию старой маски. Каким образом можно получить текущую копию маски umask, оставив ее без изменений?
15.6. Команда chmod a+rX file предоставляет право доступа на чтение всем категориям пользователей и подобным же образом предоставляет право доступа на выполнение всем категориям пользователей, если файл file является каталогом или если разрешение на выполнение предоставлено какой-либо категории пользователей файла, как показано в приведенном ниже примере:
$ ls — ld dir file prog
dr- 2 mtk users 48 May 4 12:28 dir
— r- 1 mtk users 19794 May 4 12:22 file
— r-x- 1 mtk users 19336 May 4 12:21 prog
$ chmod a+rX dir file prog
$ ls — ld dir file prog
dr-xr-xr-x 2 mtk users 48 May 4 12:28 dir
— r-r-r- 1 mtk users 19794 May 4 12:22 file
— r-xr-xr-x 1 mtk users 19336 May 4 12:21 prog
Напишите программу, использующую системный вызов stat() и команду chmod() для выполнения действий, эквивалентных команде chmod a+rX.
15.7. Напишите простую версию команды chattr(1), которая изменяет флаги индексного дескриптора. Подробности об интерфейсе командной строки для команды chattr см. на странице chattr(1) руководства. (Вам не требуется реализация параметров — R, — V и — v.)
16. Расширенные атрибуты
В данной главе описаны расширенные атрибуты (extended attributes, EA), допускающие использование произвольных метаданных в виде пар «имя-значение», привязанных к индексным дескрипторам. Расширенные атрибуты появились в версии Linux 2.6.
Расширенные атрибуты служат для реализации списков контроля доступа (см. главу 17) и возможностями файла (см. главу 39). Однако организация данных атрибутов является настолько общей, что позволяет задействовать их и для других целей. Так, например, можно применить их для записи номера версии файла, информации о MIME-типе или кодовой таблице файла, а также для создания графического значка (или указателя на него).
EA не определены в стандарте SUSv3. Тем не менее подобная функция представлена в некоторых других реализациях UNIX, в особенности в современных версиях ОС BSD (см. extattr(2)), Solaris 9 и выше (см. fsattr(5)).
Расширенным атрибутам требуется поддержка со стороны основной файловой системы. Такую поддержку обеспечивают файловые системы Btrfs, ext2, ext3, ext4, JFS, Reiserfs и XFS.
Данная поддержка является необязательной для файловой системы и контролируется с помощью параметров конфигурации ядра в меню File systems (Файловые системы). EA поддерживаются файловой системой Reiserfs, начиная с версии Linux 2.6.7.
Имена расширенных атрибутов представлены в виде пары namespace.name. Компонент namespace предназначен для разграничения расширенных атрибутов по функционально различным классам. Компонент name уникальным образом идентифицирует расширенный атрибут внутри данного пространства namespace.
Для компонента namespace поддерживаются четыре значения (типа EA): user, trusted, system и security. Они используются следующим образом.
• Расширенными атрибутами типа user могут управлять непривилегированные процессы при определенных условиях: для извлечения значения EA user необходимо иметь разрешение на чтение файла; для изменения значения данного атрибута необходимо иметь разрешение на запись. (Отсутствие необходимых прав доступа приведет к возникновению ошибки EACCES.) Для привязки расширенных атрибутов user к файлу в файловой системе ext2, ext3, ext4 или Reiserfs необходимо, чтобы основная файловая система была смонтирована с ключом user_xattr:
$ mount — o user_xattr
• Расширенные атрибуты trusted похожи на атрибуты user в том, что ими могут управлять пользовательские процессы. Однако для управления EA trusted такой процесс должен быть привилегированным (CAP_SYS_ADMIN).
• Расширенные атрибуты system используются ядром для привязки системных объектов к файлу. В настоящее время единственным поддерживаемым типом объектов является список контроля доступа (см. главу 17).
• Расширенные атрибуты security применяются для хранения меток, предназначенных для модулей защиты операционной системы, а также для привязки возможностей к исполняемым файлам (см. подраздел 39.3.2). Изначально EA security были разработаны для поддержки Linux с улучшенной защитой (Security-Enhanced Linux, SELinux, https://www.nsa.gov/what-we-do/research/selinux/).