Come risolvere l'errore: non è stato possibile aprire laravel.log?


186

Sono piuttosto nuovo in laravel, in effetti e sto cercando di creare il mio primo progetto. per qualche motivo continuo a ricevere questo errore (non ho ancora iniziato a scrivere codice)

Error in exception handler: The stream or file "/var/www/laravel/app/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /var/www/laravel/bootstrap/compiled.php:8423

Ho letto che questo ha qualcosa a che fare con le autorizzazioni, ma chmod -R 775 storagenon ha aiutato affatto.

permessi


Sei sicuro di essere nella directory giusta quando esegui quel comando chmod? Prova chmod -R 755 / var / www / laravel / app / storage. Inoltre, su cosa sono impostati l'utente e il gruppo? Prova ls -al / var / www / laravel / app / storage
Ryan LaB

stessi risultati (ho aggiornato il mio post originale per mostrare le autorizzazioni della cartella)
FRR

: / per qualche motivo non funziona ancora. Non l'ho mai detto prima, ma sto usando il vagabondo. quindi la mia cartella www è su una VM (apache, php e tutto il resto è in esecuzione su di essa). Non sono sicuro che abbia qualcosa a che fare con qualcosa, ma ho pensato di menzionarlo per ogni evenienza. (Sto creando il mio progetto con la VM, usando il compositore)
FRR

13
Quei ragazzi che suggeriscono 777, provano a google questa frase: "produzione db_password tipo di file: env inurl: com"
Tarasovych,

1
Disabilitare SELINUX ha funzionato per me.
Prakash P

Risposte:


307

Non impostare mai una directory su 777 . dovresti cambiare la proprietà della directory. quindi imposta l'utente corrente con cui hai effettuato l'accesso come proprietario e l'utente del server web (www-data, apache, ...) come gruppo. Puoi provare questo:

sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache

quindi per impostare l'autorizzazione alla directory prova questo:

chmod -R 775 storage
chmod -R 775 bootstrap/cache

Aggiornare:

L'utente e il gruppo del server Web dipendono dal server Web e dal sistema operativo in uso. per capire qual è l'utente e il gruppo del tuo server web usa i seguenti comandi. per l'uso di nginx:

ps aux|grep nginx|grep -v grep

per l'uso di apache:

ps aux | egrep '(apache|httpd)'


4
Grazie! In breve puoi anche fare:sudo chown -R {your current user}:www-data storage bootstrap/cache
Ramesh Pareek il

2
@RameshPareek Hai ragione ma volevo solo essere più chiaro;)
Hamid Parchami,

1
Questo non funziona per me. Ho appena capito chown: www-data: illegal group name. L'impostazione della directory su 777 è l'unica cosa che funziona
Matt D

3
@MattD Immagino che il gruppo apache su Mac sia _wwwprovare questo sudo chgrp -R _www bootstrap/cache. sarebbe utile per dare un'occhiata a questo post: stackoverflow.com/a/6419695/2125114
Hamid Parchami

3
Questa dovrebbe essere la risposta scelta, il 100% concorda sul fatto che gli amministratori di sistema non dovrebbero solo consentire l'accesso a tutto per evitare di risolvere il vero problema.
HyperionX

134

Non usare mai 777 per le directory sul tuo server live, ma sul tuo computer, a volte abbiamo bisogno di fare più di 775, perché

chmod -R 775 storage

Si intende

7 - Owner can write
7 - Group can write
5 - Others cannot write!

Se il tuo server web non è in esecuzione come Vagrant, non sarà in grado di scrivergli, quindi hai 2 opzioni:

chmod -R 777 storage

o cambia il gruppo per l'utente del tuo server web, supponendo che sia www-data:

chown -R vagrant:www-data storage

Non avevo bisogno del chmod nel mio caso perché era già pronto, tuttavia su Fedora 20 aveva bisogno di:chown -R apache:apache laravelproject
misterjaytee,

Ho avuto problemi con il montaggio delle cartelle tramite samba / vagrant chown -R vagrant:www-data storage, grazie per me.
Lewis,

1
chmod -R 777 storage ha funzionato per me. Ho provato a cambiare il gruppo, ma ho continuato a riceverewww-data: illegal group name
Matt D

58

Per risolvere questo problema, è necessario modificare la proprietà della directory per l'utente unix utilizzato dal server web.

  1. Esci dalla VM
  2. Usando la console, vai alla tua cartella sincronizzata (vagrant)
  3. sudo chown -R $ USER: www-data storage
  4. chmod -R 775 di archiviazione

Anche se ho creato il progetto all'interno della VM usando l'utente VM, la cartella apparteneva all'utente nel computer reale; quindi, quando ci provo

Adesso funziona.

Grazie a tutti quelli che mi hanno aiutato a capire questa cosa

MODIFICARE:

In realtà, non funzionava ancora, mi dava comunque un problema di "permesso negato".

Ecco cosa ho fatto, ho modificato il mio Vagrantfile in questo modo:

config.vm.synced_folder "./app","/var/www/", create:true,
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]

L'ho fatto ... E SONO GROOT! Ancora non funzionante ... laravel 5 ... rinominato il file di registro, laravel ne ha creato uno nuovo ... stesso errore
ied3vil,

1
Non ho config.vm.synced_folder perché sto usando homestead, come posso risolvere questo problema?
oleynikd,

21
Non dovresti usare 777 tutti volenti o nolenti.
IIll IIll

Non vedo problemi sull'uso di 777 in una cartella, so esattamente cosa c'è dentro (un progetto fittizio di esempio)
FRR

2
Questa non dovrebbe assolutamente essere la risposta accettata. È terribile. Non impostare mai 777. Mai.
CGriffin

39

Potrebbe anche essere SELinux. (Centos, RedHat)

Determinare lo stato di SElinux sul terminale:

$ sestatus

Se lo stato è abilitato, scrivere il comando per disabilitare SElinux

$ setenforce Permissive

Oppure puoi eseguire questo comando

$ sudo setenforce 0


6
Questa è l'unica cosa che ha funzionato, puoi per favore spiegare cosa fa?
hack4mer,

2
@ hack4mer puoi leggere ulteriori informazioni su seLinux. en.wikipedia.org/wiki/Security-Enhanced_Linux
Turan Zamanlı

le cose strane che abbia mai visto, perché diavolo funziona dopo aver cercato per più di 6 ore
Muhamad Yulianto,

1
L'unica soluzione che ha funzionato per me .. grazie. Ma il problema si ripresenta ogni volta che il server viene riavviato, sai come farlo applicare anche se il server viene riavviato?
Juan Angel,

1
@JuanAngel devi disabilitare permanentemente il servizio. apri con l'editor vim / etc / sysconfig / selinux e poi cambia la direttiva SELinux = applicando SELinux = disabilitato
Turan Zamanlı

32

È necessario regolare le autorizzazioni di storagee bootstrap/cache.

  • cd nel tuo progetto Laravel.
  • sudo chmod -R 755 storage
  • sudo chmod -R 755 bootstrap/cache

Puoi provare 777 se 755 non funziona. 777 non è sicuro però!

A seconda della configurazione del server Web, potrebbe essere possibile essere più specifici con le autorizzazioni e concederle solo all'utente del server Web. Google WEB SERVER NAME Laravel file permissionsper ulteriori informazioni.

Al momento in cui scrivo, questo è per Laravel 5.4


14

Aggiungere a composer.json

"scripts": {
    "post-install-cmd": [
          "chgrp -R www-data storage bootstrap/cache",
          "chmod -R ug+rwx storage bootstrap/cache"
     ]
}

Dopo composer install


12

Esegui i seguenti comandi e puoi aggiungerlo sudoall'inizio del comando dipende dal tuo sistema:

chmod -R 775 storage/framework
chmod -R 775 storage/logs
chmod -R 775 bootstrap/cache 

1
Non usare mai 777. Con le autorizzazioni 777, stai dando a chiunque disponga di una connessione pieno accesso ai file o alle directory con tali autorizzazioni. Possono modificarli in qualsiasi modo scelgano, anche in modo dannoso. Molti incidenti di pirateria informatica derivano da autorizzazioni 777.
Odyssee,

8

Per tutti gli utenti di Centos 7 su un contesto Laravel, non è necessario disabilitare Selinux, basta eseguire questi comandi:

yum install policycoreutils-python -y # might not be necessary, try the below first

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/storage(/.*)?" # add a new httpd read write content to sellinux for the specific folder, -m for modify
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/bootstrap/cache(/.*)?" # same as the above for b/cache

