Quiero ejecutar un comando como root con shell_exec. Ahora sé que esto es peligroso, pero créanme, deben iniciar sesión con MOD_AUTH y tener los privilegios adecuados para acceder a esta página. Es seguro. ¿Cómo puedo hacer esto?PHP sudo en shell_exec
Respuesta
Se podría utilizar la última versión SVN de phpseclib, a pure PHP SSH implementation, para hacer esto. p.ej.
<?php
include('Net/SSH2.php');
$ssh = new Net_SSH2('www.domain.tld');
$ssh->login('username', 'password');
$ssh->read('[prompt]');
$ssh->write("sudo command\n");
$ssh->read('Password:');
$ssh->write("Password\n");
echo $ssh->read('[prompt]');
?>
Al igual que esta solución :), la usaré. –
Definitivamente no se recomienda. Sin embargo, le conviene examinar la edición del archivo sudoers
y agregar el usuario php se ejecuta como NOPASSWD
para el comando que necesita ejecutar. Esto solo le permitirá sudo
ese comando sin ingresar una contraseña.
Si necesita más comandos, agregue más. Sudoers Configuration Sé que el foro/publicación está basado en Debian pero sudo no es estrictamente Debian y eso debería ayudarte con los valores de configuración de sudo que necesitas para ponerlo.
El problema no es que su página de es o no es segura, el problema es que la administración de una página php la capacidad de ejecutar algún comando sudo lo daría a todos los páginas incluyendo cualquier código inyectado en cualquier página insegura en cualquier sitio en el servidor.
Dicho esto, podría ser mejor para hacer un guión envoltorio que hace precisamente el único trabajo que hay que hacer, a continuación, dar al usuario el acceso HTTP a poco ese comando UNO como sudo
http ALL=(ALL) NOPASSWD:/user/local/bin/your_wrapper_script.sh
+1 para la envoltura. –
¡Me olvidé de mencionar una envoltura que no toma argumentos! Hacer un script de envoltura que no acepte argumentos reduce la superficie de ataque. Algunos programas podrían ser manipulados para hacer cosas malas si se ejecutan con ciertos argumentos. El uso de un contenedor le permite permitir que un programa se inicie de una manera más controlada. – Caleb
Todos los archivos que necesitan acceso a la raíz se encuentran en/var/private-www /, solo están disponibles por acceso raíz. ¿Es posible dejarles usar sudo? Intenté 'http ALL = (ALL) NOPASSWD:/var/private-www /', pero eso no funcionó. –
acabo de Google' d para php sudo shell_exec
y esto surgió como el partido # 1:
http://www.php.net/manual/en/function.shell-exec.php#101440
Ilya en linemedia dot ru 16-dic-2010 04:36
sudo puede ser ejecutado sin pase almacenar en un archivo
system('echo "PASS" | sudo -u root -S COMMAND');
Gracias, pero encontré que no funcionaba? Intenté 'system ('echo' mypass '' | sudo -u root -S mkdir/testdir ');', pero '/ testdir' no existía después de haber ejecutado el script. –
@Kevin: Es posible que tenga que ajustar' COMMAND' entre comillas, o (si estoy en lo cierto con mi conocimiento de * nix) no puede crear una carpeta en '/'. – drudge
no se puede y nunca se debe poder conectar una cadena a un mensaje de contraseña interactiva – mschr
$aux=echo "admin-pass" | your command;
echo $aux;
/******************************* ******* ***** Ejemplo ************* ****************************** */
ejecutar un script Perl nombrado my_perl_script.pl
:
$aux=echo "admin-pass" | sudo -u root -S perl /path-to-the-script/my-perl-script.pl;
echo $aux;
mejor manera de hacerlo:
$descriptorSpec = array(
0 => STDIN,
1 => STDOUT,
2 => STDERR,
);
if (posix_getuid() === 0) {
echo "Root\n";
} else {
echo "No root\n";
$command = 'sudo ' . PHP_BINARY . ' ' . implode(' ', $_SERVER['argv']);
$pipes = [];
$process = proc_open($command, $descriptorSpec, $pipes);
if (is_resource($process)) {
proc_close($process);
}
}
Ejecuta el mismo comando nuevamente, con sudo prefijado.
- 1. Shell_exec php con nohup
- 2. PHP shell_exec() vs exec()
- 3. sudo en php exec()
- 4. C# equivalente a shell_exec
- 5. shell_exec() timeout management & exec()
- 6. Diferencia entre sistema y shell_exec
- 7. PHP shell_exec ¿esperar a que termine la secuencia de comandos?
- 8. shell_exec sin esperar a la salida
- 9. Cómo llamar al script de shell desde php que requiere SUDO?
- 10. shell_exec no se ejecuta en segundo plano, ¿alguna otra solución?
- 11. cómo ejecutar dos comandos en sudo?
- 12. Cómo establecer comando variable de entorno de línea en PHP shell_exec
- 13. ¿Cuáles son las diferencias entre system(), exec() y shell_exec() en PHP?
- 14. Ejecutar comandos sudo en Haskell
- 15. Paramiko y sudo
- 16. ¿Reiniciar nginx sin sudo?
- 17. rvmsudo vs sudo?
- 18. obtener la salida del comando shell_exec como comando ejecuta
- 19. ¿Cómo puedo sudo si en Bash?
- 20. cómo ejecutar comando 'sudo' en las ventanas
- 21. Usando Git sin Sudo en muchas cuentas
- 22. ¿Cómo ejecuto un comando sudo en Emacs?
- 23. ejecutar como sudo en el tejido
- 24. sudo nohup nice <- ¿en qué orden?
- 25. invocación de casquillo y sudo
- 26. ¿Cómo sudo el proceso actual?
- 27. JAVA_HOME no encontrado como Sudo
- 28. preservar el medio ambiente sudo
- 29. sudo instalar pecl error de APC en OS X Lion
- 30. conseguir el estado de salida y la salida de shell_exec()
No importa lo que hagas, nunca es 'seguro' .. – halfdan