Работа с группами
В атомарной системе управление группами пользователей имеет свои особенности. На этой странице описано, как работает механизм групп в ALT Atomic и как добавить пользователя в нужные группы.
Как устроены пользователи и группы в атомарной системе
В классической системе все пользователи и группы хранятся в /etc/passwd и /etc/group. В атомарной системе на базе bootc директория /etc является частично персистентным (сохраняет между обновлениями те файлы, что были изменены), а /usr — иммутабельной (заменяется целиком при обновлении образа).
Это создает проблему: когда в новом образе появляется системный пользователь (например, пакет добавляет пользователя для своего сервиса), он не попадает автоматически в персистентный /etc/passwd.
NSS altfiles
Для решения этой проблемы используется модуль NSS altfiles. Он разделяет хранение на два источника:
/lib/passwdи/lib/group— системные пользователи и группы из образа (иммутабельные, обновляются вместе с образом)/etc/passwdи/etc/group— локальные пользователи и группы (персистентные, создаются на конкретной машине)
При любом запросе пользователя или группы (например, getent group docker) система ищет сначала в /etc, затем в /lib. Таким образом, системные учетные записи всегда актуальны из образа, а локальные пользователи сохраняются между обновлениями.
Настройка altfiles выполняется через /etc/nsswitch.conf:
passwd: files altfiles systemd
shadow: tcb files systemd
group: files [SUCCESS=merge] altfiles [SUCCESS=merge] systemd roleAPM автоматически настраивает altfiles во время сборки любого образа при выполнении условий: атомарная система, присутствует пакет libnss-altfiles
Добавление пользователя в группы
APM предоставляет команду sync-groups, которая добавляет пользователей в указанные группы на основе YAML-конфигов.
Конфигурация
Конфиги читаются из двух директорий:
/usr/share/apm/grpconf.d/— конфиги из образа (добавляются при сборке)/etc/apm/grpconf.d/— пользовательские конфиги (можно добавить на конкретной машине)
Формат конфига (файлы .yaml или .yml):
sync:
groups:
- docker
- libvirt
- audio
- video
users:
- dm
- testuser- groups — список групп, в которые нужно добавить пользователей
- users — список селекторов пользователей (опционально)
Если users не указан, APM автоматически добавит всех пользователей из группы wheel с UID в диапазоне 1000-60000.
Селекторы пользователей
Каждый элемент списка users — селектор одного из трёх типов, в элементе указывается ровно один ключ:
| Селектор | Пример | Кого выбирает |
|---|---|---|
| имя | - dm или - name: dm | пользователя с этим именем |
| точный UID | - uid: 1000 | пользователей с этим UID |
| диапазон UID | - uid_range: {min: 1000, max: 60000} | всех пользователей с UID в диапазоне (границы включительно) |
Строка (- dm) — сокращённая запись для - name: dm, обе формы равнозначны.
У uid_range обе границы можно опускать: по умолчанию min: 1000, max: 60000.
Селекторов может быть сколько угодно, в том числе несколько диапазонов — итоговый список пользователей это объединение всех селекторов без дубликатов:
sync:
groups:
- docker
users:
- alice # по имени
- uid: 1005 # по точному UID
- uid_range: # локальные пользователи
min: 1000
max: 1999
- uid_range:
min: 50000
max: 55000Селекторы выбирают только реально существующих пользователей из /etc/passwd и /lib/passwd — диапазон никого не «создаёт», а несуществующее имя или UID молча пропускается. Если ни один селектор никого не выбрал (например, на первой загрузке, когда пользователь ещё не создан), конфиг пропускается целиком — следующий запуск sync-groups всё догонит.
Типовые сценарии
Раздать группы всем локальным пользователям:
sync:
groups: [docker, audio, video]
users:
- uid_range:
min: 1000
max: 60000Выдать группу wheel только первому пользователю (первому администратору системы):
sync:
groups: [wheel]
users:
- uid: 1000Применение
Синхронизация групп:
apm system image sync-groupsКоманда:
- Читает все
.yaml/.ymlфайлы из/usr/share/apm/grpconf.d/и/etc/apm/grpconf.d/ - Резолвит селекторы
usersкаждого конфига в список существующих пользователей - Добавляет пользователей в группы, исправляя GID если он расходится с образом
- Операция идемпотентна — повторный запуск ничего не сломает
Конфиги применяются последовательно: если группа упомянута в нескольких файлах, она получит объединение пользователей из всех. Ошибка синтаксиса в любом из файлов прерывает синхронизацию целиком.
Автоматический запуск
При загрузке системы sync-groups выполняется автоматически через systemd-сервис sync-users.service. Это гарантирует, что после обновления образа пользователи окажутся в правильных группах.
Добавление пользовательского конфига
Если вам нужно добавить пользователя в группу, которая не покрыта конфигами из образа:
- Создайте файл
/etc/apm/grpconf.d/my-groups.yaml:
sync:
groups:
- docker
- wireshark- Примените изменения:
apm system image sync-groupsКонфиги из /etc/apm/grpconf.d/ переживают обновления образа, поэтому ваши настройки сохранятся.