Come impostare le autorizzazioni di file per Laravel

Come impostare le autorizzazioni di file per Laravel

Problema

Sto usando Apache Web Server che ha il proprietario della cartella impostata su _www: _www. Continuo a dimenticare le migliori pratiche quando si tratta di autorizzazioni di file, ad esempio quando creo un nuovo progetto Laravel 5.

Ciò significa che Apache necessita di accesso alle cartelle di archiviazione e fornitore o solo ai loro contenuti attuali?

Laravel 5 richiede /archiviazione per essere scrittabile. Nonostante non sia l'idea migliore, ho impostato il permesso 777 per la cartella

La documentazione ufficiale dice:

Laravel può richiedere la configurazione di alcune autorizzazioni: le cartelle all'interno di archiviazione e fornitore richiedono l'accesso alla scrittura da parte del server Web.

Capisco che potrebbe essere molto meglio se cambiassi il proprietario invece delle autorizzazioni.

Ma ora ho problemi con il mio editore, chiedendomi sempre password ogni volta che voglio salvare un file.

Quale sarebbe il modo migliore per risolvere questi problemi ?

Soluzione

Prima di dare la risposta finale, voglio solo dichiarare l'ovvio. Se vuoi dare a qualsiasi cartella un permesso di 777, stai praticamente invitando tutti a leggere, scrivere ed eseguire file in quella directory.

Esistono fondamentalmente due modi per impostare la proprietà e le autorizzazioni:

  • Concediti la proprietà
  • Rendi il server web il proprietario di tutti i file.

Il secondo è come fanno la maggior parte delle persone ed è quello che suggerisce Laravel.

Supponendo che WWW-DATA sia il tuo utente del server web, è possibile eseguire:

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

E questo è buono, perché il tuo server web possiederà i file e può eseguire. La parte cattiva è che l'utente ha effettuato l'accesso (tramite FTP o SSH) sarà probabilmente un utente diverso, quindi quello che si desidera fare è aggiungere questo utente al gruppo WebServer:

sudo usermod -a -g www -data ubuntu

Naturalmente, questo presuppone che il tuo server web sia in esecuzione come www-data (la homestead predefinita) e il tuo utente è ubuntu (è vagabondo se stai usando Homestead).

Quindi, una buona pratica è impostare tutte le directory su 755 e tutti i file su 644 ... impostare le autorizzazioni di file utilizzando il comando seguente:

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

Impostare le autorizzazioni della directory:

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

Il tuo utente come proprietario

Quello che preferisco è possedere tutte le directory e i file con cui sto lavorando (rende molto più semplice il lavoro con tutto), quindi lo faccio:

sudo chown -r my-uker: www-data/path/to/your/laravel-directory

Quindi posso solo dare queste autorizzazioni a me stesso e all'utente del server:

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 che non vuoi dimenticare è dare al server Webserver accedere ai file di lettura e scrittura nella cartella Cache

Il tuo server web dovrà caricare e archiviare anche i dati, quindi assicurati di fornire anche le autorizzazioni per la cartella di archiviazione:

sudo chgrp -r www -data archiviazione bootstrap/cache
sudo chmod -r ug+rwx Storage bootstrap/cache

Non era così difficile, non era vero?