все Python 3Linux · macOSosфункция
os.initgroups
os — идентификаторы пользователя/группы
Инициализирует дополнительные группы процесса по имени пользователя и базовому GID. Доступно на Unix.
Синтаксис
os.initgroups(...)
Задаёт дополнительные группы так, как их получил бы пользователь при входе: initgroups('alice', gid) читает базу групп. Это правильный шаг перед setgid и setuid, когда сервис переходит от root к обычному пользователю. Требует прав root.
Примеры
import os
import pwd
os.initgroups('www-data', 33) # → ? только Unix: None; процесс получает все дополнительные группы пользователя www-data плюс группу с GID 33
print(os.getgroups()) # → ? список GID процесса после вызова, например [33, 4, 27]
entry = pwd.getpwnam('www-data')
os.initgroups(entry.pw_name, entry.pw_gid) # → None: базовый GID берут из записи пользователя, а не подставляют числом вручную
os.setuid(entry.pw_uid) # → None: штатный порядок сброса привилегий демона — initgroups(), затем setgid(), и только в конце setuid(); после него вернуть права root уже нельзя
os.initgroups('www-data', 33) # → PermissionError, если скрипт запущен не от root: менять список групп процесса может только суперпользователь
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности