Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: $francisco en Septiembre 01, 2014, 02:05:05 PM

Título: Funcion exec y popen no ejecutan scripts
Publicado por: $francisco en Septiembre 01, 2014, 02:05:05 PM
Que tal a todos, como bien digo, no puedo ejecutar ningún script de python a través de php, normalmente las dudas son si le he dado permisos a los archivos, esto ya esta hecho, o si utilizo sudo, esto también, el shebang de python también esta puesto "#! /usr/bin/env python", y el scripts funciona correctamente porque lo ejecuto a trabes de la consola y funciona.

php:

<?php
function escribir(){
error_reporting(E_ALL);
/* Añade redirección, por lo que podemos obtener stderr. */
$gestor popen('sudo python /var/www/enc/archivo.py''r');
echo "'$gestor'; " gettype($gestor) . "\n";
$leer fread($gestor2096);
echo $leer;
pclose($gestor);
}

escribir();
?>


python:

#! /usr/bin/env python

f = open("probando.txt","w")
f.write("hola")
f.close()


Cuando ejecuto el código php me muestra lo siguiente:

'Resource id #2'; resource

lo he probado casi todo, con exec, shell_exec, pero no me ejecuta de ninguna manera el script.
Título: Re:funcion exec y popen no ejecutan scripts
Publicado por: ANTRAX en Septiembre 01, 2014, 02:27:22 PM
Los archivos tienen permisos?
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: $francisco en Septiembre 01, 2014, 02:40:46 PM
Si todos "chmod 777 /var/www/*", "chmod 777 /var/www/enc/*", pero nada, sigue sin dejarme.
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: $francisco en Septiembre 01, 2014, 03:54:31 PM
Por si sirve de algo me di cuenta que al probar me funciona pero quitando le sudo, pero el problema persiste.

$gestor = popen(' python /var/www/enc/archivo.py', 'r');

le corresponde el archivo:

#! /usr/bin/env python

f = open("probando.txt","w")
f.write("hola")
f.close()


aquí todo funciona bien, pero realmente el script que quiero que funcione no funciona.

$gestor = popen(' sudo python /var/www/enc/power.py', 'r');

#! /usr/bin/env python

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(18,GPIO.OUT)

GPIO.output(18,GPIO.LOW)
time.sleep(3)
GPIO.output(18,GPIO.HIGH)

GPIO.cleanup()


los dos funciona por consola, pero el segundo archivo necesita sudo para funcionar, y parece ser que no puedo hacerlo desde php, ¿alguna manera de solucionarlo?
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: hielasangre en Septiembre 01, 2014, 05:15:26 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Por si sirve de algo me di cuenta que al probar me funciona pero quitando le sudo, pero el problema persiste.

$gestor = popen(' python /var/www/enc/archivo.py', 'r');

le corresponde el archivo:

#! /usr/bin/env python

f = open("probando.txt","w")
f.write("hola")
f.close()


aquí todo funciona bien, pero realmente el script que quiero que funcione no funciona.

$gestor = popen(' sudo python /var/www/enc/power.py', 'r');

#! /usr/bin/env python

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(18,GPIO.OUT)

GPIO.output(18,GPIO.LOW)
time.sleep(3)
GPIO.output(18,GPIO.HIGH)

GPIO.cleanup()


los dos funciona por consola, pero el segundo archivo necesita sudo para funcionar, y parece ser que no puedo hacerlo desde php, ¿alguna manera de solucionarlo?

no es aconsejable darle permisos de  root al usuario de apache, fijate si hacer un binario o algo... contame que intentas hacer a vewr si te puedo ayudar
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: $francisco en Septiembre 02, 2014, 09:59:38 AM
 Lo que estoy intentando es hacer encender una bombilla con un relé térmico desde una raspberry pi con raspbian instalado, instale apache2 y php5, pero para mi sorpresa no podía ejecutar ningún comando con la función exec de php que requiriera permisos de el grupo sudo, bueno... esto no lo tengo muy claro, no se si es que se necesita permisos de administrador, o que estén en el grupo sudo... esto no lo entendí bien pero lo logré solucionar.

