Página 1 de 3 123 ÚltimoÚltimo
Resultados 1 al 10 de 25

Tema: shell_exec y exec en apache2

  1. #1
    El señor de los forillos Avatar de Benmaster
    Ubicación
    127.0.0.1
    Edad
    35
    Mensajes
    3,593

    Predeterminado shell_exec y exec en apache2

    Bueno, no os voy a contar todo el rollo, basicamnte necesito ejecutar con alguno de estos comandos un comando como root de sistema.

    El problema es que desde una pagina mostrada en el navegador no me funciona el metodo, pero si ejecuto en consola (en linux todo) "php /var/www/WEBS/xxx.php" se ejecuta sin problemas la secuencia del shell_exec o exec...

    Código:
    <?
    $variable = shell_exec("echo 'clavedelroot' | sudo -u root -S cat /etc/sudoers");
    ?>
    o tambien..

    Código:
    $variable = shell_exec('sudo -u root -S mkdir /xxx < /media/sda7/WEBS/clave.txt');
    Como digo si ejecuro desde consola php /var/www/WEBS/xxx.php se ejecuta el comando PERFECTAMENTE, en cambio si abro la web en el navegador me dice que nanay, es mas, se queda como cargando durante 3 segundos (supongo que esperando la respuesta del apache)... esactamente en el var/log/apache2 obtengo esto:

    Código:
    Password:
    Sorry, try again.
    Password:
    sudo: 1 incorrect password attemp

  2. #2
    Master
    Ubicación
    Los madriles
    Mensajes
    2,234

    Predeterminado Re: shell_exec y exec en apache2

    No estoy seguro, pero creo que el problema viene de la configuración de PHP.
    Abre el fichero de configuración, busca la opción safe_mode, ponla en off y vuelve a intentarlo.
    Si resulta ser ese el problema no te olvides de poner las rutas de los directorios en safe_mode_exec_dir para evitar sorpresas.

    Un saludo.


    PD: Sólo por curiosidad, ¿te estás haciendo una especie de webmin?
    Es que veo que intentas crear un directorio y con php puedes hacerlo con mkdir(), así que la única explicación que le veo a hacerlo como tú quieres es que necesites crearlos en lugares concretos en los que sólo root tiene acceso.
    Última edición por Diga33; 07/10/2006 a las 03:35
    These are my enticements, and they are sufficient to conquer all fear of danger or death, and to induce me to commence this laborious voyage with the joy a child feels when he embarks in a little boat, with his holiday mates, on an expedition of discovery up his native river.

  3. #3
    El señor de los forillos Avatar de Benmaster
    Ubicación
    127.0.0.1
    Edad
    35
    Mensajes
    3,593

    Predeterminado Re: shell_exec y exec en apache2

    Eso es, realmente las pruebas las estoy haciando con cat y mkdir para experimento de cosas que solo el root puede hacer aver si esto rula...

    Mi idea es usar SOLO mysql +PHP +SUDO para controlar el PC totalmente como webmin, pero estoy usando la base de mi CMS para que se le puedan añadir themes, y como ya sabes, que todo sea bonito.. el webmin me mata...

    Ademas ya lo dije... si me queda wapo, lo hago publico para todos...

    Voy a probar lo del safe mode y te cuento..

    EDITADO: No es el safe mode, en el php.ini el safe mode = off... ¿alguna idea mas?

    EDITADO: he copiado el php.ini que usa el php de consola (php5-cli) al php del apache2, y sigue sin funcionar.. asique no es un parametro de la configuracion.. o eso creo.. almenos no del php... podria ser del apache... creo que el problema es que desde consola, el php puede obtener los comandos que son devueltos y reaccionar a la salida, pero cuando lo hago desde el php ejecutado en apache no es capaz de continuar.. no se si me explico..

    Si te fijas en el error, el problema es que por algun motivo no es capaz de "cojer" la clave que le estoy mandando.. o coje lo que le da la gana :S

    EDITADO: HE estado haciendo pruebas y pensando un poco en las posibilidades de error, si te fijas el error que obtengo esque se manda una password pero no lo reconoce el sudo...
    Lo que es el apache2 lo he descartado porque si falla desde el navegador, tambien deveria fallar con "php comando" desde consola por el simple echo de que el comando php desde consola, tambien se ejecuta sobre el apache que hay rulando (¿no es asi?), asique me he preguntado que diferencia hay entre ejecutar el fichero php desde consola, o desde el navegador... la respuesta es, que la unica diferencia que hay, es el usuario que esta ejecutando el comando...

    Cuando yo ejecuto desde consola: "php fichero.php" es el usuario que tiene la consola activa quien lo ejecuta, en este caso server, el cual tiene permisos para ejecutar sudo... pero cuando lo ejecuto desde el navegador, es el usuario www-data el que esta intentando ejecutar sudo...

    Me imagino que sudo, al recivir una clave siendo ejecutado como www-data no acepta la clave... entonces supongo que para solucionarlo lo que tego que hacer es, de alguna forma, decirle a sudo que el usuario www-data puede ejecutarlo... ¿pero como? supongo que tengo que agregar www-data al grupo de server, o al grupo admin o algo similar.. o que pasa esque no veo al usuario www-data en la lista de usuarios que tengo en sistema -> administracion -> usuarios y grupos de mi ubuntu...

    ¿Any ideas?
    Última edición por Benmaster; 07/10/2006 a las 21:08

  4. #4
    El señor de los forillos Avatar de Benmaster
    Ubicación
    127.0.0.1
    Edad
    35
    Mensajes
    3,593

    Predeterminado Re: shell_exec y exec en apache2

    Bueno.. ahora me he quedado totalmente OWNED, pillado o como querais decirlo al conseguir reproducir el error que me sale ejecutando el fichero desde el navegador...

    ¿Como? Pues que resulta que en la linea:

    Código:
    shell_exec("echo 'clave' | sudo -u root -S mkdir /ggg");
    la clave NO ES LA DE ROOT, sino la del uuario O_O, no me he dado cuenta porque uso la misma clave para root que para server... me estoy volviendo un poco loco.. vamos a ver... el comando suso ejecuta el comando que quieras como el usuario que pongas, en este caso root, o como usuario root siempre?

    entonces me surjen undas dudillas:

    1º ¿Los usuarios que tengan permiso para usar SUDO pueden ejecutar como root lo que le den la gana con solo saber SU CLAVE y no la de root? pues valla peligro...

    2º Entonces, para que esto funcione, tengo que saber la clave del usuario www-data que es el que ejecuta los coamdnos desde el navegador.. vale... ¿Cual e sla clave del usuario www-data? o como se la puedo cambiar siendo root? porque no la se y el comando passwd solo me vale si me la se...

    3º ¿me merezco un tiro? llevo 1 semana y pico para esto...


    DIOS POR FIN:

    SOLUCION PARA EJECUTAR COMO ROOT COSAS DESDE PHP:

    1º #passwd www-data (y cambiamos la clave del usuario www-data a la que queramos...)
    2º #apt-get install sudo (para instalar sudo en el sistema, emerge sudo para gentoo, etc..)

    3º Ahora tenemos varias opciones:
    - Si estamos en debian/ubuntu tendremos un grupo creado llamado "admin" el cual tiene permiso para usar sudo, si es asi, solamente tenemos que agregar el usuario www-data a este grupo editando /etc/group y añadiendo a la linea del grupo admin el usuario www-data
    - Si no tenemos este grupo, podemos o dar de alta directamente al usuario www-data en /etc/sudoers poniendole que pregunte la clave SIEMPRE y dandole permisos para ejecutar cualquier comando, vamos un "ALL" en la opcion de comandos posibles...

    Basicamente hay que hacer que www-data pueda usar sudo, pero requeriendo que se introduzca la clave.

    SI ahora creamos un fichero PHP y metemos esto:

    Código:
    exec("echo 'apacheclave' | /usr/bin/sudo -u root -S rmdir /xxx", $array, $variable);
    Se crea perfectamente el directorio en /xxx siendo el owner y group asociados el root, vamos que es como si el root lo halla creado.... ¿sabeis la de posivilidades que me da esto... grrrrrr?

    NOTA IMPORTANTE:


    Para que la sesion de sudo no se quede creada, y cualquiera nos la pueda liar, podemos o modificar la configuracion de sudo para que la sesion dure 0, o si no queremos cargarnos esa comodidad en ubuntu porque somos unos bagos de mierda (osea yo..) podemos usar "sudo -K", ejemplo...

    Código:
    exec("echo 'claveapache' | /usr/bin/sudo -u root -S cat /etc/sudoers", $array, $variable); // Ejecutamos el comando..
    exec("sudo -K"); // !IMPORTANTE! Destruimos la sesion
    Aqui la sesion de sudo de www-data esta frita gracias a sudo -K entonces nadie puede ejecutar nada como root a no ser que tenga la clave de sudo...

    Eso si, queria vuestra opinion respecto a una cosa... SEGURIDAD:

    Ahora www-data puede usar sudo, y podrian liarmela parda si me clavan comandos en mi server, subiendome ficheros *.php al sistema, pero como en /etc/sudoers se especifica que se inserte la clave de www-data, entonces nadie podria hacer nada... al no tener esta clave... aqui tengo unas dudas...
    - ¿existe alguna forma de sacar la clave de www-data desde un script en php, cgi, perl o similar? (porque como se pueda.. putada..)
    - ¿el cambiarle a www-data la clave por una esecifica dara problemas con algun mod/plugin/php/programa asociado al apache? (aver si le he cambiado la clave y ahora no funciona algo..)

    Bueno, me voy a poner manos a la obra usando este sistema, para hacer un "webmin", algo mas simple, pero mas estetico xD ¿como veis el tema?

    PD: Se puede decir que tengo algun problema... hasta que no doy con la solucion de algo no paro... dandole vueltas en el curro, en el metro, en el gym, en casa, en la cama... he modificado medio config del servidor, me he visitado a saber la de howto`s y foros... (los de google me van a denunciar por exceso de trafico hacia mi host xDDD), etc... ahora que se como hacerlo toy como mas relajado xD.... estoy resfriado y con fiabre y estoy aki delante con una Shell, ventana de VNC a mi server, 5 carpetas, 12 ventanas del firefox, y el dreamweaver y el notepad abiertos... lo mio es una enfermedad o algo xD
    Última edición por Benmaster; 08/10/2006 a las 02:32

  5. #5
    El señor de los forillos Avatar de Benmaster
    Ubicación
    127.0.0.1
    Edad
    35
    Mensajes
    3,593

    Predeterminado Re: shell_exec y exec en apache2

    Vale.. ya me he cargado algo.. xD

    He reiniciado el server y sorpresa... no se me muestran las paginas en PHP que usan conexion al mysql, en cambio el phpmyadmin si que me funciona...

    ¿sabeis en donde tengo que cambiar la clave o que tengo que hacer para solucionar esto? :P

  6. #6
    El señor de los forillos Avatar de stolz
    Ubicación
    /home/valencia
    Mensajes
    2,743

    Predeterminado Re: shell_exec y exec en apache2

    ¿a que te refieres con que no se muestran? No se ve nada, ¿dan un 404? ¿No se interpreta el código php?

    phpmyadmin también se conecta a MySQL, así es que tiene pinta de ser problema de la página, no del servidor.
    /dev/null

  7. #7
    El señor de los forillos Avatar de Benmaster
    Ubicación
    127.0.0.1
    Edad
    35
    Mensajes
    3,593

    Predeterminado Re: shell_exec y exec en apache2

    Si ejecuto una pagina con SOLO codigo PHP se me muestra.
    El phpmyadmin funciona perfectamente.
    Si ejecuto una pagina con alguna sentencia mysql no se muestra nada (el codigo de la pagina esta bacio)

    Arreglado... he reinstalado apache + php5+ los mods de php y mysql y ya rula... me imagino que entre tanta prueba algun fichero de configuracion me he cargado, la verdad esque tampoco importa mucho el reinstalar eso porque aun no he tenido de configurar el apache debidamente...

    Respecto al tema de seguridad ¿como veis el "sistema" para que este panel funcione? hay que tener en cuenta que rula con solo PHP + Mysql + Apache + sudo, y teoricamente, a no ser que alguien sea administrador (que yo sepa) es imposible que sepa la clave de www-data o que la obtenga... ¿como veis todo? :S
    Última edición por Benmaster; 08/10/2006 a las 21:38

  8. #8

    Predeterminado Re: shell_exec y exec en apache2

    Cita Iniciado por Benmaster
    1º ¿Los usuarios que tengan permiso para usar SUDO pueden ejecutar como root lo que le den la gana con solo saber SU CLAVE y no la de root? pues valla peligro...
    Claro. Por eso en /etc/sudoers sólo debe haber usuarios de confianza. En un sistema basado en 'sudo' no tiene ni por qué haber cuenta de root (ejemplo: Mac OS).
    Visita mi blog sobre Ruby on Rails.

  9. #9

    Predeterminado Re: shell_exec y exec en apache2

    Cita Iniciado por Benmaster
    1º #passwd www-data (y cambiamos la clave del usuario www-data a la que queramos...)
    2º #apt-get install sudo (para instalar sudo en el sistema, emerge sudo para gentoo, etc..)
    Ahí lo que estás haciendo es darle al usuario con que se ejecuta el servidor Apache permisos para hacer sudo. Hasta aquí no hay nada especialmente grave.

    El problema es que tienes que meterle la clave. Pro tanto, en tu código PHP en algún lado tienes que tener algo parecido a
    Basicamente hay que hacer que www-data pueda usar sudo, pero requeriendo que se introduzca la clave.

    Código:
    exec("echo 'apacheclave' | /usr/bin/sudo -u root -S rmdir /xxx", $array, $variable);
    Si por alguna vulnerabilidad de tu aplicación alguien es capaz de mostrar los .php de tu código, te has caído con todo el equipo, porque estarás mostrando en claro la clave del usuario www-data.

    Hay otros peligros, descritos aquí (en inglés)

    http://www.courtesan.com/pipermail/s...il/001501.html
    Visita mi blog sobre Ruby on Rails.

  10. #10
    El señor de los forillos Avatar de Benmaster
    Ubicación
    127.0.0.1
    Edad
    35
    Mensajes
    3,593

    Predeterminado Re: shell_exec y exec en apache2

    La cuestion es que auqnue se muestre el codigo PHP de la pagina (como no sea que el admin no configure bien el modulo del php en el apache) lo que se va a mostrar es un $_SESSION['superclave'] y no la clave del usuario...

    La unica forma de que se muestre el contenido de esa sesion es que se parsee el codigo y porlotanto no se muestre talcual al usuario... Como digo la clave del www-data estara en una SESSION y ni estara en el codigo PHP, ni en ficheros, ni en la SQL...

Página 1 de 3 123 ÚltimoÚltimo

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •