os.getgroups(), setgroups(), getgrouplist() și initgroups() în Python

Utilizatori și permisiuni (os) Python 3.0+ (getgrouplist: 3.3+; Unix)

Grupurile suplimentare din care face parte procesul sau un utilizator.

Sintaxă
os.getgroups()
os.setgroups(lista)
os.getgrouplist(utilizator, grup)
os.initgroups(utilizator, grup)

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([]) sau initgroups: procesul păstrează grupurile suplimentare ale lui root.

Comenzi înrudite