restorecon -Rv /var/www/html/ # this command is very important to, it's like a restart to apply the new rules

Infine, assicurati che i tuoi host, ips e host virtuali siano tutti correttamente per l'accesso remoto.

Selinux ha lo scopo di limitare l'accesso anche agli utenti root, quindi è possibile accedere solo alle cose necessarie, almeno in una visione generale, è sicurezza aggiuntiva, disabilitarla non è una buona pratica, ci sono molti collegamenti per imparare Selinux, ma per questo caso non è nemmeno richiesto.


Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - Dalla recensione
Patrick Mevzek,

Il collegamento è super esplicito, non è necessario un tale meccanismo, esiste persino una sezione specifica per un contesto SELinux di Laravel. Penso che la tua opinione dovrebbe essere supportata da un po 'più di logica che una semplice regola empirica. Nel frattempo hai annullato la votazione di una risposta che probabilmente risolverà il 99% dei problemi senza attenersi a cattive pratiche come la disabilitazione di Selinux.
Daniel Santos,

Non è un problema essere espliciti o meno. L'idea di questo sito è che contiene tutte le informazioni pertinenti, quindi leggendo una risposta otteniamo tutte. I collegamenti esterni possono marcire e quindi la risposta diventa inutile. Questo è spiegato nel centro assistenza su stackoverflow.com/help/how-to-answer : "I collegamenti a risorse esterne sono incoraggiati, ma si prega di aggiungere un contesto attorno al collegamento in modo che gli altri utenti abbiano qualche idea di cosa sia e perché sia ​​lì . Cita sempre la parte più rilevante di un link importante, nel caso in cui il sito di destinazione non sia raggiungibile o sia permanentemente offline. "
Patrick Mevzek,

La tua domanda è stata contrassegnata per la revisione, tutto qui. E contraddice ciò che è scritto nel Centro assistenza che ho citato. Tutte le risposte con solo link e nessuna descrizione vengono ridimensionate e persino rimosse. Sentiti libero di modificare la tua risposta per fornire la parte pertinente della spiegazione qui. E sei libero di sottovalutare tutte le risposte che ritieni negative. Dal link della recensione puoi vedere che non ero il solo a raccomandare di chiudere la tua risposta. Non per motivi tecnici, solo perché un collegamento non è sufficiente.
Patrick Mevzek,

Grazie per il chiarimento, non sapevo che esistessero quel tipo di linee guida, o anche se anche durante il processo di registrazione ottieni un suggerimento per leggere le risorse, non me lo ricordo. Quello che hai detto potrebbe essere vero, il collegamento potrebbe marcire, ma una risposta può essere raggiunta senza sforzo, indipendentemente, lo modificherò.
Daniel Santos,

6

Se usi cmd

sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache

Se si utilizza la GUI

Prima vai al progetto e fai clic con il pulsante destro del mouse sull'archiviazione e controlla le proprietà e vai alla scheda Autorizzazioni

inserisci qui la descrizione dell'immagine

Modifica le autorizzazioni utilizzando il codice seguente

sudo chmod -R 777 storage

Quindi potrebbero essere le proprietà del tuo file

inserisci qui la descrizione dell'immagine

Quindi controlla le tue impostazioni ed esegui il comando laravel funzionerà :)


Grazie yoouuuuuu
viniciussvl

5

In Laravel, è necessario impostare ACL su storagee cachedirectory in modo che l'utente del server Web possa leggere / scrivere sulla directory. Apri un nuovo terminale ed esegui quanto segue:

HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)

sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/

Riferimenti:

https://symfony.com/doc/3.4/setup/file_permissions.html#using-acl-on-a-system-that-supports-setfacl-linux-bsd

https://linux.die.net/man/1/setfacl


5

Potrebbe essere tardi ma può aiutare qualcuno, cambiando le autorizzazioni della directory ha funzionato per me.

Supponendo che il tuo progetto Laravel sia nella /var/www/html/directory. Vai a questa directory.

cd /var/www/html/

Quindi modificare le autorizzazioni storage/e le bootstrap/cache/directory.

sudo chmod -R gu+w storage/
sudo chmod -R guo+w storage/
sudo chmod -R gu+w bootstrap/cache/
sudo chmod -R guo+w bootstrap/cache/

2

Questa soluzione è specifica per laravel 5.5

