<< Click to Display Table of Contents >> Администрирование (Linux) > Локальная установка системы > Установка системы (Directum Launcher) Запуск контейнеров без привилегий суперпользователя |
![]() ![]() |
В режиме Rootless служба Docker запускается от учетной записи без привилегий суперпользователя (root). При этом по умолчанию службы сервисов Directum RX запускаются внутри docker-контейнеров от имени суперпользователя. Для дополнительной безопасности работы настройте запуск служб от учетной записи без привилегий root:
1.В Directum Launcher во встроенном редакторе YAML в секцию common_config добавьте параметр CONTAINER_BUILD_ARGS и укажите в нем значения для параметров:
•USER_ID – идентификатор пользователя, от имени которого запускаются сервисы внутри контейнеров;
•USER_NAME – имя пользователя, от которого запускаются сервисы внутри контейнеров.
Пример настройки:
CONTAINER_BUILD_ARGS:
USER_ID: '665'
USER_NAME: 'test_user'
Важно. В операционной системе идентификатор пользователя включает число из диапазона, указанного ранее в параметре subuid, и строится по формуле:
<Начало диапазона subuid> + USER_ID - 1
Например, для subuid указан диапазон rxuser:100000:65536, начало диапазона – 100000. Для параметра USER_ID указано значение 665. В результате в операционной системе идентификатор пользователя будет иметь значение 100664. От пользователя с этим идентификатором в операционной системе будут создаваться и читаться файлы.
2.Продублируйте значения параметра CONTAINER_BUILD_ARGS для контейнеров с HAProxy и приложением Centrifugo. Для этого в Directum Launcher во встроенном редакторе YAML добавьте параметр в секции SungeroHaproxy и SungeroCentrifugo.
Примечание. У некоторых контейнеров, например Centrifugo, большой список зарезервированных групп. По этой причине идентификатор, указанный в параметре USER_ID, может конфликтовать с идентификаторами из диапазона значений параметра subgid. В этом случае при изменении настроек в консоли отображается значение non-zero code: 1. Для решения конфликта необходимо сменить идентификатор USER_ID на любой другой незарезервированный. Обычно незанятые идентификаторы имеют значения больше 1000.
3.Если какой-либо сервис нужно запускать под своей уникальной учетной записью, то параметр CONTAINER_BUILD_ARGS добавьте в секцию этого сервиса и задайте имя пользователя и идентификатор.
4.Очистите лог-файлы и статус-файлы, если они уже успели записаться после установки Directum RX.
5.Выдайте другим пользователям (Other) права на запись в папки, созданные при установке Directum RX, а также права на запись в папку /home/<user>/.dotnet. Вместо <user> укажите имя пользователя, от которого запущена служба Docker. Это необходимо, так как запись файлов в эти папки будет выполняться от пользователей с разными идентификаторами.
6.Если используются ГОСТ-сертификаты, то другим пользователям (Other) также выдайте полные права на папку /home/<user>/.local/share/docker/volumes/etc_opt и вложенные файлы. Вместо <user> укажите имя пользователя, от которого запущена служба Docker. Кроме того, если для некоторых сервисов заданы уникальные учетные записи, то необходимо добавить ГОСТ-сертификаты в каждый контейнер с уникальным пользователем. Например, для запуска сервиса хранилищ в контейнере настроена уникальная учетная запись user1, остальные сервисы запускаются от учетной записи user2. В этой ситуации сертификат ГОСТ нужно добавить в контейнер с сервисом хранилищ и в один из контейнеров с сервисом, который запускается от пользователя user2.
7.В Directum Launcher нажмите на кнопку Применить настройки.
Устранение ошибки драйвера хранилища
Ситуация
В режиме Rootless сервисы не запускаются, при этом возникает ошибка:
docker.errors.BuildError: The command '/bin/sh -c if [ $USER_ID = 0 ] ; then echo USER_ID is not provided, root user will be used ; else groupadd -g $USER_ID $USER_NAME && useradd -m -u $USER_ID -g $USER_ID $USER_NAME && chown -R $USER_ID:$USER_ID $APP_DIR ; fi' returned a non-zero code: 1
Причина ошибки: включена система контроля доступа SELinux, и при этом сервис docker в режиме Rootless запускается с драйвером хранилища fuse-overlayfs.
Решение
Отключите SELinux и измените драйвер на overlay2. Синтаксис команд и расположение файлов могут отличаться в зависимости от используемого дистрибутива Linux. В качестве примера рассмотрен порядок настройки в РЕД ОС:
1.Убедитесь, что в операционной системе используется версия ядра не ниже 5.11. Для этого выполните команду:
uname -r
ПРИМЕЧАНИЕ. Здесь и далее команды без sudo выполняйте от пользователя, от имени которого docker запущен в режиме Rootless.
Если версия ядра ниже 5.11, необходимо обновить ее для корректной работы драйвера overlay2. Подробнее см. в документации на используемый дистрибутив Linux.
2.Проверьте, какой драйвер хранилища используется. Для этого выполните команду:
docker info
В параметре Storage Driver отобразится текущий драйвер.
3.Если используется драйвер fuse-overlayfs, то измените его на overlay2. Для этого создайте файл ~/.config/docker/daemon.json и заполните его:
{
"storage-driver": "overlay2"
}
4.От имени пользователя с правами root отключите SELinux:
sudo setenforce 0
5.От имени пользователя с правами root измените конфигурационный файл SELinux:
sudo sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
6.Последовательно выполните команды:
export XDG_RUNTIME_DIR=/run/user/$UID
systemctl --user restart docker
7.Убедитесь, что драйвер изменился на overlay2. Для этого выполните команду:
docker info
В параметре Storage Driver должен отобразиться драйвер overlay2.
© Компания Directum, 2025 |