Saltar al contenido

Script de Python para listar usuarios y grupos

Este grupo de trabajo ha pasado mucho tiempo investigando la resolución a tus búsquedas, te dejamos la respuestas así que nuestro objetivo es resultarte de mucha ayuda.

Solución:

Para *nix, tienes los módulos pwd y grp. Usted itera a través pwd.getpwall() para obtener todos los usuarios. Buscas los nombres de sus grupos con grp.getgrgid(gid).

import pwd, grp
for p in pwd.getpwall():
    print p[0], grp.getgrgid(p[3])[0]

los grp El módulo es tu amigo. Mirar grp.getgrall() para obtener una lista de todos los grupos y sus miembros.

EDITAR ejemplo:

import grp
groups = grp.getgrall()
for group in groups:
    for user in group[3]:
        print user, group[0]

La llamada de Python a grp.getgrall() solo muestra los grupos locales, a diferencia de la llamada a la función getgrouplist c que devuelve a todos los usuarios, por ejemplo, también a los usuarios en sssd que está respaldado por un ldap pero tiene la enumeración desactivada. (como en FreeIPA). Después de buscar la forma más fácil de obtener todos los grupos a los que pertenece un usuario en python, la mejor manera que encontré fue llamar a la función getgrouplist c:

#!/usr/bin/python

import grp, pwd, os
from ctypes import *
from ctypes.util import find_library

libc = cdll.LoadLibrary(find_library('libc'))

getgrouplist = libc.getgrouplist
# 50 groups should be enought?
ngroups = 50
getgrouplist.argtypes = [c_char_p, c_uint, POINTER(c_uint * ngroups), POINTER(c_int)]
getgrouplist.restype = c_int32

grouplist = (c_uint * ngroups)()
ngrouplist = c_int(ngroups)

user = pwd.getpwuid(2540485)

ct = getgrouplist(user.pw_name, user.pw_gid, byref(grouplist), byref(ngrouplist))

# if 50 groups was not enough this will be -1, try again
# luckily the last call put the correct number of groups in ngrouplist
if ct < 0:
    getgrouplist.argtypes = [c_char_p, c_uint, POINTER(c_uint *int(ngrouplist.value)), POINTER(c_int)]
    grouplist = (c_uint * int(ngrouplist.value))()
    ct = getgrouplist(user.pw_name, user.pw_gid, byref(grouplist), byref(ngrouplist))

for i in xrange(0, ct):
    gid = grouplist[i]
    print grp.getgrgid(gid).gr_name

Obtener una lista de todos los usuarios para ejecutar esta función de manera similar requeriría averiguar qué llamada c realiza getent passwd y llámalo en python.

Agradecemos que quieras apoyar nuestra misión fijando un comentario y dejando una valoración te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *