Come impostare le autorizzazioni per i file per Laravel?


234

Sto utilizzando Apache Web Server su cui è impostato il proprietario _www:_www. Non so mai quale sia la migliore pratica con i permessi sui file, ad esempio quando creo un nuovo progetto Laravel 5.

Laravel 5 richiede che la /storagecartella sia scrivibile. Ho trovato molti approcci diversi per farlo funzionare e di solito 777finisco per farlo ricorsivamente. So che non è la migliore idea però.

Il documento ufficiale dice:

Laravel potrebbe richiedere alcune autorizzazioni per essere configurato: cartelle all'interno storagee vendorrichiedere l'accesso in scrittura dal server web.

Significa che anche il web server ha bisogno di accedere alle cartelle storagee vendorloro stessi o solo ai loro contenuti attuali?

Presumo che ciò che è molto meglio, sta cambiando il proprietario invece delle autorizzazioni. Ho modificato tutte le autorizzazioni dei file di Laravel in modo ricorsivo _www:_wwwe ciò ha permesso al sito di funzionare correttamente, come se avessi cambiato chmod in 777. Il problema è che ora il mio editor di testo mi chiede la password ogni volta che voglio salvare qualsiasi file e lo stesso accade se provo a cambiare qualcosa nel Finder, come ad esempio copiare un file.

Qual è l'approccio corretto per risolvere questi problemi?

  1. Modificare chmod
  2. Cambia il proprietario dei file in modo che corrispondano a quelli del server web e forse imposta l'editor di testo (e il Finder?) Per saltare la richiesta di password o farli usare sudo
  3. Modifica il proprietario del server Web in modo che corrisponda all'utente del sistema operativo (non conosco le conseguenze)
  4. Qualcos'altro

4
Penso che 777sia troppa libertà, perché include tutte le autorizzazioni per tutti.
Robo Robok,

Dalla documentazione laravel: directory all'interno storagee le bootstrap/cachedirectory dovrebbe essere scrivibile dal server web
joshuamabina

1
usa fcgi e puoi 755/644 per tutti (incl. public / storage)
Jeffz

@jww d'accordo potremmo spostare la domanda su serverfault invece di metterla in attesa?
wp78de,

Risposte:


588

Giusto per dichiarare l'ovvio per chiunque stia visualizzando questa discussione .... se dai a qualsiasi delle tue cartelle 777 autorizzazioni, stai permettendo a TUTTI di leggere, scrivere ed eseguire qualsiasi file in quella directory .... cosa significa che hai dato A QUALUNQUE (qualsiasi hacker o malintenzionato in tutto il mondo) l'autorizzazione a caricare QUALSIASI file, virus o qualsiasi altro file e ALLORA eseguire quel file ...

SE STAI IMPOSTANDO LE AUTORIZZAZIONI DELLA CARTELLA A 777, IL TUO SERVER È STATO APERTO A CHIUNQUE PU CAN TROVARE QUESTA DIRETTIVA. Abbastanza chiaro??? :)

Esistono fondamentalmente due modi per impostare la proprietà e le autorizzazioni. O ti dai la proprietà o rendi il server web il proprietario di tutti i file.

Webserver come proprietario (il modo in cui la maggior parte delle persone lo fa e il modo del doc Laravel):

