Foros del Web » Programando para Internet » PHP »

Habilitar para ejecutar system exec o passthru

Estas en el tema de Habilitar para ejecutar system exec o passthru en el foro de PHP en Foros del Web. Primeramente un saludo a todo el foro Tengo instalado Fedora core 3, apache 2.x y php 4.x necesito ejecutar desde un script php los comandos ...
  #1 (permalink)  
Antiguo 24/11/2005, 07:06
 
Fecha de Ingreso: noviembre-2002
Mensajes: 33
Antigüedad: 21 años, 4 meses
Puntos: 0
Habilitar para ejecutar system exec o passthru

Primeramente un saludo a todo el foro

Tengo instalado Fedora core 3, apache 2.x y php 4.x necesito ejecutar desde
un script php los comandos system exec o passthru un shell, hay que habilitar algun módulo de php? o modificar algo en el php.ini o en el httpd.conf

Probe ya lo siguiente

<?
echo system('ls');
echo exec('ls');
?>

y nada
el shell que quiero ejecutar tambien es
<?
system('/bin/sudo /usr/sbin/insusuarios.sh usuario1 password1');
exec('/bin/sudo /usr/sbin/insusuarios.sh usuario1 password1');
shell_exec('/bin/sudo /usr/sbin/insusuarios.sh usuario1 password1');
passthru('/bin/sudo /usr/sbin/insusuarios.sh usuario1 password1');
?>

en mi archivo sudoers ya agregue al usuario apache

Alguna sugerencia como poder habilitar para ejecutar system exec shell_exec o passthru en php

Saludos,
Ricardo
  #2 (permalink)  
Antiguo 24/11/2005, 07:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Revisa la documentación de las funciones que estás empleando.

Tienes 2 parámetros más opcionales para tomar la salida que te genere la ejecución de esa función si hay problemas (errores en la ejecución) .. así sabras si tienes problemas de permisos o equivalente.

No sé si ya has probado algo como lo que mencionan en:

www.php.net/exec

