all Python 3Linux · macOSosfunction
os.setuid
os — user/group IDs
Set the process's real user id (needs privilege). Availability: Unix.
Syntax
os.setuid(...)
For a root process it changes all three UIDs at once, so dropping privileges is irreversible. Order matters: setgroups and setgid first, then setuid — once the UID changes there is no right to change groups any more. A failure raises an exception; ignoring it is a vulnerability, leaving the process root.
Examples
import os
print(os.getuid(), os.geteuid()) # → ? только Unix: реальный и эффективный UID, например 0 0 под root
os.setgid(1000) # → ? только Unix: при сбросе привилегий группу меняют ПЕРВОЙ — после setuid прав на setgid уже не будет
os.setuid(1000) # → ? только Unix: у root меняет разом реальный, эффективный и сохранённый UID на 1000
print(os.getuid(), os.geteuid()) # → ? только Unix: теперь 1000 1000 — типовой сброс привилегий демона завершён
os.setuid(0) # → PermissionError — в отличие от os.seteuid, вернуть root после setuid уже нельзя
See also
Common errors
Open in the full glossarydocs.python.orgReport an inaccuracy