2010-08-10 17 views
8

Me gustaría construir un programa que toma un nombre de usuario como parámetro y crea el usuario y su carpeta de inicio (con algunas especificaciones codificadas como carpeta, y las comprobaciones de seguridad como nombre de usuario no pueden ser root o un usuario existente).¿Cómo crear un usuario de Linux usando C/C++?

Mi aplicación necesita crear usuarios para dar acceso a SSH.

El programa se ejecutará usando sudo. He leído que debería escribirse en C o C++ en lugar de en scripts porque los scripts podrían explotarse fácilmente.

  • ¿Me puede dar algunos consejos o buenas prácticas acerca de cómo lograr esto?
  • ¿Debo usar alguna biblioteca Pam? ¿Hay algún ejemplo?
  • ¿Cuáles son los posibles fallas de seguridad?

Sé C/C++ y ejecuto Ubuntu Lucid.

Editar:

El usuario sólo tendrá acceso sudo para ejecutar ese comando específico, no quiero que sea capaz de ejecutar un shell o derivación de algunos programas (por el cambio de entorno PATH, por ejemplo) .

Como resultado, por ejemplo, tendré que anular el RUTA, ¿De qué más debería preocuparme?

+4

¿Por qué un script es más fácil de explotar que un ejecutable? Si tiene acceso de root, tiene acceso de administrador y no es nada que no pueda hacer. Hágalo de la manera más simple y use un script que use los comandos linux normales (y así haya sido completamente probado). –

+0

El usuario solo tendrá acceso sudo para ejecutar ese comando específico, no quiero que pueda ejecutar un shell o omitir algunos programas (cambiando el entorno PATH, por ejemplo). – Weboide

Respuesta

10

Probablemente su mejor opción es invocar useradd; hará las cosas correctas (dados los parámetros apropiados).

Intentar crear uno manualmente llamando a las API apropiadas es posible pero no deseable.

+0

Esto me suena mucho más deseable. Armar un script de Perl y luego llamar a useradd es cómo * I * pensaría para resolver este problema. –

+5

No hay "API apropiadas" en la biblioteca Linux C. –

6

¿Quiere decir adduser o ? Intenta mirar su código fuente.

5

No hay API para esto. Simplemente escriba en /etc/passwd y /etc/group (y posiblemente también las versiones en la sombra) utilizando las llamadas normales al sistema de acceso a archivos.

+0

¿Por qué el voto a favor? –

+6

No olvide que antes de modificar estos valores siempre debe adquirir un bloqueo exclusivo en los archivos (todos los comandos del sistema que modifican estos archivos hacen eso). De lo contrario, existe la posibilidad de corrupción de archivos y entonces estás en muy mal estado. –

+0

Creo que esta es la "única forma" si su/etc/passwd está en blanco y por lo tanto no puede agregar usuarios a grupos usando adduser – rogerdpack

Cuestiones relacionadas