working shell_exec not from example ejemplos php linux sudo

shell_exec - sudo en php exec()



shell_exec not working (7)

¿Qué hay de ejecutar el script PHP con sudo , y omitirlo en el script? Eso podría encargarse de los permisos para procesos secundarios, también.

No sé cuál es el trato aquí ...

Entonces quiero ejecutar un AppleScript: sudo osascript myscript.scpt

Esto funciona bien en la terminal, pero no cuando lo ejecuto a través de PHP''s exec() ; no pasa nada. La consola dice

no tty present and no askpass program specified ; TTY=unknown ; …

Hice mi investigación, y parece que me falta la contraseña para el comando sudo . Intenté un par de formas diferentes de evitar esto, incluyendo:

  • escribiendo %admin ALL=(ALL) ALL en /etc/sudoers
  • y proc_open() lugar de exec()

¡ninguno de los cuales parece estar funcionando, por lo tanto me está volviendo loco!

Entonces, básicamente, ¿hay una forma clara de que PHP ejecute un comando de terminal simple?

EDITAR: para aclarar, myscript.scpt es un AppleScript simple que cambia la interfaz de usuario en pantalla (para un proyecto más grande). En teoría, simplemente osascript myscript.scpt debería ser suficiente, sin embargo, el sudo es por alguna razón necesaria para invocar alguna respuesta del sistema. Si el sudo pudiera eliminarse de alguna manera, no creo que tenga este problema de permisos.


Creo que puede traer acceso específico al usuario y comando con visudo algo como esto:

nobody ALL = NOPASSWD: /path/to/osascript myscript.scpt

y con php:

@exec("sudo /path/to/osascript myscript.scpt ");

suponiendo que nobody usuario está ejecutando Apache.


Parece que necesitas configurar sudo sin contraseña. Tratar:

%admin ALL=(ALL) NOPASSWD: ALL

También comente la siguiente línea (en / etc / sudoers mediante visudo), si está allí:

Defaults requiretty


Recientemente publiqué un proyecto que permite a PHP obtener e interactuar con un verdadero shell Bash. Obténgalo aquí: https://github.com/merlinthemagic/MTS El intérprete de comandos tiene un pty (dispositivo pseudo terminal, igual que lo que tendría en una sesión ssh), y puede obtener el shell como root si lo desea. No estoy seguro de que necesite root para ejecutar su script, pero dado que menciona sudo es probable.

Después de descargar, simplemente usaría el siguiente código:

$shell = /MTS/Factories::getDevices()->getLocalHost()->getShell(''bash'', true); $return1 = $shell->exeCmd(''/path/to/osascript myscript.scpt'');


Si alguien todavía requiere esto. Puede escribir un archivo de texto sin formato, digamos ~ ./. Sudopass / sudopass.secret , con la contraseña de root allí. Digamos que la contraseña de root es ''12345''. Usted crea ~ ./. Sudopass / sudopass.secret con solo ''12345'' como su contenido:

12345

Y luego haces lo siguiente:

exec(''sudo -u root -S {{ your command }} < ~/.sudopass/sudopass.secret'');

Recuerde usar esto solo en ambientes controlados.


php: se crea la consola bash, y ejecuta la primera secuencia de comandos, que llama sudo a la segunda, ver a continuación:

$dev = $_GET[''device'']; $cmd = ''/bin/bash /home/www/start.bash ''.$dev; echo $cmd; shell_exec($cmd);

  1. /home/www/start.bash

    #!/bin/bash /usr/bin/sudo /home/www/myMount.bash $1

  2. myMount.bash:

    #!/bin/bash function error_exit { echo "Wrong parameter" 1>&2 exit 1 } ..........

o bien, desea ejecutar un script desde el nivel raíz sin privilegios de administrador, para eso crea y modifica el archivo /etc/sudoers.d/mount:

www-data ALL=(ALL:ALL) NOPASSWD:/home/www/myMount.bash

no te olvides de chmod:

sudo chmod 0440 /etc/sudoers.d/mount


Ejecute el comando sudo visudo luego configure -%sudo ALL=(ALL:ALL) en %sudo ALL=(ALL:ALL) NOPASSWD: ALL funcionará.