Настройка RBAC-пользователей, sudo-профилей и SSH-ключей на LCM-узлах

Для создания системных пользователей на LCM-узлах, настройки sudo-профилей и размещения публичных SSH-ключей используется скрипт setup-rbac-users.sh. Параметры пользователей задаются в YAML-файле в переменной keystack_sudoers.

Профили применяются однократно. Последующая автоматическая синхронизация пользователей, sudo-профилей и SSH-ключей с исходным YAML-файлом или внешним Git-репозиторием не выполняется.

Примечание

Механизм настройки RBAC-пользователей LCM не связан с параметром enable_rbac_model в lcm-config.yaml. Этот параметр используется для настройки ролевой модели GitLab и NetBox.

Скрипт setup-rbac-users.sh и файл rbac-profiles.yml входят в установочный пакет SberLinux. Автоматическое применение профилей через installer.sh выполняется только для SberLinux и только при наличии файла rbac-profiles.yml в каталоге инсталлятора.

Формат профилей

keystack_sudoers представляет собой словарь, где ключ — имя системного пользователя, а значение содержит параметры:

  • sudo — список правил sudoers;

  • key — список публичных SSH-ключей.

Пример:

keystack_sudoers:
  <имя_пользователя>:
    sudo:
      - "<правило_sudoers>"
    key:
      - "<публичный_SSH_ключ>"

При применении профиля для пользователей, кроме аварийной учётной записи, скрипт:

  • создаёт системного пользователя с домашним каталогом и оболочкой /bin/bash, если пользователь ещё не существует;

  • проверяет правила sudo через visudo и размещает их в /etc/sudoers.d/<имя_пользователя>;

  • размещает публичные SSH-ключи в ~/.ssh/authorized_keys.

Пользователь создаётся независимо от наличия правил sudo. Если для пользователя задано sudo: [], файл в /etc/sudoers.d/ для него не создаётся.

Если список key содержит SSH-ключи, файл authorized_keys перезаписывается указанными значениями. Если список ключей пуст, существующий файл authorized_keys не изменяется.

Предупреждение

Если для пользователя уже настроен SSH-доступ, добавьте в key все публичные SSH-ключи, которые необходимо сохранить. При применении профиля существующий файл authorized_keys будет перезаписан.

Для узлов региона keystack_sudoers применяется отдельным механизмом. Настройка sudo-профилей и SSH-ключей на узлах региона описана в разделе Настройка sudo-профилей и SSH-ключей.

Автоматическое применение профилей

При запуске installer.sh в SberLinux скрипт setup-rbac-users.sh запускается автоматически, если файл rbac-profiles.yml находится в каталоге инсталлятора.

Для подключения к LCM-узлам используются значения из файла lcm-config.yaml:

  • ssh_username — пользователь для SSH-подключения;

  • control_plane — LCM-узлы, на которых применяются профили.

Автоматический запуск использует локальный файл rbac-profiles.yml. Получение профилей из внешнего Git-репозитория через installer.sh не выполняется.

Ручное применение профилей

Профили можно применить вручную из локального YAML-файла или получить из внешнего Git-репозитория.

Для ручного запуска скрипта утилита yq должна быть доступна в PATH на LCM-узле, с которого выполняется настройка.

Из локального файла

Для применения локального файла выполните на первом LCM-узле:

$ ./setup-rbac-users.sh \
    --local ./rbac-profiles.yml \
    --ssh-user <ssh_username> \
    --host <LCM-узел-1>,<LCM-узел-2>,<LCM-узел-3>

Для --ssh-user укажите значение параметра ssh_username из lcm-config.yaml, для --host — узлы из списка control_plane.

Из внешнего Git-репозитория

Для получения профилей из внешнего Git-репозитория выполните:

$ ./setup-rbac-users.sh \
    --repo https://gitlab.example.com/infra/sudo-profiles.git \
    --branch main \
    --file sudoers.yml \
    --ssh-user <ssh_username> \
    --host <LCM-узел-1>,<LCM-узел-2>,<LCM-узел-3>

Параметр --branch задаёт ветку репозитория, параметр --file — YAML-файл с переменной keystack_sudoers. Если параметры не указаны, используются ветка master и файл sudoers.yml.

Пробный запуск

Перед применением профилей выполните пробный запуск с параметром --dry-run:

$ ./setup-rbac-users.sh \
    --local ./rbac-profiles.yml \
    --ssh-user <ssh_username> \
    --host <LCM-узел-1>,<LCM-узел-2>,<LCM-узел-3> \
    --dry-run

В этом режиме скрипт выводит пользователей, количество правил sudo и SSH-ключей, список целевых LCM-узлов и команды, которые будут выполнены, но не вносит изменения на узлах.

Настройка аварийной учётной записи

Аварийная учётная запись настраивается в два этапа, поскольку пароль не передаётся через YAML-файл.

По умолчанию скрипт использует имя аварийной учётной записи emergency. При автоматическом запуске из installer.sh параметр --emergency-user не передаётся, поэтому на первом этапе как аварийная обрабатывается только учётная запись с именем emergency.

При обычном применении профилей скрипт создаёт эту учётную запись без пароля, sudo-профиля и SSH-ключей. Для ручного сценария имя аварийной учётной записи можно задать параметром --emergency-user.

После завершения развёртывания LCM выполните второй этап:

$ ./setup-rbac-users.sh \
    --setup-emergency \
    --emergency-user <имя_аварийной_учётной_записи> \
    --ssh-user <ssh_username> \
    --host <LCM-узел-1>,<LCM-узел-2>,<LCM-узел-3>

Введите пароль аварийной учётной записи и повторите его для подтверждения. Скрипт установит пароль и создаст для пользователя sudo-профиль с правилом ALL=(ALL) ALL.

После применения профилей изменения в локальном YAML-файле или внешнем Git-репозитории автоматически на LCM-узлы не переносятся.