El caso que después de tanto leer  y leer y trasnochar, mi cabeza ya casi me estallaba, y casi estaba apunto de dejarlo porque ya no sabia que hacer, y vi en una página que decía que había que añadir un usuario en el grupo sudo entonces hice lo siguiente.

1- Escribí en la función exec:

exec("whoami",$out);
echo ·$out;


Entonces me muestra el usuario que esta utilizando para ejecutar los comando y me muestra:
www-data

Entonces voy a añadirlo a la lista de sudoers:
sudo visudo -f /etc/sudoers

Me voy a la linea:
includedir /etc/sudoers.d

Y  justo debajo escribo:
www-data ALL=(ALL) NOPASSWD: ALL

Pulso control+O y pulso enter y ya esta, php puede utilizar la función exec, popen o cualquier otra y utilizar sudo sin ningún problema.

Gracias de todos modos a todos.
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: kid_goth en Septiembre 02, 2014, 11:35:25 AM
Nice, y aunque se que estas en pruebas NUNCA lo hagas en un servidor de producción :o
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: $francisco en Septiembre 02, 2014, 02:41:56 PM
Si, ahora estoy en prueba, pero ¿podría configurar lo para no todo el mundo pudiera acceder a esta página? algo interesante seria poder crear una red con la raspberry en la salida de tu tarjeta de red, ¿podría conectar la raspberry a un switch y que la raspberry sea el servidor dhcp y crear una red para conectar otros aparatos?
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: mapa_fm en Julio 27, 2015, 01:21:58 PM
Hola buenas, estaría interesado en saber como hacer para ejecutar un script de python a través de una pagina PHP sin dar permisos de sudoer al usuario www-data, parecido a lo que preguntaba el compañero. En mi caso quiero activar un buzzer remotamente para un sistema de videovigilancia con Raspberry Pi. Y siendo videovigilancia no sería muy seguro ese remedio. Gracias un saludo.
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: kid_goth en Julio 27, 2015, 01:47:30 PM
@mapa_fm (https://underc0de.org/foro/index.php?action=profile;u=48864) te montas un CGI hacia el python es lo mejor y llamas directamente al api que ejecutar desde php mmmm me suena a que querrás algo como el exec y mejor que tengas esas funciones deshabilitadas.... Saludos
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: Jimeno en Julio 27, 2015, 02:13:24 PM
Prueba así, te dejo una PoC:

Archivo PHP:
Código (php) [Seleccionar]

<?php
echo 
"Probando...<br>";
$output shell_exec("/usr/bin/python /var/www/html/test.py");
echo($output);

?>



Archivo Python:
Código (python) [Seleccionar]

#!/usr/bin/env python
f = open("probando.txt","r+")
print f.read()
f.close()


Archivo que se lee:
CitarTodas putas

Ejecución:
(http://i.imgur.com/QEqPcQZ.png)
Link: http://i.imgur.com/QEqPcQZ.png
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: mapa_fm en Julio 27, 2015, 04:24:27 PM
Hola, ante todo muchas gracias por responder y muchísimas gracias por tanta brevedad. Estoy intentando procesar tu respuesta, es que soy muy muy noob en estos temas, mira te enseño mi pagina php y mi script de python, es que si no me hago un lío intentando hacer como has hecho tu, a ver si con mis códigos quedaría igual.

página php:
https://scontent-mad1-1.xx.fbcdn.net/hphotos-xft1/v/t1.0-9/11781846_10205344741071239_8309099979255199373_n.jpg?oh=a62edef55d06bdd747c3fd00e6c77fcf&oe=56481A7F

script python:
https://scontent-mad1-1.xx.fbcdn.net/hphotos-xat1/v/t1.0-9/11781606_10205344744271319_2344580044460271564_n.jpg?oh=acd4b0276d7bf5845e9db45f5ed71bf4&oe=5658CC66
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: Jimeno en Julio 27, 2015, 04:31:17 PM
Un problema es que estás llamando a Python con sudo, lo que te pedirá la contraseña, hazlo sin él si es posible o da permisos al usuario para que lo corra sin necesidad de sudo.
Otro problema es que estás llamando a Python directamente, eso podría traerte problemas, hazlo como lo hice yo, es lo que recomiendan en stackoverflow.
Por último creo ver $a- exec, ¿no será $a = exec(loquesea);?

PD: a no ser que encender4 sea una variable que has declarado necesitarás usar $_POST['encender4'] (nota las comillas) para que lo reconozca.
PD2: asegúrate de que ambos archivos tengan permisos suficientes en el directorio en el que están.
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: mapa_fm en Julio 27, 2015, 06:16:12 PM
He estado haciendo una a una las variaciones que me has comentado pero no funciona:

https://scontent-mad1-1.xx.fbcdn.net/hphotos-xaf1/v/t1.0-9/11800169_10205345168521925_2953870105127239639_n.jpg?oh=92884c49b49867113f23cbbc7356fcaf&oe=565CB7C5
https://scontent-mad1-1.xx.fbcdn.net/hphotos-xfp1/v/t1.0-9/18388_10205345170481974_8147685789098473032_n.jpg?oh=9d8489811f27ce34ebec176d1ca374ba&oe=5648D559

y si le quito el guión de a- exec no sale ni la página php, tiene permisos 755 tanto la página php como el script

y la variable encender no sé no esta declarada, en un tutorial salía así directamente.
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: Jimeno en Julio 27, 2015, 06:29:59 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
He estado haciendo una a una las variaciones que me has comentado pero no funciona:

https://scontent-mad1-1.xx.fbcdn.net/hphotos-xaf1/v/t1.0-9/11800169_10205345168521925_2953870105127239639_n.jpg?oh=92884c49b49867113f23cbbc7356fcaf&oe=565CB7C5
https://scontent-mad1-1.xx.fbcdn.net/hphotos-xfp1/v/t1.0-9/18388_10205345170481974_8147685789098473032_n.jpg?oh=9d8489811f27ce34ebec176d1ca374ba&oe=5648D559

y si le quito el guión de a- exec no sale ni la página php, tiene permisos 755 tanto la página php como el script

y la variable encender no sé no esta declarada, en un tutorial salía así directamente.
Y el signo de igual?
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: mapa_fm en Julio 27, 2015, 06:33:32 PM
Nada, tampoco funciona.
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: Jimeno en Julio 27, 2015, 06:35:42 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Nada, tampoco funciona.

Tienes que ir arreglando cada fallo, jajaja.
Lanza php5 archivo.php y pon la salida aquí.
Sustituye archivo.php por el nombre de tu archivo.
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: mapa_fm en Julio 27, 2015, 06:41:31 PM
PHP Notice: Undefined index: encender4 in /var/www/php/alarma.php on line 20
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: Jimeno en Julio 27, 2015, 07:23:23 PM
Pon el código PHP al principio del archivo y programa bien ese PHP, anda.
Además no declares cosas en condicionales, es decir, mejor haz:
Código (php) [Seleccionar]

<?php
    
// Mejor
    
$aux $_POST['encendido4'];
    if (
$aux) {...}

    
// Peor
    
if ($_POST['encendido4']) {...}

?>


Y por favor, revisa errores de sintaxis y esas cosas antes de comentar.
Además dale permisos correctos al archivo .py y al .php

Te dejo otra prueba con tu código:
(http://i.imgur.com/l2bzZ9s.png)

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
PHP Notice: Undefined index: encender4 in /var/www/php/alarma.php on line 20
Título: Re:Funcion exec y popen no ejecutan scripts
Publicado por: mapa_fm en Julio 27, 2015, 08:23:45 PM
Disculpa cualquier error cometido, es que estoy empezando en esto lo siento. Ahora al ejecutar el comando    php5 alarma.php   en consola, no da ningún error y suena el buzzer. Pero estoy teniendo muchos problemas al intentar agregar la funcionalidad del botón, yo creo que tengo el código tal como me decías, pero me sigue saliendo el mismo error:

https://scontent-mad1-1.xx.fbcdn.net/hphotos-xft1/v/t1.0-9/13727_10205345773697054_5003085043448104083_n.jpg?oh=00e93eb612751644b9ab11a3644bffc6&oe=56409D83

Disculpa tanta molestia, en lograr esto ya no te molesto mas. Muchísimas gracias por tu ayuda.