2011-07-13 45 views
8

Me gustaría crear un script php para ejecutar un comando de shell y devolver su resultado. El servidor requiere una clave privada. Cuando primero decidí probar esto creé esto:Cómo ejecutar un comando de shell desde un script php

<?php 
$command = "ls"; 
$output = shell_exec($command); 
echo "<pre>$output</pre>"; 
?> 

Eso funcionó bien. Pero cuando cambié $command al comando tenía muchas ganas de correr:

$command = "/etc/init.d/mycontrollerd status /etc/mycontrollerconfig"; 

que me dio este resultado:

You need root privileges to run this script 

Mi conjetura es que necesito utilizar sudo. Por supuesto, eso requerirá poner el archivo pem en algún lugar del servidor. Suponiendo que lo haga, ¿qué debería ser exactamente $command? ¿Debo usar shell_exec(), exec(), system() o alguna otra cosa?

Respuesta

4

No importa qué función php se utiliza para iniciar la secuencia de comandos - lo que falta es la autorización de su cuenta de usuario.

De cualquier uso sudo (preconfigurar el usuario del servidor web para ejecutar el comando exacto sin contraseña a través visudo, y el prefijo del comando con sudo) o la creación de un guión setuid que se ejecuta el comando en sí mismo.

+0

Si bien * también * es importante que la cuenta de usuario esté autorizada, eso no significa que no haya una mejor opción para usar la función PHP. ¿Cuál es el mejor? –

+0

@Kenneth Vogt 'exec', ya que no involucra innecesariamente el shell y devuelve el resultado, o' passthru', que directamente genera el resultado, pero requeriría alguna modificación del código original. – phihag

3

Lo que realmente necesita hacer es configurar su servidor web para que se ejecute como un usuario específico (que no sea "nobody" por ejemplo), o otorgarle permisos a ese usuario para lo que desea ejecutar.

Consulte también: PHP shell_exec() and sudo: must be setuid root

+0

Esto plantea la pregunta: ¿cómo "configura su servidor web para que se ejecute como un usuario específico que no sea 'nadie'"? –

+0

@Kenneth Vogt, cómo debería saber, usted no especificó qué servidor estaba usando. Si está utilizando Apache, verifique las directivas de configuración 'User' y' Group'. (http://httpd.apache.org/docs/1.3/mod/core.html#user) Si no puede hacer que funcione, el lugar apropiado para preguntar es ServerFault.com. – Brad

Cuestiones relacionadas