È necessario modificare le autorizzazioni per alcune cartelle: chmod -R -777 archiviazione / registri chmod -R -777 memoria / framework per le cartelle precedenti 775 o 765 non ha funzionato per il mio progetto

chmod -R 775 bootstrap/cache 

Anche la proprietà della cartella del progetto dovrebbe essere la seguente (utente corrente) :( utente del server Web)



1

Non ero troppo entusiasta di cambiare le autorizzazioni della mia cartella in 777. Ecco come ho risolto questo problema.

Innanzitutto, ho modificato l'utente che esegue il server Web sul mio computer locale (eseguo nginx, ma i principi si applicano ovunque):

$> sudo vim /etc/nginx/nginx.conf
user <my_user> #inside nginx.conf
service nginx reload

Successivamente, ho creato un altro index.phpfile nella public/cartella per scoprire chi stava eseguendo la mia versione di php-fpm e dove avrei intenzione di cambiarlo:

<?php
phpinfo();
?>

Ricaricando la pagina, ho scoperto che www-dataera l'utente (nella sezione ambiente). Ho anche scoperto che stavo eseguendo php 7.1. Ho proceduto a cambiare l'utente:

$> sudo vim /etc/php/7.0/fpm/pool.d/www.conf 
#Look for www-data or the following variables: user, group, listen.user, listen.group.

Infine, ho dato le seguenti autorizzazioni alle cartelle:

sudo chmod -R 775 ./storage/

Ora, mi sono assicurato di essere il proprietario delle cartelle usando un semplice:

ls -al

Se imposti gli utenti del server e php-fpm su te stesso e le cartelle sono di proprietà di root, ad esempio, continuerai a riscontrare questo problema. Questo può accadere se hai fatto un sudo laravel new <project>root. In tal caso, assicurarsi di utilizzare un chowncomando ricorsivo sul progetto per modificare le user:groupimpostazioni. Nella maggior parte dei casi predefiniti, www-dataè l'impostazione principale per il server e php, in tal caso si tratta di assicurarsi che la cartella non sia esauritawww-data portata.

Il mio progetto è installato nella mia home directory. Su Ubuntu 16.04 e Laravel 5.5.


1

prova questo

  1. cd / var / www / html
  2. setenforce 0
  3. riavvio del servizio httpd

Potresti spiegare cosa fa questo?
Sempre più idiota il

1
Non c'è bisogno di cambiare directory da usare setenforcema in ogni caso è sbagliato disabilitare completamente SELinux solo per risolvere un problema di autorizzazione.
Patrick Mevzek,

0

Nel mio caso particolare ho avuto un file di configurazione generato e memorizzato nella bootstrap/cache/directory in modo che i miei passi dove:

  1. Rimuovi tutti i file memorizzati nella cache: rm bootstrap/cache/*.php
  2. Crea un nuovo laravel.logfile e applica l'aggiornamento delle autorizzazioni sul file usando:

    • chmod -R 775 storage

0

(su Ubuntu ): può essere risolto in 2 semplici passaggi:

$ sudo chmod -R 777 storage 

E

$ sudo service apache2 restart

Passaggio 3: fai hackerare il tuo server e / o i tuoi utenti perché hai aperto i tuoi file al mondo.
miken32,

0

Elimina "/var/www/laravel/app/storage/logs/laravel.log"e riprova:

rm storage/logs/laravel.log


-1

Ho riscontrato questo problema, trovato questo e risolto il problema.

inserisci qui la descrizione dell'immagine


-1

Questo errore può essere corretto disabilitando Linux.

Controlla se è stato abilitato

sestatus

Si prova..

setenforce 0


5
"disabilitando Linux "? Questo va davvero troppo lontano :-)!
Patrick Mevzek,

-1

Per questo errore:

Errore nel gestore eccezioni: impossibile aprire lo stream o il file "/var/www/laravel/app/storage/logs/laravel.log": impossibile aprire lo stream: autorizzazione negata in / var / www / laravel / bootstrap / compilata .php: 8423

usa questo comando nel terminale:

sudo chmod -R 777 storage

2

-1

Risolto il problema con questo comando in centos 7.6 Server

chcon -R -t httpd_sys_content_t $SITE_PATH

chcon -R -t httpd_sys_rw_content_t $SITE_PATH
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.