Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Problemas con permisos de app/cache y app/logs

29 de enero de 2015

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

#1

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

29 enero 2015, 4:48
#2

@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

29 enero 2015, 8:54
#3

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

3 febrero 2015, 1:34
#4

¿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

3 febrero 2015, 8:30