На самом деле возможности применяются и могут регулироваться для каждого отдельного потока в процессе. Возможности определенного потока внутри многопоточного процесса можно просмотреть в файле /proc/PID/task/TID/status. Файл /proc/PID/status показывает возможности только главного потока.
Раньше для представления возможностей в Linux использовалось 32 бита. Но в версии 2.6.25, в которую были добавлены новые возможности, был осуществлен переход на 64-битные наборы.
39.3.2. Возможности файлов
Если у файла есть наборы возможностей, они передаются процессу, который этот файл выполняет. У файла может быть три набора возможностей.
•
•
Подробности об использовании возможностей файла во время выполнения exec() приводятся в разделе 39.5.
Разрешенные и наследуемые возможности файла раньше назывались принудительными и допустимыми. Сейчас эти термины считаются устаревшими, но они по-прежнему имеют смысл. Разрешенные возможности принудительно включаются в действующий набор во время выполнения exec(), независимо от текущих возможностей процесса. Наследуемые возможности файла допускаются для включения в разрешенный набор во время выполнения exec(), если они также включены в наследуемом наборе процесса.
Возможности, принадлежащие файлу, хранятся в расширенном атрибуте безопасности (см. раздел 16.1) под названием security.capability. Для изменения этого атрибута требуется возможность CAP_SETFCAP.
Таблица 39.1. Операции, которые позволяет выполнять каждая из возможностей
Возможность — Разрешает процессу
CAP_AUDIT_CONTROL — (Начиная с Linux 2.6.11.) Включать и выключать запись результатов аудита ядра в журнал; изменять правила фильтрации для аудита; получать состояние аудита и правил фильтрации
CAP_AUDIT_WRITE — (Начиная с Linux 2.6.11.) Сохранять записи в журнал аудита ядра
CAP_CHOWN — Изменять идентификатор пользователя (владельца) файла или назначать файлу идентификатор группы, участником которой процесс не является (chown())
CAP_DAC_OVERRIDE — Обходить проверки прав доступа на чтение, запись и выполнение (аббревиатура DAC означает discretionary access control — избирательное управление доступом); читать содержимое символьных ссылок cwd, exe и root в файле /proc/PID
CAP_DAC_READ_SEARCH — Обходить проверку доступа на чтение файлов, а также проверку на просмотр и выполнение (поиск) каталогов
CAP_FOWNER — В целом игнорировать проверки прав доступа к операциям, которые обычно требуют, чтобы UID файловой системы процесса совпадал с UID файла (chmod(), utime()); устанавливать флаг i-node для произвольных файлов; устанавливать и изменять списки контроля доступа (ACL) для произвольных файлов; игнорировать действие бита закрепления (англ. sticky bit) каталога при удалении файлов (unlink(), rmdir(), rename()); назначать флаг O_NOATIME произвольным файлам при выполнении вызовов open() и fcntl(F_SETFL)
CAP_FSETID — Изменять файл, даже если ядро не выключило биты установки пользовательских и групповых идентификаторов (write(), truncate()); включать бит установки группового идентификатора для файла, чей GID не совпадает с групповым идентификатором файловой системы процесса или дополнительным GID (chmod())
CAP_IPC_LOCK — Переопределять ограничения на блокирование памяти (mlock(), mlockall(), shmctl(SHM_LOCK), shmctl(SHM_UNLOCK)); использовать флаги SHM_HUGETLB и MAP_HUGETLB для операций shmget() и mmap() соответственно
CAP_IPC_OWNER — Обходить проверки прав доступа к операциям с объектами System V IPC
CAP_KILL — Обходить проверки прав доступа к отправке сигналов (kill(), sigqueue())
CAP_LEASE — (Начиная с Linux 2.4.) Выполнять аренду произвольных файлов (fcntl(F_SETLEASE))
CAP_LINUX_IMMUTABLE — Устанавливать флаги append и i-node (последние должны быть постоянными)
CAP_MAC_ADMIN — (Начиная с Linux 2.6.25.) Конфигурировать или вносить изменения состояния обязательного контроля доступа (англ. mandatory access control, или MAC) (реализовано в Linux на уровне модулей безопасности)
CAP_MAC_OVERRIDE — (Начиная с Linux 2.6.25.) Переопределять MAC (реализовано в Linux на уровне модулей безопасности)
CAP_MKNOD — (Начиная с Linux 2.4.) Использовать вызов mknod() для создания устройств