Saltar al contenido

¿Cómo configurar permisos de archivo para Laravel?

Miguel, miembro de nuestro equipo, nos ha hecho el favor de redactar este tutorial ya que controla muy bien dicho tema.

Solución:

Solo para indicar lo obvio para cualquiera que esté viendo esta discusión… si otorga permisos 777 a cualquiera de sus carpetas, está permitiendo que CUALQUIER PERSONA lea, escriba y ejecute cualquier archivo en ese directorio… lo que esto significa es que ha otorgado CUALQUIER PERSONA (cualquier pirata informático o persona malintencionada en todo el mundo) permiso para cargar CUALQUIER archivo, virus o cualquier otro archivo, y LUEGO ejecutar ese archivo…

SI ESTÁ CONFIGURANDO SUS PERMISOS DE CARPETA EN 777, HA ABIERTO SU SERVIDOR A CUALQUIER PERSONA QUE PUEDE ENCONTRAR ESE DIRECTORIO. ¿¿¿Bastante claro??? 🙂

Básicamente, hay dos formas de configurar su propiedad y permisos. O te otorgas la propiedad o haces que el servidor web sea el propietario de todos los archivos.

Servidor web como propietario (la forma en que la mayoría de la gente lo hace y la forma del documento de Laravel):

asumiendo que www-data (podría ser otra cosa) es el usuario de su servidor web.

sudo chown -R www-data:www-data /path/to/your/laravel/root/directory

si hace eso, el servidor web posee todos los archivos, y también es el grupo, y tendrá algunos problemas para cargar archivos o trabajar con archivos a través de FTP, porque su cliente FTP iniciará sesión como usted, no como su servidor web, así que agregue su usuario al grupo de usuarios del servidor web:

sudo usermod -a -G www-data ubuntu

Por supuesto, esto supone que su servidor web se ejecuta como www-data (el valor predeterminado de Homestead) y su usuario es ubuntu (es un error si está usando Homestead).

Luego configura todos sus directorios en 755 y sus archivos en 644… ESTABLECER permisos de archivo

sudo find /path/to/your/laravel/root/directory -type f -exec chmod 644  ;    

ESTABLECER permisos de directorio

sudo find /path/to/your/laravel/root/directory -type d -exec chmod 755  ;

Tu usuario como propietario

Prefiero ser dueño de todos los directorios y archivos (hace que trabajar con todo sea mucho más fácil), así que vaya a su directorio raíz de laravel:

cd /var/www/html/laravel >> assuming this is your current root directory
sudo chown -R $USER:www-data .

Luego me doy permisos a mí y al servidor web:

sudo find . -type f -exec chmod 664  ;   
sudo find . -type d -exec chmod 775  ;

Luego, otorgue al servidor web los derechos de lectura y escritura en el almacenamiento y la memoria caché.

Independientemente de la forma en que lo configure, debe otorgar permisos de lectura y escritura al servidor web para almacenamiento, caché y cualquier otro directorio que el servidor web también necesite cargar o escribir (dependiendo de su situación), así que ejecute los comandos de bashy arriba:

sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

Ahora, está seguro y su sitio web funciona, Y puede trabajar con los archivos con bastante facilidad.

Los permisos para el storage y vendor las carpetas deben permanecer en 775por obvias razones de seguridad.

Sin embargo, tanto su computadora como su servidor Apache deben poder escribir en estas carpetas. Ej: cuando ejecuta comandos como php artisansu computadora necesita escribir en el archivo de registros en storage.

Todo lo que necesita hacer es otorgar la propiedad de las carpetas a Apache:

sudo chown -R www-data:www-data /path/to/your/project/vendor
sudo chown -R www-data:www-data /path/to/your/project/storage

Luego necesita agregar su computadora (referenciada por su username) al grupo al que pertenece el servidor Apache. Al igual que :

sudo usermod -a -G www-data userName

NOTA: Con mayor frecuencia, groupName es www-data pero en tu caso, reemplázalo con _www

Nos hemos encontrado con muchos casos extremos al configurar permisos para aplicaciones Laravel. Creamos una cuenta de usuario separada (deploy) para poseer la carpeta de la aplicación Laravel y ejecutar los comandos de Laravel desde la CLI, y ejecutar el servidor web bajo www-data. Un problema que esto causa es que los archivos de registro pueden ser propiedad de www-data o deploydependiendo de quién escribió primero en el archivo de registro, evitando obviamente que el otro usuario escriba en él en el futuro.

Descubrí que la única solución sensata y segura es usar ACL de Linux. El objetivo de esta solución es:

  1. Para permitir que el usuario que posee/implementa la aplicación tenga acceso de lectura y escritura al código de la aplicación Laravel (usamos un usuario llamado deploy).
  2. para permitir el www-data el usuario tiene acceso de lectura al código de la aplicación Laravel, pero no tiene acceso de escritura.
  3. Para evitar que otros usuarios accedan al código/datos de la aplicación Laravel.
  4. Para permitir que tanto el www-data usuario y el usuario de la aplicación (deploy) acceso de escritura a la carpeta de almacenamiento, independientemente del usuario propietario del archivo (por lo que ambos deploy y www-data puede escribir en el mismo archivo de registro, por ejemplo).

Logramos esto de la siguiente manera:

  1. Todos los archivos dentro de la application/ carpeta se crean con el umask predeterminado de 0022lo que da como resultado que las carpetas tengan drwxr-xr-x permisos y archivos que tienen -rw-r--r--.
  2. sudo chown -R deploy:deploy application/ (o simplemente implemente su aplicación como el deploy usuario, que es lo que hacemos).
  3. chgrp www-data application/ para dar el www-data acceso grupal a la aplicación.
  4. chmod 750 application/ para permitir el deploy lectura/escritura del usuario, el www-data usuario de solo lectura y para eliminar todos los permisos a cualquier otro usuario.
  5. setfacl -Rdm u:www-data:rwx,u:deploy:rwx application/storage/ para establecer los permisos predeterminados en el storage/ carpeta y todas las subcarpetas. Cualquier carpeta/archivo nuevo creado en la carpeta de almacenamiento heredará estos permisos (rwx para ambos www-data y deploy).
  6. setfacl -Rm u:www-data:rwX,u:deploy:rwX application/storage/ para establecer los permisos anteriores en cualquier archivo/carpeta existente.

Comentarios y calificaciones del post

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *