Buenas noches, tengo un problema común al parecer con symfony. Lo he instalado en Centos 7, con Apache y PHP 5.4, pero no puedo hacer que ande la apliación por los dichosos permisos de app/cache
y app/logs
.
He probado todo lo que encontré, pero no funciona ninguno; sigue saliendo el error que no se puede escribir en app/cache
o var/cache
y app/logs
o var/logs
. La carpeta tiene permisos 777
, aplique todo el código que recomienda el manual, también el umask(0000)
pero no consigo superar este problema.
El usuario con el que trabajo la consola es root
y con la que instale Symfony también es root
. Cambié de propietario las carpetas app/cache
y app/logs
a apache:apache
con permisos 777
, pero nada. ¿Es algún caso especial de la version de Symfony instalada, que es 2.6?
RuntimeException in /var/www/html/symfony/app/bootstrap.php.cache line 2602:
Respuestas
Después de dos días de sufrimiento, encontré la solución en el foro en ingles. No entendí muy bien pero apliqué estas líneas de comando en la consola y ya tengo en funcionamiento el Symfony. Así que sigo leyendo el libro.
Esto es lo que apliqué:
setsebool httpd_enable_homedirs true setsebool httpd_read_user_content true setsebool allow_httpd_anon_write true chcon -t public_content_rw_t app/cache chcon -t public_content_rw_t app/logs sudo rm -rf app/cache/* sudo rm -rf app/logs/* sudo setfacl -R -m u:apache:rwx -m u:`whoami`:rwx app/cache app/logs sudo setfacl -dR -m u:apache:rwx -m u:`whoami`:rwx app/cache app/logs
Y funcionó. Quizá anteriormente omití algún paso pero ya lo tengo listo.
Sin sufrimiento no hay gloria, espero les sirva para algun otro pulpin como yo >D
@NilStark
@NilStark gracias por publicar la solución que te ha funcionado para resolver tu problema.
Lo primero que te quería comentar es que, en realidad, esto no es un problema de Symfony. Se trata de un problema común de casi todos los frameworks web que se ejecutan en sistemas operativos con permisos de tipo Linux y Mac OS X.
Para comprender bien el problema, creo que hay que entender su verdadera causa: en Symfony, y en otros frameworks, hay varios directorios en los que lee y escribe tanto la consola de comandos como el servidor web. El problema es que la consola de comandos normalmente se ejecuta con un usuario (root
en tu caso) que es diferente al usuario con el que se ejecuta el servidor web (apache
en tu caso).
Así que la solución es que has publicado es correcta ... pero temporal. Tendrás que repetirla una y otra vez por cada nuevo proyecto Symfony que crees. ¡Y eso es horrible! La mejor solución con diferencia es ejecutar el servidor web con el mismo usuario con el que ejecutas la consola de comandos.
Sólo tienes que abrir el archivo de configuración de Apache, cambiar el usuario con el que se ejecuta (directivas User
y Group
) y reiniciarlo. ¡Ya está! Esta solución te llevará sólo 1 minuto, pero es perpetua y funcionará bien para todos los proyectos que crees de aquí en adelante.
@javiereguiluz
Gracias por la aclaración, es muy importante, pero la primera solución que intenté aparte de lo que decía el libro, es cambiar el usuario y grupo del apache a User root
, Group root
.
Pero por alguna razón, cuando hacía el cambio el Apache no iniciaba. Luego de algunos intentos, empecé a buscar otra solución y la que publiqué es la que me sirvió. Pero ten por seguro que revisaré y encontraré una respuesta al por qué no pude aplicar la solución que me indicas.
Gracias.
@NilStark
¿El mensaje de error que se te produce cuando usas root
como usuario en Apache es este?
Apache has not been designed to serve pages while running as root. There are known race conditions that will allow any local user to read any file on the system. If you still desire to serve pages as root then add -DBIG_SECURITY_HOLE to the CFLAGS env variable and then rebuild the server. It is strongly suggested that you instead modify the User directive in your httpd.conf file to list a non-root user.
Tal y como dice el contenido del mensaje de error, ejecutar Apache como root
es tan extremadamente arriesgado, que no te dejan hacerlo. Para conseguirlo, te obligan a recompilar Apache y añadir la opción -DBIG_SECURITY_HOLE
, que significa "agujero de seguridad enorme".
Lo mejor que puedes hacer es ejecutar los comandos de la consola como un usuario normal y así poder cambiar el usuario de Apache a algo que no sea root
. Esta es la práctica común para todos los usuarios de Linux.
@javiereguiluz