На самом деле возможности применяются и могут регулироваться для каждого отдельного потока в процессе. Возможности определенного потока внутри многопоточного процесса можно просмотреть в файле /proc/PID/task/TID/status. Файл /proc/PID/status показывает возможности только главного потока.

Раньше для представления возможностей в Linux использовалось 32 бита. Но в версии 2.6.25, в которую были добавлены новые возможности, был осуществлен переход на 64-битные наборы.

39.3.2. Возможности файлов

Если у файла есть наборы возможностей, они передаются процессу, который этот файл выполняет. У файла может быть три набора возможностей.

• Разрешенные. Это возможности, которые могут быть добавлены в разрешенный набор во время выполнения exec() и вне зависимости от текущих возможностей процесса.

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

• Наследуемые. Это маска, которая применяется к набору наследуемых возможностей процесса, чтобы определить, какие из них должны быть включены в разрешенный набор после вызова exec().

Подробности об использовании возможностей файла во время выполнения 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() для создания устройств

Перейти на страницу:

Похожие книги