supponendo che www-data (potrebbe essere qualcos'altro) sia l'utente del tuo server web.

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

se lo fai, il server web possiede tutti i file, ed è anche il gruppo, e avrai dei problemi nel caricare i file o nel lavorare con i file tramite FTP, perché il tuo client FTP verrà registrato come te, non il tuo server web, quindi aggiungi il tuo utente al gruppo utenti webserver:

sudo usermod -a -G www-data ubuntu

Ovviamente, ciò presuppone che il server Web sia in esecuzione come www-data (impostazione predefinita di Homestead) e che l'utente sia ubuntu (è vagabondo se si utilizza Homestead).

Quindi imposti tutte le tue directory su 755 e i tuoi file su 644 ... SET permessi sui file

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

Permessi directory SET

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

Il tuo utente come proprietario

Preferisco possedere tutte le directory e i file (rende il lavoro con tutto molto più semplice), quindi faccio:

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

Quindi do sia a me stesso che al server web le autorizzazioni:

sudo find / path / to / your / laravel / root / directory -type f -exec chmod 664 {} \;    
sudo find / path / to / your / laravel / root / directory -type d -exec chmod 775 {} \;

Quindi concedi al server web i diritti di lettura e scrittura su memoria e cache

Qualunque sia il modo in cui lo configuri, devi dare le autorizzazioni di lettura e scrittura al server web per l'archiviazione, la cache e qualsiasi altra directory che il server web deve caricare o scrivere (a seconda della situazione), quindi esegui i comandi da bashy sopra:

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

Ora sei sicuro e il tuo sito web funziona E puoi lavorare con i file abbastanza facilmente


4
Grande esempio, se non esiste un utente di dati www, utilizzare apache: apache al posto di dati www (su alcune distro)
Denis Solakovic,

53
Penso che la gente fraintenda troppo il anyoneconcetto. La anyonebandiera di Linux indica qualsiasi utente , non qualsiasi persona. Hai ancora bisogno dell'accesso al server.
Marco Aurélio Deleu,

3
@ andreshg112 Il primo www-data è il nome dell'utente e il secondo www-data è il nome del gruppo. Quindi significa che il proprietario è apache e (questo gruppo) apache. Usa www-data: www-data o aggiungi il tuo utente a quel gruppo. (CLI: useradd -G {nome-gruppo} nome utente), e quindi è possibile visualizzare il nome utente: www-gruppo
Denis Solakovic,

2
@fs_tigre Non credo che ci sia molta differenza per la sicurezza ... tranne per il fatto che ci sono due utenti per indovinare le password anziché una, e ovviamente accedo sempre con il mio account utente, quindi se L'ho fatto in modo insicuro (FTP normale e usando una password per esempio) potrebbe compromettere il sito, ma accedo solo con Putty e SSH e quando uso FTP è SFTP, quindi nessun problema. I comandi suggeriti da bashy sono consigliati perché impostano il bit appiccicoso, quindi se il tuo server web crea sottodirectory avranno lo stesso proprietario / permessi del genitore
bgies

3
Nel primo metodo, l'utente non sarebbe ancora in grado di caricare file poiché non hai writeautorizzato il gruppo?
Fahmi,

44

Le autorizzazioni per le cartelle storagee vendordovrebbero rimanere su 775, per ovvi motivi di sicurezza.

Tuttavia, sia il tuo computer che il tuo server Apache devono essere in grado di scrivere in queste cartelle. Es: quando si eseguono comandi simili php artisan, il computer deve scrivere nel file di registro storage.

Tutto quello che devi fare è assegnare la proprietà delle cartelle ad 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

Quindi è necessario aggiungere il computer (a cui fa riferimento username) al gruppo a cui appartiene il server Apache. Così :

sudo usermod -a -G www-data userName

NOTA: il più delle volte groupNameè , www-datama nel tuo caso, sostituirlo con_www


10
+1 Mi piace questo approccio. Ma credo che i chowncomandi dovrebbero includere il flag -R. Inoltre, in laravel 5.1 e 5.2, invece della directory del fornitore, dovresti dare accesso alla directory bootstrap / cache.
Jason Wheeler,

c'è un modo per testare se questo funzionerà bene? Voglio dire se il nuovo file di registro viene creato nella directory di archiviazione / registri che avrebbe le autorizzazioni corrette come posso verificarlo?
Chaudhry Waqas,

20

Ci siamo imbattuti in molti casi limite durante l'impostazione delle autorizzazioni per le applicazioni Laravel. Creiamo un account utente separato ( deploy) per possedere la cartella dell'applicazione Laravel ed eseguire i comandi Laravel dalla CLI, ed eseguiamo il web server in www-data. Un problema che ciò causa è che i file di registro possono essere di proprietà www-datao deploy, a seconda di chi ha scritto per primi nel file di registro, impedendo ovviamente all'altro utente di scrivergli in futuro.

Ho scoperto che l'unica soluzione sana e sicura è usare ACL Linux. L'obiettivo di questa soluzione è:

  1. Per consentire all'utente che possiede / distribuisce l'applicazione l'accesso in lettura e scrittura al codice dell'applicazione Laravel (utilizziamo un utente denominato deploy).
  2. Consentire www-dataall'utente l'accesso in lettura al codice dell'applicazione Laravel, ma non l'accesso in scrittura.
  3. Per impedire ad altri utenti di accedere al codice / ai dati dell'applicazione Laravel.
  4. Per consentire sia l' www-datautente e l'utente dell'applicazione ( deploy) accesso in scrittura alla cartella di archiviazione, indipendentemente da quale utente proprietario del file (in modo che entrambi deploye www-datapuò scrivere lo stesso file di log per esempio).

Realizziamo questo come segue:

  1. Tutti i file all'interno della application/cartella vengono creati con umask predefinito di 0022, il che si traduce in cartelle con drwxr-xr-xautorizzazioni e file -rw-r--r--.
  2. sudo chown -R deploy:deploy application/(o semplicemente distribuisci la tua applicazione come deployutente, che è ciò che facciamo).
  3. chgrp www-data application/per dare al www-datagruppo l'accesso all'applicazione.
  4. chmod 750 application/per consentire deployall'utente di leggere / scrivere, l' www-datautente di sola lettura e rimuovere tutte le autorizzazioni per tutti gli altri utenti.
  5. setfacl -Rdm u:www-data:rwx,u:deploy:rwx application/storage/per impostare le autorizzazioni predefinite per la storage/cartella e tutte le sottocartelle. Eventuali nuove cartelle / file creati nella cartella di archiviazione erediterà queste autorizzazioni ( rwxper entrambi www-datae deploy).
  6. setfacl -Rm u:www-data:rwX,u:deploy:rwX application/storage/ per impostare le autorizzazioni di cui sopra su qualsiasi file / cartella esistente.

15

Modifica le autorizzazioni per la cartella del tuo progetto per abilitare read / write / exec per qualsiasi utente all'interno del gruppo che possiede la directory (che nel tuo caso è _www):

chmod -R 775 /path/to/your/project

Quindi aggiungi il tuo nome utente OS X al _wwwgruppo per consentirgli l'accesso alla directory:

sudo dseditgroup -o edit -a yourusername -t user _www

Quando faccio dseditgroupda Lei forniti, sto ottenendo un errore: Username and password must be provided..
Robo Robok,

Errore mio, devi eseguire quel comando con un utente che disponga delle autorizzazioni appropriate, quindi aggiungi sudoall'inizio.
Bogdan,

Quindi devo cambiare il proprietario di quei file _www:_wwwo myuser:_wwwanche?
Robo Robok,

Puoi lasciarlo _www:_www, perché 775 significa che qualsiasi utente del gruppo _wwwdisporrà delle autorizzazioni complete per leggere / scrivere / uscire in quella cartella e hai appena aggiunto il tuo nome utente a quel gruppo.
Bogdan,

Potresti dirmi una cosa? Cosa significa chown myuser:_www? So che il primo è l'utente e il secondo è il gruppo, ma significa "questo utente E CHIUNQUE DA questo gruppo" o "questo utente MA SOLO SE APPARTIENE a questo gruppo"?
Robo Robok,

8

Come già pubblicato

Tutto quello che devi fare è assegnare la proprietà delle cartelle ad Apache:

ma ho aggiunto -R per il comando chown : sudo chown -R www-data:www-data /path/to/your/project/vendor sudo chown -R www-data:www-data /path/to/your/project/storage


3
Perché dobbiamo autorizzare la directory del fornitore? Lo storage ha senso scrivere su file di registro, ecc. Ma il fornitore? perché?
Ali Haris,

Come scritto sopra in alcuni commenti: "Tuttavia, sia il tuo computer che il tuo 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 di registro in memoria."
Stanislav Potapenko,

Errore su mac: chown: www-data: nome di gruppo illegale
Sunil Kumar


7

La maggior parte delle cartelle dovrebbero essere normali "755" e file "644"

Laravel richiede che alcune cartelle siano scrivibili per l'utente del server web. È possibile utilizzare questo comando su sistemi operativi basati su unix.

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

7

Aggiungi a composer.json

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

Dopo composer install


2
Questa è una cattiva risposta Non dovresti mai aver bisogno di usare 777 per qualsiasi cartella se hai configurato correttamente il server web. L'utilizzo di 777 consente a qualsiasi hacker di caricare un file ed eseguire tale file se sa dove si trova la cartella.
mbozwood,

2
Va bene. Cosa stai offrendo?
Davron Achilov,

E se è così, sarà giusto? chown -R $ UTENTE: www-data storage, chown -R $ USER: www-data bootstrap / cache
Davron Achilov

Vedi la risposta corretta, contiene tutte le informazioni necessarie che puoi assolutamente inserire nel post-aggiornamento :)
mbozwood

