• Viernes 8 de Noviembre de 2024, 11:42

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - shuras

Páginas: [1]
1
C/C++ / Re: Problema con suid bit, y envoltorios en C++
« en: Sábado 23 de Agosto de 2008, 13:11 »
Muchas gracias m0skit0, con tu ayuda he resuelto el problema.
Usando system(), y añadiendo a los guiones shell la opción -p (#!/bin/bash -p) consigo que funcione. Por si esta misma duda puede ayudar a alguien más, es importante decir que sin la opción "-p" no me funciona.

Un saludo, muchas gracias.

PD: Por si alguien quiere el programa, aunque es muy chorra lo pongo:

Código: Text
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <string>
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. int main(int argc, char** argv)
  9. {
  10.     string comando;
  11.  
  12.     if(argc<2)
  13.         return -1;
  14.  
  15.     for(int i=1;i<argc;i++)
  16.     {
  17.         comando.append(argv[i]);
  18.         if(i+1 != argc)
  19.             comando.append(" ");
  20.     }
  21.  
  22.     system(comando.c_str());
  23. }
  24.  

2
C/C++ / Problema con suid bit, y envoltorios en C++
« en: Sábado 23 de Agosto de 2008, 01:20 »
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:

Código: Text
  1. #include <cstdio>
  2. #include <unistd.h>
  3.  
  4. int main(int argc, char** argv)
  5. {
  6.         if(argc>1)
  7.                 execv(argv[1], argv);
  8.         else
  9.                 return -1;
  10. }
  11.  
  12.  


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 :)

Páginas: [1]