C ++ usuario add Linux
-
28-09-2019 - |
Pregunta
¿Cuál es la mejor manera de añadir un usuario / grupo en Linux usando C ++ es una biblioteca no me puedo acudir a? No quiero empezar a hacer cosas como:
fopen("/etc/passwd", "a");
fprintf(tmp, "%s:x:%d:1:%s:/%s/%s:/bin/ksh\n", username, usernumber, commentfield, userdir, username);
fclose(tmp);
fopen("/etc/shadow", "a");
fprintf(stmp, "%s:*LK*:::::::\n", username);
fclose(stmp);
Gracias!
Solución
Me he dado cuenta de que la mayoría de los servicios públicos más importantes que se suman a los usuarios cambiar y lo hacen directamente, a menudo de maneras diferentes. Las funciones que se pueden utilizar para modificar el passwd y archivos shadow están expuestos en <pwd.h>
y en <sys/types.h>
, y Son parte de glibc .
fgetpwent , getpwnam , getpw , getpwent_r , putpwent , setpwent
Podemos ver cómo busybox (a través de TinyLogin ) lo hace, como un ejemplo. En busybox/loginutils/adduser.c
, le pusieron un usuario en el archivo passwd mediante la construcción de la estructura passwd y putpwent
entonces llamada. Para añadir la contraseña del usuario en el archivo de sombra, simplemente llaman y escriben fprintf
la cadena directamente.
Para autenticar a los usuarios la forma moderna, hay Linux-PAM . Pero por lo que la adición de usuarios, se puede ver en pam_unix_passwd.c que llaman unix_update_db () , que llama a varias funciones en el libpwdb , lo que habría que añadir una dependencia a su proyecto si lo usa.
Una vez dicho esto, yo soy culpable de haber escrito un par de utilidades para analizar las bases de datos passwd y sombra y modificar directamente. Funcionó bien, pero esto fue en un sistema integrado en el que podía controlar bien todo. No tienen que preocuparse por cosas como las condiciones de carrera con otros programas que modifican la base de datos passwd.
Si es necesario agregar un grupo, lo mismo que la base de datos de grupo .
Otros consejos
Es posible que intente utilizar el href="https://fedorahosted.org/libuser/" rel="nofollow noreferrer"> biblioteca .
Una de las aplicaciones que se distribuyen con libuser es luseradd
, un programa que parece ser una utilidad useradd
multiplataforma. En su esencia, luseradd
utiliza la función de lu_user_add
libuser para crear físicamente el usuario.
Vea la carpeta docs/html
en la distribución fuente de documentación.
Adición de un usuario es un poco demasiado de alto nivel para que haya una llamada al sistema para ello. Por lo que yo sé, no hay ninguna bibliotecas ampliamente utilizadas para esta tampoco. Su mejor opción probablemente será utilizar la llamada system
para invocar el programa useradd
con las opciones apropiadas.