У ядра Linux имеется платформа для реализации привилегий, связанных с программным обеспечением, для многих различных функций, обеспеченных ядром Linux при помощи функциональных возможностей. Эти функциональные возможности, которые основываются на еще не получившем официального утверждения варианте стандарта POSIX.1e и многих других дополнительных возможностях, определенных и полностью задокументированных в файле
Функциональные возможности связывают с идентификаторами пользователей следующим образом:
Ядро ограничивает использование многих системных вызовов или функциональных областей, вызванных системными вызовами процессов, которые обладают определенными функциональными возможностями. Если вызывающий процесс не обладает необходимой возможностью, выполнение затронутой области кода будет запрещено, и вызывающей стороне будет возвращена ошибка EPERM.
Например, если процесс пытается создать специальный файл устройства, инициализируя системный вызов
Полный перечень всех функциональных возможностей, включая их описания, содержится в файле исходного кода ядра Linux
include/linux/capability.h
, позволяют разбить полномочия программного обеспечения ядра, связанного с нулевым идентификатором пользователя в ряд дискретных полномочий на основе предпринимаемых действий. Функциональные возможности связывают с идентификаторами пользователей следующим образом:
- Если исполняется приложение SUID от имени владельца, являющимся обладателем учетной записи
root
, то для данного процесса включены все функциональные возможности. - Если семейство системных вызовов
set*uid
используется для изменения UID процесса вызова на ID, не равный 0, то для такого процесса все функциональные возможности заблокированы. - У процессов, изначально запущенных как подпроцессы учетной записью
root
, имеется весь набор функциональных возможностей. - У процессов, изначально запущенных как подпроцессы любыми учетными записями, отличными от
root
, отсутствует набор функциональных возможностей.
Ядро ограничивает использование многих системных вызовов или функциональных областей, вызванных системными вызовами процессов, которые обладают определенными функциональными возможностями. Если вызывающий процесс не обладает необходимой возможностью, выполнение затронутой области кода будет запрещено, и вызывающей стороне будет возвращена ошибка EPERM.
Например, если процесс пытается создать специальный файл устройства, инициализируя системный вызов
mknod
, ядро выполняет соответствующую проверку, чтобы удостовериться, что процесс может создавать специальные файлы устройств; при этом проверяется, что процесс обладает функциональной возможностью CAP_MKNOD
. В отсутствие специальных модулей ядра, которые определяют и используют соответствующие функциональные возможности (что, например, имеет место для объекта оценки), при проверке функциональных возможностей система возвращается назад, к предоставлению привилегий, связанных с программным обеспечением уровня ядра, на основе пользовательского идентификатора процесса.Полный перечень всех функциональных возможностей, включая их описания, содержится в файле исходного кода ядра Linux
include/linux/capability.h
.
Комментариев нет :
Отправить комментарий