sudo en php ejecutivo()

Resuelto pop850 asked hace 54 años • 0 respuestas

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 exec(); no pasa nada. La consola dice

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

Investigué y parece que me falta la contraseña del sudocomando. Probé un par de formas diferentes de solucionar este problema, que incluyen:

  • escribiendo %admin ALL=(ALL) ALLen/etc/sudoers
  • y proc_open()en lugar deexec()

Ninguno de los cuales parece estar funcionando, ¡lo que me vuelve loco!

Básicamente, ¿existe una manera clara de hacer que PHP ejecute un comando de terminal simple?

EDITAR: para aclarar, myscript.scptes un AppleScript simple que cambia la interfaz de usuario en pantalla (para un proyecto más grande). En teoría, simplemente osascript myscript.scptdebería ser suficiente, sin embargo, sudopor alguna razón es necesario invocar alguna respuesta del sistema. Si sudopudiera eliminarse de alguna manera, no creo que tuviera este problema de permisos.

pop850 avatar Jan 01 '70 08:01 pop850
Aceptado

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

%admin ALL=(ALL) NOPASSWD: osascript myscript.scpt

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

Defaults    requiretty
tomit avatar Jul 03 '2010 23:07 tomit

Creo que puedes brindar acceso específico al usuario y al comando con visudoalgo como esto:

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

y con php:

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

suponiendo que nobodyel usuario esté ejecutando Apache.

Ezequiel Hdez. avatar May 10 '2013 17:05 Ezequiel Hdez.

php: se crea la consola bash y ejecuta el primer script, que llama sudo al segundo, 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. miMonte.bash:

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

oc, desea ejecutar el script desde el nivel raíz sin privilegios de raíz, para ello cree y modifique el archivo /etc/sudoers.d/mount:

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

no olvides hacer chmod:

sudo chmod 0440 /etc/sudoers.d/mount
lisu avatar Jun 01 '2012 07:06 lisu

Recientemente publiqué un proyecto que permite a PHP obtener e interactuar con un shell Bash real. Consíguelo aquí: https://github.com/merlinthemagic/MTS El shell tiene un pty (pseudo dispositivo terminal, el mismo que tendrías, por ejemplo, en una sesión ssh), y puedes obtener el shell como root si lo deseas. No estoy seguro de que necesites root para ejecutar tu script, pero si mencionas sudo, es probable.

Después de la descarga, simplemente usará el siguiente código:

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('/path/to/osascript myscript.scpt');
MerlinTheMagic avatar May 18 '2016 10:05 MerlinTheMagic