El usuario de Apache www-datanecesita privilegios para ejecutar ciertas aplicaciones usando sudo.
- Ejecutar el comando
sudo visudo. En realidad, queremos editar el archivo en etc/sudoers. Para hacerlo, mediante el uso sudo visudoen la terminal, se duplica el sudoersarchivo (temp) para editar.
- Al final del archivo, agregue el siguiente ejemplo: -si queremos usar el comando para
restartfumar y el phpcomando para otra acción en su pregunta,
www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, usr/bin/php
(Esto supone que desea ejecutar restarty phpcomandos usando privilegios de superusuario (root). Y usa el phpcomando en la usr/bin/ruta)
Sin embargo, si desea ejecutar todas las aplicaciones con privilegios de superusuario, agregue lo siguiente en lugar de lo anterior. Es posible que no desee hacer eso, no para ALLcomandos, muy peligroso.
www-data ALL=NOPASSWD: ALL
3. Después de editar el archivo sudoers ( visudoeditamos el archivo temporal de sudoersmodo que guarde y salga del archivo temporal (visudo) para escribir en el sudoersarchivo. wq!)
4. Eso es todo, ahora use exec()o shell_execde la siguiente manera dentro de su xxx.phpscript. recuerde usar sudoantes de usar el comando en el script php.
ex:-
exec ("sudo /etc/init.d/smokeping restart 2>&1");
o
shell_exec("sudo php -v");
Entonces, en su problema, agregue los comandos que desea utilizar en el step no (2.)mientras agrego y cambie su script php como lo desee.
Aquí está el mismo problema que el suyo /programming//a/22953339/1862107
Intente especificar la ruta completa al binario php. Por ejemplo,
/usr/bin/phpSi no lo sabes, encuéntralo usando:
which phpfuente
/var/log/httpd/error*.En general, usted desea especificar rutas completas para aplicaciones tales como
whoami,ls, yphp. Si no está seguro de cuál es la ubicación de un programa (ruta completa), puede averiguarlo así:Luego, especifíquelo así en su secuencia de comandos.
fuente
echo shell_exec("/usr/bin/php somefile.php 2>&1")?hu. Así que hay que asegurarse de que el guiónphpse intenta ejecutar está establecido así:chmod 755 somescript.php. Esto permitirá que el usuario con el que se ejecuta Apache pueda ejecutar y leer su.phparchivo.¿Tu php.ini restringe el conjunto de comandos disponibles?
Esto es de mi
/etc/php5/php.inifuente
Cómo depurar problemas de shell_exec
OK, aquí tenemos un problema: algo funciona en la terminal y no funciona en shell_exec de php (o exec, spawn, lo que sea). Pensemos: ¿cuál es la diferencia entre You y php? Aquí hay tres:
PHP se ejecuta desde las reglas del servidor HTTP
De hecho, su terminal se ejecuta desde el
yournameusuario y se ejecuta php desdewww-data. Entonces, la primera idea es abrir la terminal delwww-datausuario e intentar el mismo comando. Entonces..../etc/passwdarchivo, busque la línea con elwww-datausuario y cambie su shell de inicio de sesión (último) de/bin/false(o lo que sea) a/bin/bash.www-dataterminal:su www-data/etc/passwdarchivo mientras estás listoPHP se ejecuta desde PHP .
PHP es paranoico enogh y hay muchas opciones en la configuración de apache / nginx y php.ini que pueden romper su intento.
Esto es un poco más complicado de depurar. Aquí hay dos opciones:
Habilite los registros en el navegador y vea el problema. Edite su
php.ini, enciendadisplay_errorsy todos los demás indicadores para ver errores en el navegador. Pueden leerlos y depurarlos.Obtenga
www-datael shell (vea la primera sección) y ejecute algo comoecho '<?php shell_exec("php -v"); ?>' | phpque ejecutará el mismo código php en la consola y podrás ver errores y depurar.
PHP se ejecuta desde SELinux / apparmor
Selinux y apparmor son elementos de seguridad que prohíben a las aplicaciones realizar acciones específicas (por ejemplo, generar otras aplicaciones o algunas otras aplicaciones específicas). Tal vez está habilitado en su servidor.
Para verificar, deshabilite selinux / apparmor y verifique si existe un problema.
Para arreglarlo, lea el manual apropiado y arregle las reglas permisivas para su caso.
fuente
Para mí, la forma más simple era entrar al php.ini y comentar la línea que comienza con
fuente