Непривилегированный режим работы ЕдиногоАгента в Linux

Материал из Документация Ключ-АСТРОМ
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

По умолчанию ЕдиныйАгент устанавливается в непривилегированном режиме, в котором привилегии суперпользователя используются один раз для запуска процесса установки.

Затем ЕдиныйАгент запускается под непривилегированным пользователем, сохраняя при этом полный набор функций.

Системные Требования

Чтобы установить ЕдиныйАгент в непривилегированном режиме, ваша система должна соответствовать следующим требованиям:

  • Файловая система должна поддерживать расширенные атрибуты.
  • В системе должен быть установлен libcap2. Например, установка Red Hat Enterprise Linux 5 по умолчанию не содержит libcap2.
  • Файловая система не должна быть смонтирована как noexec или nosuid.
  • Linux Filesystem Capabilities должны быть включены. Например, в SUSE Linux Enterprise Server 11 Linux Filesystem Capabilities отключены по умолчанию. Дополнительные сведения см. в разделе «Непривилегированный режим и Linux Filesystem Capabilities» ниже.

См. Безопасность ЕдиногоАгента в Linux, чтобы узнать о действиях по отслеживанию, выполняемых ЕдинымАгентом, для которых требуется привилегированный доступ.

Привилегии во время установки

  • При запуске в непривилегированном режиме программе установки ЕдиногоАгента требуются права суперпользователя, чтобы:
  • Установите возможности файлов для двоичных файлов ЕдиногоАгента, расположенных в /opt/{server-name}/oneagent/agent/lib[64]/*.
  • Вызовите сценарий службы oneagent, чтобы запустить oneagentwatchdog.
  • В системах с systemd свяжитесь с демоном systemd через d-bus, чтобы выполнить следующие команды:
    • systemctl <start|stop|enable|disable> oneagent.service
    • systemctl демон-перезагрузка
  • В системах с SysV выполните /sbin/chkconfig, чтобы добавить сценарий службы oneagent в автозапуск или удалить его.
  • Напишите в /proc/sys/kernel/core_pattern.

Привилегии суперпользователя сбрасываются при выполнении скрипта службы Ключ-Астром ЕдиныйАгент:

  • В системах с systemd непривилегированный пользователь включается в определение службы (файл модуля). Таким образом, демон systemd запускает сценарий службы ЕдиныйАгент в непривилегированном режиме.
  • В системах с SysV привилегии сбрасываются в сценарии при запуске процесса ЕдиныйАгент Watchdog.

Linux Filesystem Capabilities

Ключ-Астром ЕдиныйАгент Watchdog создаёт и запускает все остальные процессы под непривилегированным пользователем без прав суперпользователя. Двоичные файлы ЕдиногоАгента используют следующие системные возможности Linux.

Возможности двоичной системы Linux

Binary Linux System Capabilities
oneagentwatchdog cap_sys_resource1- for setting system resource limits when starting OneAgent processes
oneagentos cap_dac_override2 - for filesystem access

cap_chown2 3 - for setting ownership of files replaced in the filesystem (e.g., runc binary)

cap_fowner2 - for setting ownership of files replaced in the filesystem

cap_sys_ptrace - for reading data from /proc pseudo-filesystem and tracing processes

cap_sys_resource3 - for reading processes resource limits

cap_setuid4 - for temporary elevation of privileges to execute certain operations; for details, see Automatic updates and operation

cap_kill3 5 6

cap_setfcap3 5 6

cap_fsetid3 5 6

oneagentnettracer cap_bpf (kernel >=5.8)7

cap_perfmon (kernel >=5.8)7

cap_sys_admin (kernel <5.8)7

cap_dac_override

cap_sys_ptrace

cap_sys_resource

oneagentnetwork cap_net_raw - for opening raw sockets

cap_net_admin8- for reading network interface information

oneagentloganalytics cap_dac_read_search - for access to all logs stored on host

cap_sys_ptrace - for reading data from /proc pseudo-filesystem

oneagentplugin cap_set_gid1- for adding docker to the process supplementary groups list, which allows for the container data to be retrieved
oneagenthelper9 cap_sys_admin - for mount() syscall

cap_dac_override - for inspection and modification of filesystems of the running containers

cap_sys_ptrace - for tracing the Docker daemon

cap_sys_chroot - for chroot() syscall

cap_fowner - for changing ownership and permissions of files within container filesystem

cap_fsetid - for changing ownership and permissions of files within container filesystem

OneAgent Installer executed during auto-update cap_dac_override - for filesystem access

cap_chown - for filesystem access

cap_fowner - for filesystem access

cap_fsetid - for filesystem access

cap_kill - to be able to signal all the running processes, e.g. stopped orphaned OneAgent processes

cap_setfcap - for setting Linux Filesystem capabilities file capabilities on agent binaries during the installation

oneagentosconfig cap_setuid 6- for execution of privileged operations during the installation process
oneagenteventstracer cap_sys_admin - for perf_event_open() syscall

cap_dac_override - for access to /sys/kernel/debug/tracing

oneagentdmidecode cap_dac_override - for filesystem access
oneagentmntconstat cap_dac_read_search - for retrieving disk occupation stats with statvfs64()

cap_sys_chroot - for setns() syscall

cap_sys_admin - for setns() syscall

cap_sys_ptrace - for accessing /proc/1/ns

1 Required only during initialization phase and is unconditionally dropped afterwards.

2 Not used if auto-updates and automatic injection are disabled.

3 Kept in permitted set only and raised to the effective set when needed.

4 Only if ambient capabilities aren't supported.

5 Not used if auto-updates are disabled.

6 Only if ambient capabilities are supported.

7 Only for kernels 5.8 and newer. For older kernel versions, cap_sys_admin is enabled instead.

8 Only on kernels older than 2.6.33.

9 Not started if automatic injection is disabled.

Включение Linux Filesystem Capabilities

Linux Filesystem Capabilities необходимы для установки ЕдиногоАгента в непривилегированном режиме. В SUSE Linux Enterprise Server 11 Linux Filesystem Capabilities отключены по умолчанию. Эти возможности также могут быть отключены в других поддерживаемых дистрибутивах Linux или в результате пользовательской конфигурации. Программа установки ЕдиногоАгента выводит следующее сообщение, если возможности файловой системы Linux отключены:

Warning: Failed to enable non-privileged mode, kernel does not support file capabilities.

Вы также можете проверить параметры загрузки ядра, чтобы увидеть, включены ли Linux Filesystem Capabilities. Выполните следующую команду, чтобы проверить параметры загрузки ядра.

cat /proc/cmdline

Если вы обнаружите, что file_caps=1 в выводе, ваша установка в порядке.

Чтобы включить возможности файловой системы Linux, добавьте file_caps=1 в параметры загрузки ядра. Например, в SUSE Linux Enterprise Server 11 используйте YaST, отредактируйте параметры загрузки ядра, добавьте file_caps=1 и перезагрузите машину.

Привилегии при автоматических обновлениях и работе

Объем привилегий, требуемых ЕдиномуАгенту, зависит от того, поддерживает ли ядро Linux ambient capabilities. Как правило, ядро версии 4.3+ поддерживает Linux ambient capabilities. Однако в случае с Red Hat Enterprise Linux они могут поддерживаться в более старых версиях ядра из-за политики Red Hat по резервному переносу исправлений. Это означает, что Linux ambient capabilities поддерживается версиями ядра, начиная с 3.10.x.

Ядра с поддержкой Linux ambient capabilities (версия 4.3+)

Во время автоматического обновления установщик запускается под непривилегированным пользователем dtuser с установленными надлежащими возможностями окружения. ЕдиныйАгент не требует корневого доступа для выполнения автоматического обновления.

Red Hat Enterprise Linux 7 имеет слишком низкий systemd (v219 вместо необходимого v221), и чтобы иметь возможность запускать автоматические обновления в непривилегированном режиме, мы временно повышаем привилегии для запуска systemctl <start|stop|enable|disable> oneagent.service.

Ядра без внешних возможностей (версии с 2.6.26 по 4.3)

В большинстве случаев ЕдиныйАгент будет работать под непривилегированным dtuser. Когда ядро не предоставляет ambient capabilities, оно автоматически повышает свои привилегии до уровня суперпользователя, используя setuid(0) в следующих случаях:

  • Автоматические обновления ЕдиногоАгента
  • Генерация идентификатора OSI узла на узлах Azure
  • Определение свойств контейнеров Docker
  • Самодиагностика

Если вы не хотите предоставлять ЕдиномуАгенту уровень разрешений суперпользователя, вы можете отключить его, добавив параметр DISABLE_ROOT_FALLBACK=1 в команду установки ЕдиногоАгента. Например:

sudo /bin/sh OneAgent-Linux-1.0.0.sh NON_ROOT_MODE=1 DISABLE_ROOT_FALLBACK=1

В таких случаях вы должны выполнять обновления вручную на отдельных хостах. Мы не рекомендуем использовать параметр DISABLE_ROOT_FALLBACK=1 для ЕдиногоАгента в контейнерах Azure или Docker.

Как узнать, работает ли ЕдиныйАгент в непривилегированном режиме?

Программа установки распечатывает сообщение в конце установки OneAgent. В зависимости от версии ядра и его поддержки внешних возможностей вы увидите одно из следующих сообщений:

Non-privileged mode is enabled

Ядро поддерживает ambient capabilities, нет необходимости использовать доступ суперпользователя для обновлений или операций.

Enabled non-privileged mode, but ambient capabilities are not supported by kernel

Ядро находится в пределах минимальной поддерживаемой версии, но из-за неподдерживаемых ambient capabilities, ЕдиномуАгенту необходимо повышать привилегии в некоторых случаях, см. выше.

Failed to enable non-privileged mode

Ядро не соответствует минимальным требованиям к версии для включения непривилегированного режима.