2015-05-21 19 views

risposta

-3

Risposta breve:

sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart

risposta completa:

Quando si avvia laravel 5 quadro sul server Apache con abilitato di default l'opzione 'quotidiana' per la creazione di file di registro, a volte si dovrebbe affrontare con ostentazione di scrivere in file di log a causa delle autorizzazioni del file.
In genere, quando si dispone di un progetto php, tutti i file appartengono all'utente www-data e l'utente corrente non ha bisogno di scrivere su file di log.
Per quanto riguarda Laravel, due processi diversi devono scrivere nei file di registro:
1) Server Apache (utente www-data) quando si esegue un'operazione nel browser;
2) Processo di php (utente) quando si esegue php artisan something nella riga di comando.

Ovviamente, è possibile eseguire sudo -u www-data php artisan your_command (come suggerito here) ogni volta che si desidera utilizzare l'artigiano, ma è un po 'fastidioso.
Prima di tutto è necessario fornire le autorizzazioni alle directory di vendita e di archiviazione per l'utente Apache. La maggior parte modo più semplice (ma non il migliore) è quello di eseguire: sudo chmod -R 777 vendor storage

Ora, vediamo cosa succede quando file di log crea in entrambi i casi.

Se inizialmente logfile storage/logs/laravel-2015-mm-dd.log stato creato attraverso l'errore sollevato dal php artisan something comando (caso 2), file di log avrà

`-rw-rw-r-- your_user:your_user` 

permessi.
se è stato creato dal server apache (caso 1), che ussually lanciare sotto www-data utente, i permessi sarà simile a questa:

-rw-r-r-- www-data:www-data 

Quindi, il mio suggerimento è quello di cambiare permissins per i nuovi file creati da apache.
Aggiungiamo la riga umask 000 al file /etc/resolv.conf.

echo "umask 000" | sudo tee -a /etc/resolv.conf 

Ora,

sudo service apache2 restart 

Questo è tutto.
Attenzione, questa soluzione è applicabile solo per l'ambiente di sviluppo , a causa del possibile rischio di sicurezza.

+1

tbh, non dovresti mai voler chmod 777, mai. – Gooey

+0

Qualche aggiornamento su come eseguire questa operazione con un server di produzione? – PickYourPoison

4

Le autorizzazioni per le cartelle storage e vendor devono rimanere a 775, per ovvi motivi di sicurezza.

Tuttavia, sia il computer che il server Apache devono essere in grado di scrivere in queste cartelle. Es: quando esegui comandi come php artisan, il tuo computer deve scrivere nel file dei registri in storage.

Tutto quello che dovete fare è dare la proprietà delle cartelle per Apache:

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

allora avete bisogno di aggiungere il computer (a cui fa riferimento è username) al gruppo a cui il server Apache appartiene. In questo modo:

sudo usermod -a -G www-data userName 

più delle volte, è groupNamewww-data ma si potrebbe desiderare di sostituirlo con il gruppo corretto.

+1

Sfortunatamente, il tuo approccio non aiuterebbe. Di default Apache crea nuovi file con permessi 644 (-rw-r -r--). Significa che l'artigiano non può scrivere sullo stesso file se appartiene al gruppo www-data o no. – ademin

+1

Hai ragione. Cancellerò la mia risposta. Tuttavia, dovresti considerare di aggiungere l'utente al gruppo www-data e di mantenere 775, anziché 777 tutta la cartella. Abbiamo bisogno di una soluzione che funzioni anche per la produzione. –

2
  • chmod 777 è in generale un rischio per la sicurezza estremamente rischioso.
  • chmod 775 per la cartella di archiviazione va bene considerando anche l'utente
    appartiene al gruppo di server Web.

  • con -R è estremamente rischioso poiché per i file non è necessario un permesso di esecuzione.

  • chmod 664 per i file nella memoria interna. chmod 775 per cartelle all'interno

Problemi correlati