2009-10-15 41 views
6

Quiero crear un grupo de usuarios usando python en el sistema CentOS. Cuando digo 'using python' quiero decir que no quiero hacer algo como os.system y dar el comando de Unix para crear un nuevo grupo. Me gustaría saber si hay algún módulo de Python que se ocupe de esto.Crear un grupo de usuarios en linux usando python

Buscando en la red no reveló mucho sobre lo que quiero, a excepción de grupos de usuarios de Python ... así que tuve que preguntar esto.

Aprendí sobre el módulo grp buscando aquí en SO, pero no pude encontrar nada sobre cómo crear un grupo.

EDIT: No sé si tengo que comenzar una nueva pregunta para esto, pero también me gustaría saber cómo agregar usuarios (existentes) al grupo recién creado.

Cualquier ayuda apreciada. Gracias.

+0

Supongo que voy a ejecutar la ejecución de las herramientas de la línea de comandos ... –

Respuesta

10

no sé de un módulo de Python para hacerlo, pero el/etc/group y/etc/El formato gshadow es bastante estándar, por lo que, si lo desea, puede abrir los archivos, analizar sus contenidos actuales y luego agregar el nuevo grupo si es necesario.

Antes de ir haciendo esto, tenga en cuenta:

  • ¿Qué ocurre si se intenta agregar un grupo que ya existe en el sistema
  • ¿Qué pasa cuando varias instancias de su programa intenta agregar un grupo en al mismo tiempo
  • ¿Qué ocurre con el código cuando se hace un cambio incompatible con el formato de grupo un par de lanzamientos en la línea
  • NIS, LDAP, Kerberos, ...

Si no está dispuesto a tratar este tipo de problemas, simplemente use el módulo de subproceso y ejecute groupadd. Será menos probable que rompa las máquinas de sus clientes.

Otra cosa que podrías hacer que sería menos frágil que escribir la tuya sería envolver el código en groupadd.c (en el paquete de la sombra) en Python y hacerlo de esa manera. Sin embargo, no creo que esto te compre mucho en comparación con solo ejecutarlo, y agregaría más complejidad y fragilidad a tu construcción.

+1

Gracias por una excelente respuesta. El caso de uso para el que escribo el guión no tiene ninguno de los problemas que mencionaste, pero agregar mis entradas a esos 'santos' archivos de Linux ... me hace sentir culpable:) ... creo que tendré que irme. con la solución de subproceso. Gracias de nuevo. –

5

Creo que use use los programas de línea de comandos de su programa, se ha tenido mucho cuidado para asegurarse de que no rompan el archivo de grupos si algo sale mal.

Sin embargo, el formato de archivo es bastante recta hacia adelante para escribir algo por sí mismo si decide ir por ese camino

+0

Debe haber algunas funciones C y bibliotecas detrás de escena ... (bueno obviamente) que los comandos están usando, espero que haya algún tipo de envoltorio de Python a su alrededor ... ?? –

1

No hay llamadas a la biblioteca para crear un grupo. Esto se debe a que realmente no existe la creación de un grupo. Un GID es simplemente un número asignado a un proceso o un archivo. Todos estos números ya existen: no hay nada que deba hacer para comenzar a usar un GID. Con los privilegios apropiados, puede llamar a chown (2) para establecer el GID de un archivo en cualquier número, o setgid (2) para establecer el GID del proceso actual (hay un poco más que eso, con ID efectivos, identificaciones suplementarias, etc.).

Dar un nombre a un GID se realiza mediante una entrada en/etc/group en los sistemas básicos Unix/Linux/POSIX, pero eso es solo una convención a la que se adhieren las herramientas de usuario y de Unix/Linux/POSIX. También existen otros directorios basados ​​en red, como lo menciona Jack Lloyd.

El grupo de páginas man (5) describe el formato del archivo/etc/group, pero no se recomienda que escriba directamente en él. Su distribución tendrá políticas sobre cómo se asignan los GID sin nombre, como reservar ciertos espacios para diferentes propósitos (grupos de sistemas fijos, grupos de sistemas dinámicos, grupos de usuarios, etc.). El rango de estos espacios numéricos difiere en diferentes distribuciones. Estas políticas generalmente se codifican en las herramientas de línea de comandos que usa un administrador de sistema para asignar GID sin nombre.

Esto significa que la mejor manera de agregar un grupo localmente es usar las herramientas de línea de comandos.

+0

"realmente no existe la creación de un grupo" ... definitivamente es algo bueno saber ... Muchas gracias por una gran respuesta ... Creo que voy a ejecutar las herramientas de línea de comandos. –

Cuestiones relacionadas