Cita:
p dot koeman at wittenborg-university dot com
29-Aug-2005 04:22
Using sudo (http://www.sudo.ws/) to exec system commands from PHP

This is a secure way to use sudo from PHP to perform sysadmin tasks from a php webapplication. (can be used with exec or passthru)

- Make a PHP script in the WWW root directory : client.php

[/home/mywebdir/html/client.php]
<?
passthru('echo hello world | sudo /usr/bin/php -f /home/server.php');
?>

- Make a PHP script outside the WWW directory : server.php

[/home/server.php]
<?
echo join('',file('php://stdin'));
?>

Add a line to /etc/sudoers

[in /etc/sudoers]
www ALL=(ALL) NOPASSWD: /usr/bin/php -f /home/server.php

Now execute client.php in the webbrowser (as www user)
- client.php will execute sudo
- sudo will execute server.php by php as root !

In server.php you can do everything you like requiring root privileges. BEWARE ! every php script can now execute server.php, make it secure ! (filter parameters etc.)

I have tested this method and it works !
Kind regards, Pim Koeman
Wittenborg-University, Deventer, the Netherlands
http://www.wittenborg-university.com
Un saludo,
  #3 (permalink)  
Antiguo 24/11/2005, 08:42
 
Fecha de Ingreso: noviembre-2002
Mensajes: 33
Antigüedad: 21 años, 4 meses
Puntos: 0
Ejemplos

Cluster

Primeramente muchas gracias por responder

Te cuento que probe no pasa nada no ejecuta los comandos internos no se si alguien tiene ejemplos de como ejecutar un shell usando system exec shell_exec o passthru

Saludos,
Ricardo
  #4 (permalink)  
Antiguo 24/11/2005, 08:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. has probado a usar el 2° y 3er parámetro de exec() para ver que mensajes obtienes concretamente de la ejecución? (errores)?

Un saludo,
  #5 (permalink)  
Antiguo 24/11/2005, 13:18
 
Fecha de Ingreso: noviembre-2002
Mensajes: 33
Antigüedad: 21 años, 4 meses
Puntos: 0
Cluster,
ejecute los siguientes scripts
el 1ero me sale el mensaje de Usuario creado osea que $resultado es true pero verifico y no adiciono al usuario osea q no ejecuto el comando?

1er script
<?php

$comando = "sudo useradd inra";

$ultima_linea = exec($comando, $lineas, $resultado);

if ($resultado) {
echo "<PRE>\n";
echo "Usuario Creado: $comando $lineas $resultado<BR>\n";
echo "</PRE>\n";

} else {
echo "<H1>Error al ejecutar el comando.</H1>\n";
}
?>

Este script error ejecutando el comando $who osea que $resultado es falso
2do script

<?
$who = "/usr/bin/who";

echo "<PRE>\n";
system($who, $resultado);
echo "</PRE>\n";

if ($resultado) {
echo "<H1>Error ejecutando comando: $who</H1>\n";
}
?>

Cluster o alguien del citio tiene algunos ejemplos o como funciona system o exec para ejecutar comandos externos o hay que cargar algun programa adicional para php???

Saludos,
Ricardo
  #6 (permalink)  
Antiguo 24/11/2005, 13:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Intenta probar los mismos comandos con las mismas funciones (exec()) .. sobre todo para "intentar" obtener algún mensaje de error .. tanto de PHP en la ejecucíón de la función que uses como del sistema de la ejecución del comando a ejecutar.

Así como lo pruebas debería funcionar o arrojarte algún mensaje de error sobre permisos de ejecución ..

Por mi parte no te puedo recomendar nada más, no puedo probar un ejemplo como los que planteas ni lo uso habitualmente.

Un saludo,
  #7 (permalink)  
Antiguo 24/11/2005, 16:10
 
Fecha de Ingreso: agosto-2005
Mensajes: 109
Antigüedad: 18 años, 7 meses
Puntos: 0
Asegúrate de no tener incluidas esas funciones

Código:
; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_functions = system,passthru,exec,popen,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec
... en 'php.ini'

Saludos.
  #8 (permalink)  
Antiguo 25/11/2005, 05:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Shockly
Asegúrate de no tener incluidas esas funciones

Código:
; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_functions = system,passthru,exec,popen,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec
... en 'php.ini'

Saludos.
mm .. En ese caso no debería arrojar un error tipo "function disable"? .. Bueno .. tambien es probable que el reporte de errores "error_display" (php.ini) lo tenga a OFF .. en ese caso no verá mensajes de error de ese tipo.

Un saludo,
  #9 (permalink)  
Antiguo 25/11/2005, 05:31
 
Fecha de Ingreso: agosto-2005
Mensajes: 109
Antigüedad: 18 años, 7 meses
Puntos: 0
Acabo de probar en localhost (Apache/2.0.52 (Win32) PHP/4.3.10) con:

- display_errors = On
- disable_functions = exec

esto:

<?
error_reporting( E_ALL ^ (E_NOTICE | E_WARNING) );
exec('ipconfig/all', $lines);
?>

Y tampoco -obviamente- se obtiene indicación alguna... En cuyo caso, el único indicio es que $lines es NULL, cosa que se averigua:

if( !isset ( $lines ) )
echo "'exec' desactivado";


Un saludo.
  #10 (permalink)  
Antiguo 25/11/2005, 05:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El error_reporting sería:

error_reporting(E_ALL);

(lo que pusistes es la sintax de uso de esa función .. el | indica .. "o usas uno u otro valor" .. ). E_ALL muestra todo posible error.

Por cierto .. recuerda reiniciar tu servidor (por lo menos HTTP si corres PHP bajo este) al hacer cambios en tu php.ini y verifica el cambio efectuado haciendo un phpinfo()

Un saludo,
  #11 (permalink)  
Antiguo 25/11/2005, 06:22
 
Fecha de Ingreso: agosto-2005
Mensajes: 109
Antigüedad: 18 años, 7 meses
Puntos: 0
Cluster, lo que quería decir es que también es posible que no obtenga indicación si aun teniendo display_errors en ON, error_reporting lo tiene limitando... que era un simple ejemplo, vamos. Sé perfectamente cómo funciona la cosa, incluso conozco algún que otro operador lógico

Y si me permites una corrección... creo que se te ha escapado un operador lógico o-exclusivo... con lo que la traducción de "error_reporting( E_ALL ^ (E_NOTICE | E_WARNING) )" sería: Todos los errores excepto los NOTICE y los WARNINGS.

Un saludo.
  #12 (permalink)  
Antiguo 25/11/2005, 09:03
 
Fecha de Ingreso: noviembre-2002
Mensajes: 33
Antigüedad: 21 años, 4 meses
Puntos: 0
Saludos,

Les comento, la desesperación me llevo a instalar red hat 9.0 probe los scripts y corre sin problemas, despues me puse a revisar php.ini de fedora contra la version que viene de php en red hat y ninguna alteración
ahora cuando instalo redhat servidor web solo instala httpx.x y httpd-manual.x.x
Probe
y en fedora tengo http.imap.x httpd.suexec.x httpd.x.x y httpd.manual.x influirá algo suexec? o sera que viene en fedora el httpd chrooteado?
Me gustaría salir de la duda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:26.