6

I documenti di Laravel 5.4 dicono:

Dopo aver installato Laravel, potrebbe essere necessario configurare alcune autorizzazioni. Directory all'interno del storagee le bootstrap/cachedirectory dovrebbero essere scrivibili dal server web o laravel non verranno eseguiti. Se stai usando la macchina virtuale Homestead, queste autorizzazioni dovrebbero essere già impostate.

In questa pagina ci sono molte risposte che menzionano l'uso delle 777autorizzazioni. Non farlo. Ti esporresti agli hacker.

Invece, segui i suggerimenti di altri su come impostare autorizzazioni di 755 (o più restrittive). Potrebbe essere necessario capire per quale utente è in esecuzione l'app eseguendo whoaminel terminale e quindi modificare la proprietà di determinate directory utilizzando chown -R.

Se non si dispone dell'autorizzazione per utilizzare, sudocome molte altre risposte richiedono ...

Il tuo server è probabilmente un host condiviso come Cloudways.

(Nel mio caso, avevo clonato la mia applicazione Laravel in un mio secondo server Cloudways, e non funzionava completamente perché le autorizzazioni delle directory storagee bootstrap/cacheerano incasinate.)

Avevo bisogno di usare:

Cloudways Platform > Server > Application Settings > Reset Permission

Quindi potrei correre php artisan cache:clearnel terminal.


