Quali autorizzazioni / proprietà impostare nella cartella Sessioni PHP quando si esegue FastCGI / PHP-FPM (come utente "nobody")?


17

Sto riscontrando problemi nell'ottenere un numero di script in esecuzione perché PHP-FPM non può scrivere nella mia cartella di sessione:

"2009/10/01 23:54:07 [errore] 17830 # 0: * 24 FastCGI inviato in stderr:" Avviso PHP:
    Sconosciuto: aperto (/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR)
    non riuscito: autorizzazione negata (13) in Sconosciuto sulla riga 0
Avviso PHP: sconosciuto: impossibile scrivere i dati della sessione (file). Si prega di verificare
    che l'impostazione corrente di session.save_path sia corretta
    (/ var / lib / php / session) in Sconosciuto sulla riga 0 "durante la lettura a monte"

Ovviamente questo è un problema di autorizzazione; Il proprietario / gruppo della cartella della mia sessione è l'utente del server web, NGINX. PHP-FPM funziona come nobodyse, e quindi aggiungerlo al gruppo nginx non è così banale.

Una soluzione temporanea è quello di impostare le autorizzazioni di /var/lib/php/sessional 777- ho la sensazione che non è la "best practice", però.

Qual è la migliore pratica quando è necessario assegnare un demone accesso in scrittura a una cartella, ma è in esecuzione come nobody?

Risposte:


24

I permessi corretti per noi dove

chown -R nobody:nogroup /var/lib/php/session

come php-cgifunziona nobody, anche se NGinx funziona come utentenginx


Nel mio caso non era una questione di proprietà / autorizzazioni. Rimuovere il "3;" da session.save_path = "3; / var / lib / php / sessioni"
John Doe,

1
Ottengo il seguente errore: Gruppo non valido << nobody: nogroup >> :(
Pathros

sono stato in grado di vedere qual è il mio nobodyutente che esegue PHP con questa riga di codice: <?php echo exec('whoami'); ?>(nel mio caso www-data) e dopo che è stato semplice come ho appena scritto chown -R www-data:www-data /var/lib/php/sessionsquesto è un risultato Google sottovalutato in quanto è stata l'unica risposta che ha aiutato io dopo ore di ricerche! Grazie!
Dimitar,

9

Se usi nginx potresti imbatterti in questo quando esegui un aggiornamento del sistema.

A volte quando aggiorni il sistema, il gruppo di /var/lib/php/sessionviene cambiato in apache.

Prova a eseguire sudo chgrp nginx /var/lib/php/*invece di impostare le autorizzazioni su 777, che è una cattiva pratica.

Questo ha funzionato almeno per me.


1
Questo dovrebbe essere contrassegnato come risposta accettata.
Yuda Prawira,

3

Utilizzare la direttiva /etc/php.ini session.save_path .

Una soluzione temporanea è impostare i permessi di / var / lib / php / session su 777 - Ho la sensazione che non sia la "best practice".

"Se lasci questo set in una directory leggibile in tutto il mondo, altri utenti sul server potrebbero essere in grado di dirottare le sessioni ottenendo l'elenco dei file in quella directory."


Scusa, penso che potrei non essere stato chiaro: session.save_path è già impostato su / var / lib / php / session. Il problema è che non riesco a capire quali autorizzazioni e proprietà assegnare alla directory del percorso della sessione per consentire sia a PHP-FPM di scrivere su di essa, sia al sicuro. Avere la directory impostata come proprietario / gruppo "nginx" (il web server che sto eseguendo) e le autorizzazioni 755 non sembrano fare il trucco
Professor Frink

4
1. Usa lo stesso utente: raggruppa per nginx e php-fpm (tramite uno nginx.confo entrambi php-fpm.conf), quindi puoi mantenere questa directory 700. 2. Usa chown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/sessioncosì penso che sia nginx che php-fpm possano usarla
SaveTheRbtz

2
Posso confermare che usando nginx: nobody (o nginx: nogroup in alcune circostanze) funziona. Se è possibile, mi spingerei verso l'opzione 1 di SaveTheRbtz.
Michael Johnson,

3

Ho dovuto creare una cartella con 0700 diritti in / var / lib / php / session per ogni pool php-fpm.

Il proprietario di questa cartella è utente e gruppo dal pool php-fpm.

E / var / lib / php / session ora 0777.

Penso che questo metodo sia il più sicuro. Solo l'utente del pool php-fpm vedrà queste sessioni.


1

Ho avuto lo stesso problema e l'ho risolto. Sono andato a /tmp(ecco dove sono i miei file ses_ *) e li ho cancellati tutti. Dopo tutto è andato tutto bene.

Il più vicino possibile dire che il sistema stava cercando di scrivere su vecchi file bloccati.

Il problema si è verificato dopo che stavo giocando php.ini. Ho perso un paio di anni dalla mia vita ma alla fine ho trovato la soluzione.


1

Il modo corretto dovrebbe cambiare la proprietà della cartella della sessione in nginx. Tuttavia, PHP-FPM non viene eseguito utilizzando l'utente nginx per impostazione predefinita. Utilizza apache per impostazione predefinita.

Detto questo, è necessario modificare l'utente che viene utilizzato da PHP-FPM modificando /etc/php-fpm.d/www.conf.

; 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

Riavvia PHP-FPM e dovresti essere pronto per partire.

service php-fpm restart


PHP posizione percorso sessione può essere trovato in /etc/php.inisotto session.save_path. /var/lib/php/sessionè l'impostazione predefinita.

Comando per aggiornare la proprietà e il gruppo della cartella della sessione php

chown -R nginx:nginx /var/lib/php/session

E dovresti essere bravo ad andare anche con chmod di 700.


1

Directory / var / lib / php / sessioni dovrebbe avere permessi per i bit appiccicosi.

sudo chmod 1773 /var/lib/php/sessions

ls -al /var/lib/php/
drwxr-xr-x  4 root root   .
drwxr-xr-x 51 root root   ..
drwxr-xr-x  3 root root   modules
drwx-wx-wt  2 root root   sessions

0

Basato sulla risposta di @Judder , per farlo funzionare ho dovuto aggiungere il seguente comando per dare le autorizzazioni di lettura e scrittura a nessuno e al gruppo :

chown -R nobody:nogroup /var/lib/php/session

sudo chmod -R ug+rw /var/lib/php/sessions

chmod cambierà le autorizzazioni sulla cartella data
-R applicherà le stesse autorizzazioni alle cartelle e ai file creati all'interno della cartella indicata
u per l'utente
g per il gruppo
r per l'autorizzazione di lettura
w per l'autorizzazione di scrittura

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.