core.group
Управление локальными группами OS: создание и удаление групп.
core.group приводит набор локальных групп к нужному составу через groupadd / groupdel. Семантика present — present-or-create: существующая группа не реконсилится (gid не сверяется и не правится) и даёт changed=false. Членством модуль не управляет — членов в группу добавляет core.user. Требует root.
Требования
- Rootтребуется
- Сторона
soul-side - Коллекция
soulstack.system - Категория
system
run_as_rootexec_subprocessСостояния
core.group.present — Группа существует (создаётся через groupadd, если её нет).
Группы не было и она создана.
Группа уже существует — gid существующей группы не сверяется.
Параметры
| Параметр | Тип | Обяз. / дефолт | Описание |
|---|---|---|---|
name | string | required | Имя группы. |
gid | int | optional | Явный gid (groupadd -g). Действует только при создании. |
system | bool | optional | Системная группа (groupadd -r), gid из системного диапазона. Только при создании. |
Пример — Системная группа под сервис-аккаунт
- name: Ensure the app system group exists module: core.group.present params: name: appsvc system: trueOutput
| Поле | Тип | Описание |
|---|---|---|
name | string | |
exists | true | |
created | bool |
core.group.absent — Группа удалена.
Группа была и удалена (groupdel).
Группы нет.
Параметры
| Параметр | Тип | Обяз. / дефолт | Описание |
|---|---|---|---|
name | string | required | Имя группы. |
Output
| Поле | Тип | Описание |
|---|---|---|
name | string | |
exists | false |
Заметки
- 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).