4

La soluzione pubblicata da bgles è perfetta per me in termini di impostazione corretta delle autorizzazioni inizialmente (utilizzo il secondo metodo), ma presenta ancora potenziali problemi per Laravel.

Per impostazione predefinita, Apache creerà file con autorizzazioni 644. Quindi è praticamente tutto nello spazio di archiviazione /. Quindi, se elimini i contenuti di archiviazione / framework / viste, quindi accedi a una pagina tramite Apache scoprirai che la vista cache è stata creata come:

-rw-r--r-- 1 www-data www-data 1005 Dec  6 09:40 969370d7664df9c5206b90cd7c2c79c2

Se esegui "servizio artigianale" e accedi a una pagina diversa, otterrai autorizzazioni diverse poiché CLI PHP si comporta in modo diverso da Apache:

-rw-rw-r-- 1 user     www-data 16191 Dec  6 09:48 2a1683fac0674d6f8b0b54cbc8579f8e

Di per sé questo non è un grosso problema in quanto non lo farai nella produzione. Ma se Apache crea un file che successivamente deve essere scritto dall'utente, fallirà. E questo può valere per i file della cache, le viste memorizzate nella cache e i registri durante la distribuzione utilizzando un utente e un artigiano registrati. Un semplice esempio di "cache artigianale: clear" che non riuscirà a eliminare i file della cache che sono www-data: www-data 644.

Questo può essere parzialmente mitigato eseguendo comandi artigianali come www-data, quindi eseguirai / esegui lo script di tutto come:

sudo -u www-data php artisan cache:clear

Oppure eviterai la noiosità di questo e lo aggiungerai ai tuoi .bash_aliases:

alias art='sudo -u www-data php artisan'

Questo è abbastanza buono e non influisce in alcun modo sulla sicurezza. Ma su macchine di sviluppo, l'esecuzione di script di test e risanamento lo rende ingombrante, a meno che tu non voglia impostare alias per usare 'sudo -u www-data' per eseguire phpunit e tutto il resto con cui controlli le tue build che potrebbe causare la creazione di file.

La soluzione è seguire la seconda parte dei consigli di bgles e aggiungere quanto segue a / etc / apache2 / envvars e riavviare (non ricaricare) Apache:

umask 002

Questo costringerà Apache a creare file come 664 per impostazione predefinita. Di per sé, ciò può presentare un rischio per la sicurezza. Tuttavia, negli ambienti Laravel per lo più discussi qui (Homestead, Vagrant, Ubuntu) il server Web funziona come dati www dell'utente sotto i dati www del gruppo. Pertanto, se non autorizzi arbitrariamente gli utenti a unirsi al gruppo www-data, non dovrebbero esserci rischi aggiuntivi. Se qualcuno riesce a uscire dal server web, ha comunque il livello di accesso ai dati www, quindi nulla va perso (anche se questo non è l'atteggiamento migliore nei confronti della sicurezza). Quindi in produzione è relativamente sicuro e su una macchina di sviluppo per singolo utente non è un problema.

Alla fine, poiché l'utente si trova nel gruppo www-data e tutte le directory che contengono questi file sono g + s (il file viene sempre creato nel gruppo della directory padre), tutto ciò che viene creato dall'utente o da www-data sarà r / w per l'altro.

E questo è l'obiettivo qui.

