all Python 3Linux · macOSosfunction
os.initgroups
os — user/group IDs
Initialize the supplemental groups from a username and base GID. Availability: Unix.
Syntax
os.initgroups(...)
It sets supplementary groups as the user would get them at login: initgroups('alice', gid) reads the group database. It is the right step before setgid and setuid when a service switches from root to an ordinary user. It requires root.
Examples
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: менять список групп процесса может только суперпользователь
See also
Common errors
Open in the full glossarydocs.python.orgReport an inaccuracy