Estoy tratando de ejecutar un script .sh de PHP, sin embargo, no se está ejecutando.
Verifiqué los registros de errores y recibo el error 'sh: Permiso denegado'. Verifiqué bajo qué usuario php se está ejecutando, y se hace bajo el usuario apache.
Intenté cambiar la propiedad del .sh al usuario de apache, pero no hay resultado.
Al principio pensé que esto se debía a que el script estaba fuera de www / dir, sin embargo, incluso cuando puse el script en el mismo directorio, el error todavía se está dando.
¿Hay alguna solución para esto que no sea agregar el usuario apache a la lista SUDOers?
El script sh funciona bien si lo ejecuto desde masilla usando el comando 'php filename.php'.
bash
permissions
script
php
Robin Presto
fuente
fuente
x
) en el archivo? ¿Especificó el intérprete de guiones en una línea shebang?chmod 775 yourscript.sh
. Eso otorgarár-x
(leer y ejecutar) permisos a "Otros" usuarios en ese archivo.Respuestas:
Pruebe las siguientes sugerencias:
php -r "echo exec('whoami');"
r-x
permisos de marca:chmod 755 dir; chmod 755 file
+s
bandera (sudo) al archivo (no recomendado):chmod u+s file
,safe_mode
.include_path
, por ejemplo:php.ini
archivo:include_path ".:/usr/local/lib/php:/your/dir"
.htaccess
archivo:php_value include_path ".:/usr/local/lib/php:/your/dir"
/bin/sh
) para su usuario de Apache (por ejemplo, verifique con:)finger
.php.ini
no utiliza:disable_functions
para laexec
funciónselinux-utils
instalado (un sistema Linux con seguridad mejorada), verifiquegetenforce
/setenforce
configure como se describe en @Tonin answer.Solución de problemas:
php.ini
ohttpd.conf
, no olvide reiniciar el servidor web,php.ini
todo tipo de errores (display_error
,error_reporting
, etc.).fuente
Tal problema puede depender del sistema operativo que use y de cómo esté configurado. Algunas distribuciones de Linux (principalmente aquellas basadas en RHEL como CentOS o Fedora) vienen con SELinux activado por defecto. Esto se puede verificar y cambiar temporalmente con los siguientes comandos:
También puede tener una vista más completa de la configuración actual con:
Este cambio puede hacerse permanente editando el
/etc/selinux/config
archivo y estableciendo laSELINUX
variable enpermissive
odisabled
.Pero, la forma correcta de resolver este tipo de problema , si realmente se encuentra en esta situación, es verificar el
/var/log/audit/audit.log
archivo de registro. Contendrá todos los eventos relacionados con las reglas de SELinux. Entonces, probablemente debería darle a su script el contexto correcto, es decir, estar autorizado para ser ejecutado por el usuario apache / php. La comprobación del contexto de seguridad de SELinux se realiza conls -Z
:Esto enumera el usuario, el rol y el tipo de cada archivo / directorio. Aquí el
httpd_sys_script_exec_t
tipo otorga a los archivos en el directorio cgi el permiso para ser ejecutado por httpd. Su script de shell probablemente debería tener el mismo tipo.También puede alimentar las
audit.log
líneas alaudit2allow
comando. Le dará los cambios necesarios para hacer feliz a SELinux. Pero, por lo general, los cambios sugeridos deben realizarse en la propia política de SELinux, que no es lo que debe hacer en su caso (aún así, este resultado puede dar alguna pista de lo que está sucediendo).La siguiente página describe un problema similar y diferentes formas de resolverlo: http://sheltren.com/stop-disabling-selinux
fuente
Así que llegué aquí después de buscar un problema similar en Google. Pensé dejar caer que el comentario sobre SELinux me señaló en la dirección correcta.
En mi propio caso, estaba usando un script de implementación Git personalizado que usa un comando de shell. El comando funciona bien en BASH pero luego tiene "permiso denegado" y "no es un repositorio" en Git. Esto fue realmente extraño y revisé varias soluciones hasta que me topé con esta respuesta.
root@ls:~# /usr/sbin/setenforce Permissive
Resuelto el problema para mí.fuente
Mi situación es ligeramente diferente, pero Google me trajo aquí, así que pensé en compartir ...
Mi servidor está ejecutando Debian estable e intentando ejecutar un script de shell funcionó una vez, luego los permisos cambiaron automáticamente a 644 y se consiguió el siguiente intento de ejecutar el script
Permission denied
. Resultó ser un problema del servidor de samba para mí y no noté el patrón hasta ahora.El permiso QA Strange cambia al guardar el archivo en una partición Samba desde un editor de Windows . No conocía la
map archive = no
opción incluso después de usar acciones de samba durante una década.Algo sobre el uso de Notepad ++ en un escritorio de Windows cambiaría los permisos de los archivos de destino a 675 en lugar de 775 como está configurado el umask.
fuente
Ejecutar comandos raíz en PHP a través de Apache
Tengo una aplicación web que necesita ejecutar comandos shells como root dentro de una función PHP, y usted pensaría que sería bastante sencillo ... pero me tomó unos pocos google para obtener todos los detalles, así que aquí están mis notas prácticas sobre eso. Esto está en un sistema Linux que ejecuta Apache, y usaremos "sudo" dentro de "shell_exec" para ejecutar los comandos.
Lo principal es editar el archivo / etc / sudoers, y normalmente puede (como root) usar el comando "visudo" para hacerlo.
Asegúrese de que apache pueda ejecutar comandos Y NO requiera una contraseña:
Entonces necesitas comentar esta línea:
Si no lo hace, verá estos errores en / var / log / secure: "lo siento, debe tener un tty para ejecutar sudo". Ahora ya está listo, y el código PHP es simple:
$ resultados = shell_exec ('fecha de sudo');
fuente