Tengo una duda sobre PHP. Tengo que ejecutar desde PHP (con Apache2) un script de Perl. Entonces uso system(“path/file.pl”) Pero no se ejecuta. Sera un error de permisos? puede estar mi script en cualquier carpeta del sistema y pertenecer a root? Help me!

Diego R. Mañas

*****************

Hola Diego !!!. Bueno, aqui hay varias cosas que hay que tener en cuenta, asi que vayamos paso a paso. Aunque este de acuerdo o no con tu solucion, nos enfocaremos en resolver especificamente tu problema inmediato. Revisaremos primero una serie de cosas basicas y luego iremos profundizando hasta encontrar la solucion. Tal vez puedas ser un poco mas especifico sobre en que lugar se encuentra el archivo y que permisos tiene, pero igual voy a tratar de darte unos consejos generales:

**1) ** ¿ que pasa si intentas ejecutar file.pl como usuario normal desde el prompt?

¿Se ejecuta normalmente? Si no se ejecuta, lo mas probable es que te hayas olvidado de marcar el script como ejecutable. Eso se hace con la siguiente sentencia:

chmod ug+x path/file.pl

La cual le da permiso de ejecucion al dueño y al grupo.

2) Cuando Apache ejecuta scripts, no lo hace como usuario root (o no debería por problemas de seguridad) Por ejemplo, un script en PHP no deberia poder ejecutar un comando como el siguiente: system(“/sbin/halt”) $ /sbin/halt halt: must be superuser.

Cuando el proceso de Apache corre, generalmente lo hace como usuario www-data (al menos en Debian). Entonces, lo que debes verificar es que el usuario www-data tenga permiso de ejecucion sobre ese archivo.

Eso lo puedes lograr cambiando el owner del archivo:

chown www-data:www-data  path/file.pl

Si necesitas cambiar todos los archivos del path directamente ejecutas

chwon -R www-data:www-data path

Lo que hace que el dueño y el grupo del archivo sean www-data. Al ser www-data el dueño del archivo, deberia poder ejecutarlo si es que el archivo tiene permiso de ejecucion. Un listado del archivo deberia mostrarlo asi:

-rwxr-xr-x  1 www-data www-data

Tambien debes tener en cuenta que el usuario www-data debe tener acceso a toda la cadena del directorio. Tanto al directorio actual como a todos los padres. Por ejemplo de nada te sirve tener los permisos correctos si el archivo se encuentra en un path donde el padre de ese path no puede ser accedido por www-data. toda la cadena del path debe ser accesible.

**3) ** Puede ser que ahora los permisos esten correctos, pero entonces el script path/file.pl este intentando ejecutar otros comandos que a su vez requieran permisos de root. Bueno, en este caso la solucion no es tan sencilla porque hay que analizar concienzudamente las posibles implicaciones de seguridad.

4) ** Tambien puedes revisar el archivo **/var/log/apache2/error.log En busca del posible problema, o de por lo menos una idea.

Bueno espero que estos consejos te den una idea de por donde empezar a revisar y espero que cuando encuentres la solucion por favor como agradecimiento la escribas aqui.

Tambien, para ayudarme a resolver tu problema podrias escribir los resultados de las pruebas que te puse mas arriba, y ser un poco mas especifico asi tal vez pueda intentar reproducir el problema en mi computadora.

Bueno, eso es todo por ahora. Si se me ocurre otra cosa te aviso.

Sebastián Emilio Narváez — Los amigos de GNU/Linux son mis amigos …

########################################################## El script que quiero ejecutar tiene permisos de ejecución, pero estaba en un directorio del root y su dueño era root. Cambié el dueño a daemon:daemon, que parece ser el mismo del Apache2 en este Slackware. Y lo cambié de directorio, ahora está debajo de apache2/htdocs/ Ahora puedo ejecutar el script desde una página web, pero la página se detiene hasta que el script finaliza su ejecución y devuelve un resultado. Aproveché eso para que muestre una respuesta atractiva en la página, pero mi intención original era sólo que se ejecute y pasar a otra cosa. Incluso puse **</p>

system(path/file.pl &)

</strong>pensando que pasaría a 2do plano pero no sucedió así.

Gracias por la ayuda :)

Diego R. Mañas