Настройка sudo-профилей и SSH-ключей¶
При включённой ролевой модели (то есть когда переменная enable_rbac_model имеет значение true — подробнее см. в разделе Включение RBAC) KeyStack автоматически создаёт системных пользователей на всех узлах региона, настраивает правила sudo в /etc/sudoers.d/ и развёртывает SSH-ключи авторизации. Управление этими профилями осуществляется через переменную keystack_sudoers.
Описание переменной keystack_sudoers¶
keystack_sudoers представляет собой словарь, где ключ — имя системного пользователя, а значение содержит два параметра:
sudo— список правил sudoers для пользователя;
key— список публичных SSH-ключей для авторизации.
keystack_sudoers:
<имя_пользователя>:
sudo:
- "<правило_sudoers>"
key:
- "<публичный_SSH_ключ>"
Платформа содержит встроенный набор пользователей. Пользователь admin имеет предустановленные правила sudo:
keystack_sudoers:
admin:
sudo:
- "ALL=(root) !/usr/bin/su, !/usr/bin/bash, !/usr/bin/sudo, !/usr/bin/sh"
- "ALL=(root) !/usr/bin/systemctl stop chronyd, !/usr/bin/systemctl stop fapolicyd"
- "ALL=(root) !/usr/sbin/service stop chronyd, !/usr/sbin/service stop fapolicyd"
- "ALL=(root) !/usr/bin/vi, !/usr/bin/vim, !/usr/bin/nano, !/usr/bin/tee"
- "ALL=(root) /usr/bin/systemctl start *, /usr/bin/systemctl restart *, /usr/bin/systemctl status *"
- "ALL=(root) /usr/bin/dnf update, /usr/bin/dnf upgrade, /usr/bin/dnf install, /usr/bin/dnf remove"
- "ALL=(root) /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod, /usr/sbin/groupadd, /usr/sbin/groupdel"
- "ALL=(root) /usr/bin/journalctl"
- "ALL=(root) /usr/sbin/ifconfig, /usr/sbin/ip link set *, /usr/sbin/ip addr show, /usr/sbin/ip route show"
key: []
Пользователь создаётся на узлах только при наличии хотя бы одного непустого правила в sudo. SSH-ключи разворачиваются только при наличии записей в key. Роль не удаляет существующих системных пользователей — она только создаёт и настраивает тех, кто указан в keystack_sudoers.
Настройка пользовательских sudo-профилей¶
Платформа поддерживает два способа переопределения sudo-профилей: прямое переопределение через файл в репозитории региона и загрузку конфигурации из внешнего Git-репозитория.
Способ 1 — прямое переопределение через globals.d¶
Разместите YAML-файл в каталоге globals.d/ репозитория региона с полным определением keystack_sudoers. Этот способ полностью заменяет значения по умолчанию — содержимое переменной keystack_sudoers перезаписывается содержимым файла. Пользователи, не указанные в новом определении, перестанут управляться ролью, но не будут удалены с узлов.
Для переопределения через globals.d:
Откройте веб-интерфейс GitLab.
Перейдите в репозиторий региона project_k / deployments / <имя региона>.
Создайте в репозитории региона файл с определением переменной
keystack_sudoers, напримерglobals.d/sudoers.yml:keystack_sudoers: admin: sudo: - "ALL=(root) /usr/bin/systemctl start *, /usr/bin/systemctl restart *, /usr/bin/systemctl status *" - "ALL=(root) /usr/bin/journalctl" key: - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... admin@example.com" monitoring: sudo: - "ALL=(root) NOPASSWD: /usr/bin/systemctl status *" key: - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... monitoring@example.com"
Создайте новый пайплайн: .
Запустите пайплайн, нажав кнопку New pipeline.
Дождитесь завершения выполнения задач на шаге setup.
Запустите задачу bootstrap-servers и дождитесь её завершения.
Способ 2 — переопределение через globals_override из внешнего репозитория¶
Определите переменную globals_override для загрузки конфигурации из удалённого Git-репозитория. Этот способ объединяет загруженные значения с существующими через Ansible-фильтр combine, что позволяет добавлять новых пользователей без потери значений по умолчанию. Если пользователь уже существовал, его привилегии будут переопределены в соответствии с указанными в globals_override.
Для переопределения через внешний репозиторий:
Откройте веб-интерфейс GitLab.
Перейдите в репозиторий региона project_k / deployments / <имя региона>.
В файле конфигурации региона (
globals.ymlилиglobals.d/override.yml) укажите переменнуюglobals_override:globals_override: - repo: "https://gitlab.example.com/infra/keystack-overrides.git" reference: "main" files: - "sudoers.yml"
Параметры каждого элемента списка:
repo— URL Git-репозитория (HTTP/HTTPS или SSH);reference— ветка или тег для клонирования;files— файл или список файлов для загрузки из репозитория;auth(необязательный) — учётные данные для HTTP-аутентификации в форматеuser:passwordилиtoken. Значение подставляется в URL перед хостом (https://<auth>@gitlab.example.com/...).
Пример с аутентификацией:
globals_override: - repo: "https://gitlab.example.com/infra/keystack-overrides.git" reference: "v1.0" files: - "sudoers.yml" - "custom_vars.yml" auth: "<user>:<token>"
Файл
sudoers.ymlво внешнем репозитории должен содержать переменнуюkeystack_sudoersс дополнительными пользователями, например:keystack_sudoers: backup_operator: sudo: - "ALL=(root) NOPASSWD: /usr/bin/rsync, /usr/bin/tar" key: - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... backup@example.com"
Создайте новый пайплайн: .
Запустите пайплайн, нажав кнопку New pipeline.
Дождитесь завершения выполнения задач на шаге setup.
Запустите задачу bootstrap-servers и дождитесь её завершения.
В результате объединения пользователь
backup_operatorбудет добавлен к существующим пользователям по умолчанию.
Проверка настройки¶
После развёртывания подключитесь к любому узлу региона и выполните проверки:
Убедитесь, что пользователь создан:
$ id admin uid=998(admin) gid=997(admin) groups=997(admin)
Проверьте правила sudo для пользователя:
$ sudo cat /etc/sudoers.d/admin # Sudo permissions for admin admin ALL=(root) !/usr/bin/su, !/usr/bin/bash, !/usr/bin/sudo, !/usr/bin/sh admin ALL=(root) !/usr/bin/systemctl stop chronyd, !/usr/bin/systemctl stop fapolicyd
Проверьте SSH-ключи (если ключи были добавлены в
key):$ sudo cat /home/admin/.ssh/authorized_keys ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... admin@example.com