Cómo configurar los permisos de archivo para Laravel

Cómo configurar los permisos de archivo para Laravel

Problema

Estoy usando el servidor web Apache que tiene el propietario de la carpeta configurado en _www: _www. Sigo olvidando la mejor práctica cuando se trata de permisos de archivos, por ejemplo, cuando creo un nuevo proyecto Laravel 5.

¿Significa esto que Apache necesita acceso a las carpetas de almacenamiento y proveedor también??

Laravel 5 requiere /carpeta de almacenamiento para ser escritos. A pesar de no ser la mejor idea, he estado estableciendo el permiso 777 para la carpeta

La documentación oficial dice:

Laravel puede requerir que se configuren algunos permisos: las carpetas dentro del almacenamiento y el proveedor requieren acceso de escritura por el servidor web.

Entiendo que podría ser mucho mejor si cambiaría al propietario en lugar de los permisos.

Pero ahora tengo problemas con mi editor, siempre pidiéndome contraseñas cada vez que quiera guardar un archivo.

¿Cuál sería la mejor manera de resolver estos problemas? ?

Solución

Antes de dar la respuesta final, solo quiero decir lo obvio. Si desea darle a cualquier carpeta un permiso 777, está invitando a todos a leer, escribir y ejecutar archivos en ese directorio.

Básicamente, hay dos formas de establecer su propiedad y permisos:

  • Date la propiedad
  • Hacer del servidor web el propietario de todos los archivos.

El segundo es cómo lo hacen la mayoría de la gente y eso es lo que sugiere Laravel.

Suponiendo que los datos www es el usuario de su servidor web, puede ejecutar:

sudo chown -r www-data: www-data/rath/to/Your/Laravel-Directory

Y esto es bueno, porque su servidor web poseerá archivos y puede ejecutar. La parte mala es que su usuario iniciado en el usuario (ya sea a través de FTP o SSH) probablemente sea un usuario diferente, por lo que lo que desea hacer es agregar este usuario al grupo WebServer:

sudo usermod -a -g www -data ubuntu

Por supuesto, esto supone que su servidor web se está ejecutando como data www (el valor predeterminado de Homestead), y su usuario es Ubuntu (es vagante si está usando Homestead).

Luego, una buena práctica es establecer todos sus directorios en 755 y todos sus archivos en 644 ... Establezca permisos de archivo utilizando el siguiente comando:

sudo Find/Path/To/Your/Laravel -Directory -Type F -exec Chmod 644 \;

Establecer permisos de directorio:

sudo Find/Path/To/Your/Laravel -Directory -Type D -exec Chmod 755 \;

Su usuario como propietario

Lo que prefiero es poseer todos los directorios y archivos con los que estoy trabajando (hace que trabajar con todo sea mucho más fácil), así que sí:

sudo chown -r my-user: www-data/rath/to/your/laravel-directorio

Entonces puedo darles estos permisos a mí mismo y al usuario del servidor web:

sudo Find/Path/To/Your/Laravel -Directory -Type F -exec Chmod 664 \;
sudo Find/Path/To/Your/Laravel -Directory -Type D -exec Chmod 775 \;

Una cosa que no desea olvidar es darle acceso al servidor web a leer y escribir archivos en la carpeta de caché

Su servidor web deberá cargar y almacenar datos también, así que asegúrese de dar los permisos para la carpeta de almacenamiento también:

sudo chgrp -r www -data Storage Bootstrap/caché
sudo chmod -r ug+rwx almacenamiento de almacenamiento/caché

Eso no fue tan difícil, ¿no??