Capabilities linux что это

Capabilities linux что это

Для того, чтобы выполнять проверки на соответствие прав, обычные реализации Unix имели две категории процессов: привилегированные процессы (privileged, у них действующий идентификатор пользователя равен 0, соответствуя суперпользователю root) и непривилегированные процессы (unprivileged, у них действующий идентификатор пользователя не равен 0). Привилегированные процессы осуществляют все проверки прав в ядре, в то время как непривилегированные процессы являются объектом для полноценной проверки всех прав на основе параметров процесса (обычно: действующий идентификатор пользователя UID, действующий идентификатор группы GID и список дополнительных групп).

Начиная с ядра 2.2, Linux обеспечивает (хотя и не полностью) в системе много возможностей , разделяющие привилегии, традиционно ассоциированные с суперпользователем, в отдельный блок, который может быть независимо включен или выключен.

Список возможностей

В системе Linux 2.4.20 реализованы такие возможности: CAP_CHOWN Позволяет реализовывать произвольные изменения в UID и GID файлов (см. chown (2)). CAP_DAC_OVERRIDE Пропустить проверки прав на чтение, запись и исполнение.. (DAC = «discretionary access control», «управление доступом по усмотрению».) CAP_DAC_READ_SEARCH Пропустить проверку прав на чтение файла и прав на чтение и исполнение для каталогов. CAP_FOWNER Пропустить проверку прав для операций, обычно требующих от файловой системы соответствия UID процесса и UID файла (например, utime (2)), исключая операции, обрабатываемые CAP_DAC_OVERRIDE и CAP_DAC_READ_SEARCH ; игнорировать бит sticky при удалении файлов. CAP_FSETID Не очищать биты set-user-ID и set-group-ID при изменении файла; разрешить установку бита set-group-ID только для файлов, чей GID не соответствует файловой системе или любым дополнительным GID вызывающего процесса. CAP_IPC_LOCK Разрешить блокировку памяти ( mlock (2), mlockall (2), shmctl (2)). CAP_IPC_OWNER Пропустить проверки прав на операции для объектов IPC в System V. CAP_KILL Пропустить проверки прав для отправляемых сигналов (см. kill (2)). CAP_LEASE (новинка в Linux 2.4) Разрешить аренды файлов для случайных файлов (см. fcntl (2)). CAP_LINUX_IMMUTABLE Разрешить установку дополнительных атрибутов EXT2_APPEND_FL и EXT2_IMMUTABLE_FL для файловой системы ext2. CAP_MKNOD (новинка в Linux 2.4) Разрешить создание особых файлов, использующих mknod (2). CAP_NET_ADMIN Разрешить различные сетевые операции (например, установку опций привилегированных сокетов, включение многоадресной рассылки, настройки интерфейсов, изменение таблиц маршрутизации). CAP_NET_BIND_SERVICE Разрешить привязку к зарезервированным портам сокетов доменов интернет (то есть к номерам портов менее 1024). CAP_NET_BROADCAST (не используется) Разрешить широковещательные сокеты, а также прослушивание многоадресных рассылок. CAP_NET_RAW Разрешить использование сокетов RAW и PACKET. CAP_SETGID Разрешить произвольные манипуляции с GID процессов и списком дополнительных GID; разрешить забывание GID при прохождении параметров сокетов через доменные сокеты Unix. CAP_SETPCAP Разрешать или удалять любые возможности в допустимых возможностях вызывающего, установленных в/из любых других процессах. CAP_SETUID Разрешить произвольные манипуляции UID процессов ( setuid (2), etc.); разрешить ложные UID при прохождении параметров сокетов через доменные сокеты Unix. CAP_SYS_ADMIN Разрешить диапазон системных административных операций, включая: quotactl (2), mount (2), swapon (2) , sethostname (2), setdomainname (2), Операции IPC_SET и IPC_RMID на произвольных объектах IPC в System V; разрешить ложные UID при прохождении параметров сокетов. CAP_SYS_BOOT Разрешить вызовы к reboot (2). CAP_SYS_CHROOT Разрешить вызовы к chroot (2). CAP_SYS_MODULE Разрешить загрузку и выгрузку модулей ядра; разрешить изменения в наборе возможностей. CAP_SYS_NICE Разрешить поднятие приоритета процесса ( nice (2), setpriority (2)) и изменение приоритета произвольных процессов; разрешить настройку политик в режиме реального времени для вызывающего процесса и настройку политик и приоритетов для произвольных процессов ( sched_setscheduler (2), sched_setparam (2)). CAP_SYS_PACCT Разрешить вызовы к acct (2). CAP_SYS_PTRACE Разрешить отслеживание произвольных процессов, используя ptrace (2) CAP_SYS_RAWIO Разрешить операции ввода/вывода с портами ( iopl (2) и ioperm (2)). CAP_SYS_RESOURCE Разрешить: использование зарезервированного места на файловых системах ext2; вызовы ioctl (2) управляющие журналированием в ext3; переопределение дисковых квот; увеличение лимитов ресурсов (см. setrlimit (2)); RLIMIT_NPROC переопределение лимитов ресурсов; msg_qbytes ограничить лимит очередей сообщений так, чтобы он был выше ограничений в /proc/sys/kernel/msgmnb (см. msgop (2) и msgctl (2). CAP_SYS_TIME Разрешить коррекцию системных часов ( settimeofday (2), adjtimex (2)); разрешить коррекцию текущего времени (в оборудовании). CAP_SYS_TTY_CONFIG Разрешить вызовы к vhangup (2).

Читайте также:  Iso образ windows 10 ltsc enterprise

Возможности процессов

В текущей реализации процессу выдаются все действующие и разрешенные возможности (объекты для операции по ограничению набора возможностей описаны ниже) при исполнении программы set-UID-root, или если процесс с действительным UID равным 0 исполняет новую программу.

Порожденный через fork (2) процесс копирует себе все наборы возможностей своего родителя.

Используя capset (2), процесс может управлять своими наборами возможностей, или, если у него есть возможность CAP_SETPCAP , возможностями других процессов.

Граница набора возможностей

Только процесс init может устанавливать биты в границе набора возможностей; все другие, кроме суперпользователя, могут только очищать биты в этом наборе.

В обычной системе граница набора возможностей всегда маскируется от возможности CAP_SETPCAP . Для снятия этого ограничения измените определение CAP_INIT_EFF_SET в include/linux/capability.h и пересоберите ядро.

Текущая и будущие реализации

Если рассмотреть Linux 2.4.20, то в нем выполняются только первые два требования.

В конечном итоге можно ассоциировать эти три набора возможностей с исполняемым файлом, который в соединении с наборами возможностей процесса будет определять возможности процесса после исполнения exec : Allowed (разрешенные): набор логически умножается (AND) с наследованным набором процесса для определения наследуемых возможностей, разрешенных процессу после исполнения exec. Forced (принужденные): возможности автоматически разрешаются процессу, независимо от наследуемых возможностей процесса. Effective (действующие): эти возможности в новом разрешенном наборе также будут установлены в новый действующий набор. (F(effective) будет состоять либо из всех нулей, либо из единиц.)

В то же время, так как текущие реализации не поддерживают наборы возможностей файлов, то во время исполнения exec: 1. Все три набора возможностей файла считаются очищенными. 2. Если исполняется программа set-UID-root, или если действительный идентификатор пользователя процесса равен 0 (root), то файлу разрешены и принудительно устанавливаются все единицы в наборе (то есть полный набор возможностей). 3. Если исполняется программа set-UID-root, то действующий набор файла определен во все единицы.

Во время исполнения exec, ядро рассчитывает новые возможности процесса, используя следующий алгоритм: где: P обозначает набор возможностей процесса до исполнения P’ обозначает значение набора возможностей после исполнения F обозначает набор возможностей файла cap_bset является значением границы набора возможностей.

Источник

Capabilities

Capabilities (POSIX 1003.1e, capabilities(7) ) provide fine-grained control over superuser permissions, allowing use of the root user to be avoided. Software developers are encouraged to replace uses of the powerful setuid attribute in a system binary with a more minimal set of capabilities. Many packages make use of capabilities, such as CAP_NET_RAW being used for the ping binary provided by iputils . This enables e.g. ping to be run by a normal user (as with the setuid method), while at the same time limiting the security consequences of a potential vulnerability in ping .

Contents

Implementation

Capabilities are implemented on Linux using extended attributes ( xattr(7) ) in the security namespace. Extended attributes are supported by all major Linux file systems, including Ext2, Ext3, Ext4, Btrfs, JFS, XFS, and Reiserfs. The following example prints the capabilities of ping with getcap , and then prints the same data in its encoded form using getfattr :

Читайте также:  Best linux terminal 2021

Extended attributes are copied automatically by cp -a , but some other programs require a special flag: rsync -X .

Capabilities are set by package install scripts on Arch (e.g. iputils.install ).

Administration and maintenance

It is considered a bug if a package has overly permissive capabilities, so these cases should be reported rather than listed here. A capability essentially equivalent to root access ( CAP_SYS_ADMIN ) or trivially allowing root access ( CAP_DAC_OVERRIDE ) does not count as a bug since Arch does not support any MAC/RBAC systems.

Other programs that benefit from capabilities

The following packages do not have files with the setuid attribute but require root privileges to work. By enabling some capabilities, regular users can use the program without privilege elevation.

Источник

Capabilities linux что это

Для того, чтобы выполнять проверки на соответствие прав, обычные реализации Unix имели две категории процессов: привилегированные процессы (privileged, у них действующий идентификатор пользователя равен 0, соответствуя суперпользователю root) и непривилегированные процессы (unprivileged, у них действующий идентификатор пользователя не равен 0). Привилегированные процессы осуществляют все проверки прав в ядре, в то время как непривилегированные процессы являются объектом для полноценной проверки всех прав на основе параметров процесса (обычно: действующий идентификатор пользователя UID, действующий идентификатор группы GID и список дополнительных групп).

Начиная с ядра 2.2, Linux обеспечивает (хотя и не полностью) в системе много возможностей , разделяющие привилегии, традиционно ассоциированные с суперпользователем, в отдельный блок, который может быть независимо включен или выключен.

Список возможностей

В системе Linux 2.4.20 реализованы такие возможности: CAP_CHOWN Позволяет реализовывать произвольные изменения в UID и GID файлов (см. chown (2)). CAP_DAC_OVERRIDE Пропустить проверки прав на чтение, запись и исполнение.. (DAC = «discretionary access control», «управление доступом по усмотрению».) CAP_DAC_READ_SEARCH Пропустить проверку прав на чтение файла и прав на чтение и исполнение для каталогов. CAP_FOWNER Пропустить проверку прав для операций, обычно требующих от файловой системы соответствия UID процесса и UID файла (например, utime (2)), исключая операции, обрабатываемые CAP_DAC_OVERRIDE и CAP_DAC_READ_SEARCH ; игнорировать бит sticky при удалении файлов. CAP_FSETID Не очищать биты set-user-ID и set-group-ID при изменении файла; разрешить установку бита set-group-ID только для файлов, чей GID не соответствует файловой системе или любым дополнительным GID вызывающего процесса. CAP_IPC_LOCK Разрешить блокировку памяти ( mlock (2), mlockall (2), shmctl (2)). CAP_IPC_OWNER Пропустить проверки прав на операции для объектов IPC в System V. CAP_KILL Пропустить проверки прав для отправляемых сигналов (см. kill (2)). CAP_LEASE (новинка в Linux 2.4) Разрешить аренды файлов для случайных файлов (см. fcntl (2)). CAP_LINUX_IMMUTABLE Разрешить установку дополнительных атрибутов EXT2_APPEND_FL и EXT2_IMMUTABLE_FL для файловой системы ext2. CAP_MKNOD (новинка в Linux 2.4) Разрешить создание особых файлов, использующих mknod (2). CAP_NET_ADMIN Разрешить различные сетевые операции (например, установку опций привилегированных сокетов, включение многоадресной рассылки, настройки интерфейсов, изменение таблиц маршрутизации). CAP_NET_BIND_SERVICE Разрешить привязку к зарезервированным портам сокетов доменов интернет (то есть к номерам портов менее 1024). CAP_NET_BROADCAST (не используется) Разрешить широковещательные сокеты, а также прослушивание многоадресных рассылок. CAP_NET_RAW Разрешить использование сокетов RAW и PACKET. CAP_SETGID Разрешить произвольные манипуляции с GID процессов и списком дополнительных GID; разрешить забывание GID при прохождении параметров сокетов через доменные сокеты Unix. CAP_SETPCAP Разрешать или удалять любые возможности в допустимых возможностях вызывающего, установленных в/из любых других процессах. CAP_SETUID Разрешить произвольные манипуляции UID процессов ( setuid (2), etc.); разрешить ложные UID при прохождении параметров сокетов через доменные сокеты Unix. CAP_SYS_ADMIN Разрешить диапазон системных административных операций, включая: quotactl (2), mount (2), swapon (2) , sethostname (2), setdomainname (2), Операции IPC_SET и IPC_RMID на произвольных объектах IPC в System V; разрешить ложные UID при прохождении параметров сокетов. CAP_SYS_BOOT Разрешить вызовы к reboot (2). CAP_SYS_CHROOT Разрешить вызовы к chroot (2). CAP_SYS_MODULE Разрешить загрузку и выгрузку модулей ядра; разрешить изменения в наборе возможностей. CAP_SYS_NICE Разрешить поднятие приоритета процесса ( nice (2), setpriority (2)) и изменение приоритета произвольных процессов; разрешить настройку политик в режиме реального времени для вызывающего процесса и настройку политик и приоритетов для произвольных процессов ( sched_setscheduler (2), sched_setparam (2)). CAP_SYS_PACCT Разрешить вызовы к acct (2). CAP_SYS_PTRACE Разрешить отслеживание произвольных процессов, используя ptrace (2) CAP_SYS_RAWIO Разрешить операции ввода/вывода с портами ( iopl (2) и ioperm (2)). CAP_SYS_RESOURCE Разрешить: использование зарезервированного места на файловых системах ext2; вызовы ioctl (2) управляющие журналированием в ext3; переопределение дисковых квот; увеличение лимитов ресурсов (см. setrlimit (2)); RLIMIT_NPROC переопределение лимитов ресурсов; msg_qbytes ограничить лимит очередей сообщений так, чтобы он был выше ограничений в /proc/sys/kernel/msgmnb (см. msgop (2) и msgctl (2). CAP_SYS_TIME Разрешить коррекцию системных часов ( settimeofday (2), adjtimex (2)); разрешить коррекцию текущего времени (в оборудовании). CAP_SYS_TTY_CONFIG Разрешить вызовы к vhangup (2).

Читайте также:  Disk drill pro для mac os

Возможности процессов

В текущей реализации процессу выдаются все действующие и разрешенные возможности (объекты для операции по ограничению набора возможностей описаны ниже) при исполнении программы set-UID-root, или если процесс с действительным UID равным 0 исполняет новую программу.

Порожденный через fork (2) процесс копирует себе все наборы возможностей своего родителя.

Используя capset (2), процесс может управлять своими наборами возможностей, или, если у него есть возможность CAP_SETPCAP , возможностями других процессов.

Граница набора возможностей

Только процесс init может устанавливать биты в границе набора возможностей; все другие, кроме суперпользователя, могут только очищать биты в этом наборе.

В обычной системе граница набора возможностей всегда маскируется от возможности CAP_SETPCAP . Для снятия этого ограничения измените определение CAP_INIT_EFF_SET в include/linux/capability.h и пересоберите ядро.

Текущая и будущие реализации

Если рассмотреть Linux 2.4.20, то в нем выполняются только первые два требования.

В конечном итоге можно ассоциировать эти три набора возможностей с исполняемым файлом, который в соединении с наборами возможностей процесса будет определять возможности процесса после исполнения exec : Allowed (разрешенные): набор логически умножается (AND) с наследованным набором процесса для определения наследуемых возможностей, разрешенных процессу после исполнения exec. Forced (принужденные): возможности автоматически разрешаются процессу, независимо от наследуемых возможностей процесса. Effective (действующие): эти возможности в новом разрешенном наборе также будут установлены в новый действующий набор. (F(effective) будет состоять либо из всех нулей, либо из единиц.)

В то же время, так как текущие реализации не поддерживают наборы возможностей файлов, то во время исполнения exec: 1. Все три набора возможностей файла считаются очищенными. 2. Если исполняется программа set-UID-root, или если действительный идентификатор пользователя процесса равен 0 (root), то файлу разрешены и принудительно устанавливаются все единицы в наборе (то есть полный набор возможностей). 3. Если исполняется программа set-UID-root, то действующий набор файла определен во все единицы.

Во время исполнения exec, ядро рассчитывает новые возможности процесса, используя следующий алгоритм: где: P обозначает набор возможностей процесса до исполнения P’ обозначает значение набора возможностей после исполнения F обозначает набор возможностей файла cap_bset является значением границы набора возможностей.

Источник

Оцените статью