modificare

Indagando sull'approccio sopra descritto per impostare ulteriormente le autorizzazioni, sembra ancora abbastanza buono, ma alcune modifiche possono aiutare:

Per impostazione predefinita, le directory sono 775 e i file sono 664 e tutti i file hanno il proprietario e il gruppo dell'utente che ha appena installato il framework. Quindi supponiamo che iniziamo da quel punto.

cd /var/www/projectroot
sudo chmod 750 ./
sudo chgrp www-data ./

La prima cosa che facciamo è bloccare l'accesso a tutti gli altri e rendere il gruppo come www-data. Solo il proprietario e i membri dei dati www possono accedere alla directory.

sudo chmod 2775 bootstrap/cache
sudo chgrp -R www-data bootstrap/cache

Per consentire al server web di creare services.json e compiled.php, come suggerito dalla guida ufficiale all'installazione di Laravel. L'impostazione del bit sticky di gruppo significa che questi saranno di proprietà del creatore con un gruppo di dati www.

find storage -type d -exec sudo chmod 2775 {} \;
find storage -type f -exec sudo chmod 664 {} \;
sudo chgrp -R www-data storage

Facciamo la stessa cosa con la cartella di archiviazione per consentire la creazione di file di cache, registro, sessione e visualizzazione. Usiamo find per impostare esplicitamente le autorizzazioni della directory in modo diverso per directory e file. Non è stato necessario farlo in bootstrap / cache in quanto non vi sono (normalmente) sotto-directory.

Potrebbe essere necessario riapplicare eventuali flag eseguibili, eliminare il fornitore / * e reinstallare le dipendenze del compositore per ricreare collegamenti per phpunit et al, ad esempio:

