Ce face os.getgroups(), setgroups(), getgrouplist() și initgroups()
Pe lângă grupul principal, un utilizator poate face parte din mai multe grupuri (de exemplu docker, sudo). getgroups() returnează grupurile procesului curent, iar getgrouplist(nume, gid) grupurile unui utilizator oarecare.
setgroups(lista) setează grupurile suplimentare, iar initgroups(nume, gid) le încarcă pe cele ale unui utilizator; ambele cer drepturi de administrator și se folosesc la schimbarea utilizatorului unui proces.
Parametri
| Parametru | Descriere |
|---|---|
utilizator, grup |
Numele utilizatorului și grupul lui principal. |
lista |
Identificatorii grupurilor. |
Ce returnează
Liste de întregi sau None.
Exemple
Exemplul 1: Grupurile utilizatorului
import os, grp, pwd
eu = pwd.getpwuid(os.getuid())
print([grp.getgrgid(g).gr_name for g in os.getgroups()][:4])
print(len(os.getgrouplist(eu.pw_name, eu.pw_gid)) > 0)
try:
os.setgroups([])
except PermissionError as e:
print("setgroups:", e.strerror)
Rezultat posibil (diferă la fiecare rulare)
['ana', 'sudo', 'docker', 'users']
True
setgroups: Operation not permitted
Exemplul 2: initgroups la schimbarea utilizatorului
import os, pwd
u = pwd.getpwnam("www-data")
os.initgroups(u.pw_name, u.pw_gid)
print(os.getgroups())
Rezultat (rulat ca root pe Linux)
[33]
Greșeli frecvente
- Schimbi utilizatorul procesului fără
setgroups([])sauinitgroups: procesul păstrează grupurile suplimentare ale lui root.
Comenzi înrudite
os.getuid(), geteuid(), getgid(), getegid() și getlogin(): Identitatea utilizatorului și a grupului sub care rulează procesul.os.setuid(), seteuid(), setgid(), setegid(), setreuid(), setregid(): Schimbă utilizatorul sub care rulează procesul, de obicei pentru a renunța la drepturile de administrator.