Подробное объяснение команды setcap

Подробное описание команды setcap. В Linux команда setcap чаще всего используется для ограничения использования портов с номерами выше 1024, также известных как привилегированные порты. Это позволяет устанавливать ограничения на порты без использования брандмауэра. В первую очередь, команда setcap разделяет привилегии пользователя root на различные возможности, каждая из которых представляет собой определённую привилегированную операцию.

Что такое команда setcap?

, в LinuxНаиболее распространённый подход — ограничить использование портов выше 1024, также известных как привилегированные порты. Это можно сделать без использования брандмауэра. Основная цель — сегментировать привилегии пользователя root, разделив их на различные возможности, каждая из которых представляет определённую привилегированную операцию.

Ключевая концепция Capabilities заключается в разделении привилегий пользователя root на отдельные возможности, каждая из которых представляет собой определённую привилегированную операцию. Например, возможность CAP_SYS_MODULE представляет собой привилегированную операцию, позволяющую пользователю загружать (или выгружать) модули ядра, а CAP_SETUID — привилегированную операцию, позволяющую пользователю изменять идентификатор пользователя процесса. В рамках Capbilities система контролирует доступ к привилегированным операциям на основе возможностей процесса.
В Capilities полномочия есть только у процессов и исполняемых файлов. У каждого процесса есть три набора полномочий: cap_effective, cap_inheritable и cap_permitted (сокращенно pE, pI и pP соответственно). cap_permitted представляет максимальный набор полномочий, которым обладает процесс; cap_effective представляет текущий доступный набор полномочий процесса, который можно считать подмножеством cap_permitted; а cap_inheitable представляет набор полномочий, который процесс может передать своим дочерним файлам. Система осуществляет управление доступом на основе набора полномочий cap_effective процесса, который является подмножеством cap_permitted. Процесс может отказаться от некоторых своих привилегий, отозвав определенные полномочия в cap_effective. Исполняемые файлы также имеют три набора полномочий, соответствующих трём наборам полномочий процессов, называемых cap_effective, cap_allowed и cap_forced (сокращенно fE, fI, fP соответственно). Среди них cap_allowed указывает набор возможностей, который может быть интегрирован из cap_inheritable исходного процесса при запуске программы, cap_forced указывает набор возможностей, который должен быть доступен при запуске файла для завершения его обслуживания; а cap_effective указывает возможности, которые могут быть использованы при запуске файла.
(1) Механизм реализации возможностей в ядре Linux
В ядре Linux концепция и механизм полномочий появились начиная с версии 2.2, и с каждой версией они постепенно совершенствовались. В Linux права root делятся на следующие 29 полномочий:
CAP_CHOWN: Изменить разрешения владельца файла
CAP_DAC_OVERRIDE: Игнорировать ограничения доступа DAC к файлу
CAP_DAC_READ_SEARCH: игнорировать ограничения доступа DAC для чтения файлов и поиска в каталогах
CAP_FOWNER: игнорировать ограничение, согласно которому идентификатор владельца файла должен совпадать с идентификатором пользователя процесса.
CAP_FSETID: позволяет установить бит setuid файла
CAP_KILL: позволяет отправлять сигналы процессам, которые вам не принадлежат.
CAP_SETGID: позволяет изменить идентификатор группы процесса.
CAP_SETUID: позволяет изменить идентификатор пользователя процесса.
CAP_SETPCAP: позволяет передавать возможности другим процессам и удалять возможности из других процессов.
CAP_LINUX_IMMUTABLE: позволяет изменять флаги атрибутов IMMUTABLE и APPEND файлов.
CAP_NET_BIND_SERVICE: позволяет привязываться к портам менее 1024
CAP_NET_BROADCAST: обеспечивает сетевое вещание и многоадресный доступ
CAP_NET_ADMIN: позволяет выполнять задачи сетевого администрирования.
CAP_NET_RAW: позволяет использовать необработанные сокеты
CAP_IPC_LOCK: позволяет блокировать разделяемые сегменты памяти.
CAP_IPC_OWNER: игнорировать проверку права собственности IPC
CAP_SYS_MODULE: позволяет вставлять и удалять модули ядра.
CAP_SYS_RAWIO: обеспечивает прямой доступ к /devport, /dev/mem, /dev/kmem и необработанным блочным устройствам
CAP_SYS_CHROOT: позволяет использовать системный вызов chroot()
CAP_SYS_PTRACE: позволяет отслеживать любой процесс
CAP_SYS_PACCT: позволяет проводить аудит процессов в стиле BSD
CAP_SYS_ADMIN: Позволяет выполнять задачи системного администрирования, такие как загрузка или выгрузка файловых систем, установка дисковых квот и т. д.
CAP_SYS_BOOT: позволяет перезагрузить систему
CAP_SYS_NICE: Позволяет повышать приоритет процессов и устанавливать приоритет других процессов.
CAP_SYS_RESOURCE: игнорировать ограничения ресурсов
CAP_SYS_TIME: позволяет изменять системные часы
CAP_SYS_TTY_CONFIG: позволяет настраивать устройства TTY
CAP_MKNOD: позволяет использовать системный вызов mknod()
CAP_LEASE: позволяет изменять флаг FL_LEASE блокировки файла.

 

Пример использования:

При установке Wireshark одним из шагов является предоставление разрешения на чтение дампа для сетевой карты, чтобы обычные пользователи также могли использовать Wireshark для захвата пакетов.
# setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/sbin/dumpcap

Используйте SetUID chmod u+s /path/to/application

От имени пользователя root используйте команду setcap, чтобы предоставить разрешения "cap_net_admin,cap_net_raw+ep" исполняемому файлу /bin/ping. После этого обычные пользователи смогут использовать ping.
#setcap 'cap_net_admin,cap_net_raw+ep' /bin/ping

Проверять:
[root@rhel671 ~]# getcap /bin/ping
/bin/ping = cap_net_admin,cap_net_raw+ep

Примечание: setcap обычно используется для двоичных исполняемых файлов. setcap недопустим при использовании для файлов скриптов (например, файлов скриптов, начинающихся с #!/bin/python).

Порты в пределах 1024:
setcap cap_net_bind_service=+eip /home/tengine/nginx/tengine/sbin/nginx

-r — очистить дополнительные разрешения:
setcap -r nginx

Настройте TOMCAT так, чтобы разрешить пользователям без прав ROOT запускать порты ниже 1024.

setcap cap_net_bind_service=+eip /opt/tomcat/bin/startup.sh

счет

Ответить

Ваш адрес электронной почты не будет опубликован. Обязательные поля помечены *