chmod +x .git/hooks/*
rm vendor/*
composer install -o

Questo è tutto. Fatta eccezione per la umask per Apache spiegata sopra, questo è tutto ciò che è necessario senza rendere l'intero projectroot scrivibile dai dati www, che è ciò che accade con altre soluzioni. Quindi è leggermente più sicuro in questo modo in quanto un intruso in esecuzione come www-data ha un accesso in scrittura più limitato.

fine modifica

Modifiche per Systemd

Questo vale per l'uso di php-fpm, ma forse anche per altri.

Il servizio standard di systemd deve essere sovrascritto, umask impostato nel file override.conf e il servizio riavviato:

sudo systemctl edit php7.0-fpm.service
Use:
    [Service]
    UMask=0002
Then:
sudo systemctl daemon-reload
sudo systemctl restart php7.0-fpm.service

3

Questo ha funzionato per me:

cd [..LARAVEL PROJECT ROOT]
sudo find . -type f -exec chmod 644 {} \;
sudo find . -type d -exec chmod 755 {} \;
sudo chmod -R 777 ./storage
sudo chmod -R 777 ./bootstrap/cache/

Cosa fa:

  • Modificare tutte le autorizzazioni per i file su 644
  • Cambia tutte le autorizzazioni per le cartelle su 755
  • Per la cache di archiviazione e bootstrap (cartelle speciali utilizzate da laravel per la creazione e l'esecuzione di file, non disponibili dall'esterno) impostare l'autorizzazione su 777, per qualsiasi cosa all'interno

Nota: forse non puoi, o non hai bisogno, farlo con il prefisso sudo. dipende dalle autorizzazioni dell'utente, dal gruppo, ecc ...


2

Ho deciso di scrivere la mia sceneggiatura per alleviare il dolore della creazione di progetti.

Eseguire quanto segue nella radice del progetto:

wget -qO- https://raw.githubusercontent.com/defaye/bootstrap-laravel/master/bootstrap.sh | sh

Attendi il completamento del bootstrap e sei a posto.

Rivedi lo script prima dell'uso.


2

Ho installato laravel sull'istanza EC2 e ho trascorso 3 giorni per correggere l'errore di autorizzazione e infine risolto. Quindi voglio condividere questa esperienza con un'altra.

  1. problema utente Quando ho effettuato l'accesso all'istanza ec2, il mio nome utente è ec2-user e usergroup è ec2-user. E il sito Web funziona sotto l'utente httpd: apache: apache quindi dovremmo impostare l'autorizzazione per apache.

  2. permesso di cartella e file A. Prima la struttura delle cartelle, è necessario assicurarsi di avere tale struttura di cartelle come questa sotto memoria

    Conservazione

    • struttura
      • nascondiglio
      • sessioni
      • visualizzazioni
    • registri La struttura delle cartelle può essere diversa a seconda della versione di laravel in uso. la mia versione laravel è 5.2 e potresti trovare la struttura appropriata in base alla tua versione.

B. permesso Inizialmente, vedo le istruzioni per impostare 777 in memoria per rimuovere file_put_contents: errore di apertura del flusso non riuscito. Quindi ho impostato l'autorizzazione 777 per l'archiviazione chmod -R 777 archiviazione Ma l'errore non è stato corretto. qui, dovresti considerarne uno: chi scrive i file nella memoria / sessioni e visualizzazioni. Quello non è ec2-user, ma apache. Sì giusto. L'utente "apache" scrive il file (file di sessione, file di visualizzazione compilato) nella sessione e nella cartella di visualizzazione. Quindi dovresti dare ad Apache il permesso di scrivere su queste cartelle. Di default: SELinux dice che la cartella / var / www dovrebbe essere di sola lettura dal deamon di apache.

Quindi, per questo, possiamo impostare selinux come 0: setenforce 0

Questo può risolvere il problema temporalmente, ma questo rende il mysql non funzionante. quindi questa non è una buona soluzione.

È possibile impostare un contesto di lettura / scrittura nella cartella di archiviazione con: (ricordarsi di impostareenforce 1 per testarlo)

chcon -Rt httpd_sys_content_rw_t storage/

Quindi il tuo problema verrà risolto.

  1. e non dimenticare questo aggiornamento del compositore php artisan cache: clear

    Questi comandi saranno utili dopo o prima.

    Spero che ti risparmi tempo. In bocca al lupo. Hacken


Hai provato a chiamare uno script da riga di comando dal server Web? Sto
riscontrando un

0

Ho avuto la seguente configurazione:

  • Nginx (in esecuzione dell'utente: nginx)
  • PHP-FPM

E ha applicato correttamente le autorizzazioni come suggerito da @bgies nella risposta accettata. Il problema nel mio caso era l'utente e il gruppo in esecuzione configurato del php-fpm che era originariamente apache.

Se stai usando NGINX con php-fpm, dovresti aprire il file di configurazione di php-fpm:

nano /etc/php-fpm.d/www.config

E il valore di sostituzione usere groupopzioni con un NGINX è configurato per funzionare con; nel mio caso, entrambi erano nginx:

... ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; RPM: apache Choosed to be able to access some dir as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx ...

Salvalo e riavvia i servizi nginx e php-fpm.


0

Per gli sviluppatori di Laravel, i problemi di directory possono essere un po 'dolorosi. Nella mia applicazione, stavo creando directory al volo e spostando i file in questa directory nel mio ambiente locale con successo. Quindi sul server, ho riscontrato errori durante lo spostamento dei file nella directory appena creata.

Ecco le cose che ho fatto e ottenuto un risultato positivo alla fine.

  1. sudo find /path/to/your/laravel/root/directory -type f -exec chmod 664 {} \;
    sudo find /path/to/your/laravel/root/directory -type d -exec chmod 775 {} \;
  2. chcon -Rt httpd_sys_content_rw_t /path/to/my/file/upload/directory/in/laravel/project/
  3. Durante la creazione della nuova directory al volo, ho usato il comando mkdir($save_path, 0755, true);

Dopo aver apportato tali modifiche sul server di produzione, ho creato con successo nuove directory e spostato i file su di esse.

Infine, se usi File facade in Laravel puoi fare qualcosa del genere: File::makeDirectory($save_path, 0755, true);


-1

Ho trovato una soluzione ancora migliore a questo. È causato dal fatto che php è in esecuzione come un altro utente per impostazione predefinita.

quindi, per risolvere questo, fallo

sudo nano /etc/php/7.0/fpm/pool.d/www.conf

quindi modifica il user = "put user that owns the directories" group = "put user that owns the directories"

poi:

sudo systemctl reload php7.0-fpm


Se il visitatore della pagina web riesce a uscire dal server web, ora avrà i diritti di accesso dell '"utente che possiede le directory". Se quell'utente è www-data, c'è una quantità limitata di danni che può fare, ed è per questo che apache viene eseguito come utente limitato. Se quell'utente non è così limitato, può fare più danni. Se quell'utente ha i diritti sudo, può fare molto più danno.
markdwhite,

È lo stesso affare con Apache. BTW corro nignx come un grande ragazzo ora
Cecil Merrel aka bringrainfire
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.