El resultado de id -Gn
cuando el usuario pertenece a uno o más grupos en los que varios nombres de grupos se asignan a la misma gid
podría no ser la misma que la respuesta publicado. Por ejemplo, si /etc/groups
es similar a esto:
% ypcat group | grep mygroup
mygroup:*:66485:user1,user2,user3,...
mygroup1:*:66485:user101,user102,user103,...
mygroup2:*:66485:user201,user202,user203,...
...
Y si el usuario no aparece en mygroup
pero en mygroup<n>
, id -Gn
vuelve mygroup
pero la respuesta vuelve publicado mygroup<n>
.
Parece que en mi entorno, como los grupos UNIX pueden tener cientos o miles de usuarios, esta es una política común de administración de grupo, aunque no sé exactamente cuál es el límite de usuario por grupo y por qué id -Gn
siempre devuelve mygroup
.
Sin embargo, con el código de abajo Tengo un partido 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]
Al menos puedo utilizar de subproceso check_output importación mygroups = check_output ([ 'id', '-gn', el usuario]). Split() –