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!

¿Fue útil?

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 .

scroll top