Il risultato della id -Gn
quando l'utente appartiene a uno o più gruppi in cui diversi nomi di gruppi mappano lo stesso gid
potrebbe non essere lo stesso come la risposta pubblicato. Per esempio, se /etc/groups
è simile a questo:
% ypcat group | grep mygroup
mygroup:*:66485:user1,user2,user3,...
mygroup1:*:66485:user101,user102,user103,...
mygroup2:*:66485:user201,user202,user203,...
...
E se l'utente non è elencato in mygroup
ma in mygroup<n>
, id -Gn
ritorna mygroup
ma la risposta postato ritorna mygroup<n>
.
Sembra che nel mio ambiente, perché i gruppi UNIX possono avere centinaia o migliaia di utenti, questa è una politica di gestione del gruppo comune, anche se non so esattamente quale sia il limite di utenti per gruppo e perché id -Gn
restituisce sempre mygroup
.
Tuttavia, con il codice qui sotto ho ottenuto una partita con id -Gn
:
import pwd, grp
def getgroups(user):
gids = [g.gr_gid for g in grp.getgrall() if user in g.gr_mem]
gid = pwd.getpwnam(user).pw_gid
gids.append(grp.getgrgid(gid).gr_gid)
return [grp.getgrgid(gid).gr_name for gid in gids]
Almeno posso usare dal sottoprocesso importazione check_output mygroups = check_output ([ 'id', '-Gn', utente]). Split() –