Buenas. Mi objetivo es conseguir que una aplicación Web (un script en PHP) que se ejecuta con el usuario w-w-w-data (estamos hablando de Apache2 en Linux) sea capaz de ejecutar un programa, que es un guión shell (bash) , con un usuario predeterminado (en este caso "cuenta").
Para intentar conseguir esto lo que hago es que el script PHP usa la función exec llamando al programa. Bueno en vez de llamar al guión shell directamente, llamo a una envoltura que he hecho en C++. Esto es así, porque como muchos sabreis, en las nuevas versiones del kernel no se permite activar el bit suid en scripts, sólo en programas. Por tanto hice un programa en C++ que basicamente se encargaba de ejecutar un exec con los parametros de entrada para ejecutar el script shell o lo que le pases.
Dicho envoltorio tiene además activado el bit s y pertenece al usuario "cuenta" y al grupo "cuenta".
A continuación pongo el código del programa:
#include <cstdio>
#include <unistd.h>
int main(int argc, char** argv)
{
if(argc>1)
execv(argv[1], argv);
else
return -1;
}
Bueno, en resumidas cuentas, no consigo mi objetivo. Ejecuto la envoltura como el usuario w-w-w-data y dentro del script hago un whoami y dice que sigue siendo w-w-w-data. He probado también a poner como cabecera de los guiones shell "#!/bin/bash -p" (la opción -p) pero tampoco ha dado resultado.
Yo creo que en teoría debería funcionar. ¿Alguien sabe que está pasando? ¿Alguna idea?
Gracias.
PD: el foro no me deja poner tres w seguidas, se queja de que no tengo privilegios para poner enlaces