script run php security unix shell

run - ¿Cómo ejecutar PHP exec() como root?



ubuntu run script on startup (8)

Estoy intentando construir un administrador de firewall en PHP, pero cuando ejecuto, <?php exec(''iptables -L''); ?> <?php exec(''iptables -L''); ?> , la matriz de resultados está vacía.

Lo he intentado, <?php echo exec(''whoami''); ?> <?php echo exec(''whoami''); ?> y la respuesta es www-data (el usuario que Apache está usando). ¿Qué puedo hacer para ejecutar la función exec como root? (Preferiblemente sin cambiar el usuario de Apache).


A menos que utilice suphp y lo configure para que se ejecute como root, no podrá ejecutar ningún script PHP en nombre de cualquier otro usuario del sistema, además de quién está ejecutando PHP.

Editar:

Solo una pequeña idea Agregue un proceso de cola de alguna manera y ejecute un proceso cron en el crontab de la raíz.

Por favor tenga mucho cuidado con esto. Cualquier inyección puede literalmente destruir el sistema.


Esto es muy inseguro y una mala idea. Repensa tu diseño. Si realmente quieres hacer esto, utiliza sudo como se recomienda. Una solución alternativa podría ser continuar y ejecutar como root, pero hacerlo dentro de una imagen chroot o vm (ambos se pueden romper, pero aún).

¡O lo mejor de todo, ejecutar como sudo dentro de un chroot!


No lo hagas! Te dejarás completamente abierto a todo tipo de hackers maliciosos.

Echa un vistazo a la documentación de "sudo".

Debería poder configurar todos los comandos que necesita como scripts "sudo". Es mucho mejor escribir scripts específicos con funciones limitadas que exponer el comando privilegiado subyacente.

Como en:

exec (''sudo getIpTables.ksh'')


Puede ejecutar sudo a través de phpseclib, una implementación pura de PHP SSH :

<?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]''); ?>


Puede poner los comandos requeridos en un script / archivo ejecutable aparte (sh, PHP, un ejecutable real, no importa), cambiar su propietario a raíz y aplicarle "setuid".

Esto permitirá que cualquier cosa y cualquier persona ejecute este script como root, por lo que debe asegurarse de que tiene sus propias reglas de seguridad para ver si esto está permitido, y es muy restringido en lo que hace.


Recientemente publiqué un proyecto que permite a PHP obtener e interactuar con un verdadero shell Bash. Consíguelo aquí: https://github.com/merlinthemagic/MTS

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

$shell = /MTS/Factories::getDevices()->getLocalHost()->getShell(''bash'', true); $return1 = $shell->exeCmd(''iptables -L''); //the return will be a string containing the return of the command echo $return1;


Sé que esta es una vieja pregunta

agregar el usuario php se ejecuta en el grupo sudo si aún no está asignado

use sudo -S, para que pueda pasar la contraseña a través de echo

$exec = "echo your_passwd | /usr/bin/sudo -S your command"; exec($exec,$out,$rcode);

si tiene problemas con las rutas, use

"bash -lc ''echo your_passwd | /usr/bin/sudo -S your command''"

así que obtienes un nuevo bash que actúa como un shell de inicio de sesión y tiene las rutas establecidas

revisa las páginas man de sudo


Solo una suposición: ¿es esta una aplicación web PHP que hará esto? Esto no suena muy seguro. La aplicación que necesita root: ¿podría compilarla por separado y luego invocarla desde PHP? Si no, tal vez puedas sudo el proceso para que pueda ejecutarse como root.