Una de programacion

Estoy haciendo un programa que crea varios hijos (fork()) y cada uno de ellos debe ejecutar un comando (execvp()), el problema es que estos comandos son de root.
Si ejecuto el programa desde root no tengo ningun problema, ya que la ejecucion de todos esos hijos se hace en modo root, pero quiero poder ejecutar el programa desde usuario normal y que ellos mismos se pasen a root.

He estado Googleando pero me he encontrado formas infumables de hacerlo (montones de lineas de codigo) y seguro que tiene que haber alguna forma simplisima.

¿Alguna idea?

Gracias.
¿?

Si..... claaaaaro..... y luego pillas ese programa lo ejecutas en otro servidor y consigues root para hacer todos los exec que quieras.

¿No te falla algun concepto?

Salu2.Ferdy
Me parece que no vas a tener más remedio que ejecutar el programa con el bit de suid. Yo al menos no recuerdo ninguna manera de cambiar de usuario en C.

Habra que mirar el código fuente de su.

Coño Ferdy supongo que se referirá a pidiendo la contraseña de root o algo así.
¿Y cambiar de usuario no lo podrías hacer a traves de un simple script para el shell?
Ferdy escribió:¿?

Si..... claaaaaro..... y luego pillas ese programa lo ejecutas en otro servidor y consigues root para hacer todos los exec que quieras.

¿No te falla algun concepto?

Salu2.Ferdy


¿A que biene eso Ferdy?
¿Acaso no se pueden hacer programas que soliciten meter la contraseña del root?
Pues que use sudo... o su... mejor no complicarse. Y si no que use suid

Salu2.Ferdy

---

Si si los hay... a patadas. Mirate la documentación de pam

Salu2.Ferdy
como que fork() y execvp() son comandos de root?¿ si estas programando son llamadas al sistema, y lo que no te dejara hacer en todo caso es un exec de un programa con permisos de root.....
Dagaren escribió:como que fork() y execvp() son comandos de root?¿ si estas programando son llamadas al sistema, y lo que no te dejara hacer en todo caso es un exec de un programa con permisos de root.....


Haber, si pensamos un poco, descubriremos que el execvp y toda su familia se utilizan para que el proceso en cuestion se 'transforme' en un comando. Ahora bien, si digo que no puedo hacer lo que quiero como usuario normal, sera porque esas llamadas al sistema, llamaran a comandos de root ¿no?
A ver, el fork lo unico que hace es crear un proceso nuevo con el codigo igual al suyo, se 'clona' y el exec no es que ejecute ningun comando, simplemente es una llamada al sistema que lo que hace es cambiar el codigo del nuevo proceso creado por el del ejecutable que le pasas. Claro si el usuario que ejecuta el programa no tiene permisos para el ejecutable que le has dicho, pues no te deja. ;)
Dagaren escribió:A ver, el fork lo unico que hace es crear un proceso nuevo con el codigo igual al suyo, se 'clona' y el exec no es que ejecute ningun comando, simplemente es una llamada al sistema que lo que hace es cambiar el codigo del nuevo proceso creado por el del ejecutable que le pasas. Claro si el usuario que ejecuta el programa no tiene permisos para el ejecutable que le has dicho, pues no te deja. ;)


Que siiiiiiiiiiiiiiiii!!!
Todo eso ya lo se, igual me he explicado mal, pero bueno. Lo que busco son soluciones para el tema de los permisos que acabas de mencionar.
Te lo he dicho antes, mira la documentación de PAM... probablemente ahí tengas la solución.

Salu2.Ferdy
10 respuestas