Перейти к содержимому

core.group

← Каталог модулей

soul-sidesoulstack.systemsystemroot требуется

Управление локальными группами OS: создание и удаление групп.

core.group приводит набор локальных групп к нужному составу через groupadd / groupdel. Семантика present — present-or-create: существующая группа не реконсилится (gid не сверяется и не правится) и даёт changed=false. Членством модуль не управляет — членов в группу добавляет core.user. Требует root.

Требования

  • Rootтребуется
  • Сторонаsoul-side
  • Коллекцияsoulstack.system
  • Категорияsystem
Capabilitiesrun_as_rootexec_subprocess

Состояния

core.group.present — Группа существует (создаётся через groupadd, если её нет).

Меняется, когда

Группы не было и она создана.

Не меняется, когда

Группа уже существует — gid существующей группы не сверяется.

Параметры

ПараметрТипОбяз. / дефолтОписание
namestringrequiredИмя группы.
gidintoptionalЯвный gid (groupadd -g). Действует только при создании.
systembooloptionalСистемная группа (groupadd -r), gid из системного диапазона. Только при создании.

Пример — Системная группа под сервис-аккаунт

- name: Ensure the app system group exists
module: core.group.present
params:
name: appsvc
system: true

Output

ПолеТипОписание
namestring
existstrue
createdbool

Заметки

  • present — present-or-create: у уже существующей группы gid не сверяется и не правится (модуль доверяет первому создателю). Если группа с тем же именем уже есть с «чужим» gid, повторный present её не выровняет; changed=true только когда группы не было и она создана.
  • Членством модуль не управляет: core.group только создаёт/удаляет группу, а членов в неё добавляет core.user через -G / -g. groupdel не чистит активные членства в /etc/passwd — это поведение самого groupdel.
  • gid уходит в groupadd -g буквально, без проверки диапазона; system: true берёт gid из системного диапазона и совместим с явным gid (можно задать оба). Проверка существования — in-process (user.LookupGroup), без подпроцесса.

Безопасность и умолчания

  • Главный риск — воссоздание привилегированной группы. name не валидируется на смысл: core.group.present с name: sudo / wheel / docker создаст привилегированную группу, если её нет (например на свежей VM), и последующий core.user с этой группой даст носителю фактический путь к root. Риск не в самом groupadd, а в том, что группа становится готовым «носителем привилегии» для последующего членства.
  • Имя группы из input.* / register.* / soulprint.* должно быть доверенным (автор Destiny/scenario), а не внешним вводом. Для сервис-аккаунта фиксируйте явную непривилегированную system-группу.
  • gid не валидируется и у существующей группы не реконсилится: если имя занято группой с «чужим» gid, повторный present не выровняет его — модуль доверяет первому создателю. Удаление — через absent (groupdel).
  • required_capabilities [run_as_root, exec_subprocess] — декларация для статической сверки soul-lint с allowed_capabilities хоста, а не runtime-повышение прав: groupadd/groupdel исполняются с привилегиями процесса soul-агента (под root).

См. также