J'ai du mal à exécuter un certain nombre de scripts car PHP-FPM ne peut pas écrire dans mon dossier de session:
"2009/10/01 23:54:07 [erreur] 17830 # 0: * 24 FastCGI envoyé dans stderr:" Avertissement PHP: Inconnu: ouvert (/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR) a échoué: autorisation refusée (13) dans Inconnu sur la ligne 0 Avertissement PHP: inconnu: impossible d'écrire les données de session (fichiers). Veuillez vérifier que le paramètre actuel de session.save_path est correct (/ var / lib / php / session) dans Inconnu sur la ligne 0 "lors de la lecture en amont"
Évidemment, c'est un problème de permission; Le propriétaire / groupe de mon dossier de session est l'utilisateur du serveur Web, NGINX. PHP-FPM fonctionne comme nobody
si, et donc l'ajouter au groupe nginx n'est pas si simple.
Une solution temporaire consiste à définir les autorisations d' /var/lib/php/session
à 777
- j'ai un sentiment qui n'est pas la « meilleure pratique » bien.
Quelle est la meilleure pratique lorsque vous devez attribuer un accès en écriture à un démon dans un dossier, mais qu'il s'exécute en tant que nobody
?
nobody
utilisateur qui exécute php avec cette ligne de code:<?php echo exec('whoami'); ?>
(dans mon cas www-data) et après cela a été simple comme je viens de l'écrire,chown -R www-data:www-data /var/lib/php/sessions
c'est un résultat google sous-estimé car c'était la seule réponse qui a aidé moi après des heures de recherche! Merci!Si vous utilisez nginx, vous pourriez rencontrer cela lors de l'exécution d'une mise à jour du système.
Parfois, lorsque vous mettez à jour le système, le groupe de
/var/lib/php/session
devient Apache.Essayez d'exécuter
sudo chgrp nginx /var/lib/php/*
au lieu de définir des autorisations sur 777, ce qui est une mauvaise pratique.Cela a fonctionné pour moi au moins.
la source
Utilisez la directive
/etc/php.ini
session.save_path ."Si vous laissez cet ensemble dans un répertoire lisible par le monde, les autres utilisateurs du serveur peuvent détourner des sessions en obtenant la liste des fichiers dans ce répertoire."
la source
nginx.conf
ou l' autrephp-fpm.conf
), afin que vous puissiez conserver ce répertoire 700. 2. Utilisezchown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/session
donc je pense que nginx et php-fpm peuvent l'utiliserJ'ai dû créer un dossier avec 0700 droits dans / var / lib / php / session pour chaque pool php-fpm.
Le propriétaire de ce dossier est l'utilisateur et le groupe du pool php-fpm.
Et / var / lib / php / session maintenant 0777.
Je pense que cette méthode est la plus sûre. Seul l'utilisateur du pool php-fpm verra ces sessions.
la source
J'ai eu le même problème et je l'ai résolu. Je suis allé
/tmp
(c'est là que se trouvent mes fichiers ses_ *) et je les ai tous supprimés. Après cela, tout allait bien.Aussi près que possible, le système essayait d'écrire sur d'anciens fichiers verrouillés.
Le problème est survenu après avoir joué avec
php.ini
. J'ai perdu quelques années de ma vie mais j'ai finalement trouvé la solution.la source
La bonne façon devrait être de changer la propriété du dossier de session en nginx. Cependant, PHP-FPM ne s'exécute pas en utilisant l'utilisateur nginx par défaut. Il utilise apache par défaut.
Cela dit, vous devez modifier l'utilisateur utilisé par PHP-FPM en le modifiant
/etc/php-fpm.d/www.conf
.Redémarrez PHP-FPM et vous devriez être prêt à partir.
service php-fpm restart
L'emplacement du chemin de session PHP se trouve
/etc/php.ini
soussession.save_path
./var/lib/php/session
est la valeur par défaut.Commande pour mettre à jour la propriété et le groupe du dossier de session php
chown -R nginx:nginx /var/lib/php/session
Et vous devriez être bon pour aller même avec chmod de
700
.la source
Le répertoire / var / lib / php / sessions doit avoir des autorisations de bit collant.
la source
Sur la base de la réponse de @Judder , pour le faire fonctionner, j'ai dû ajouter la commande suivante pour donner des autorisations de lecture et d' écriture à personne et à aucun groupe :
chown -R nobody:nogroup /var/lib/php/session
sudo chmod -R ug+rw /var/lib/php/sessions
chmod changera les autorisations sur le dossier donné
-R appliquera les mêmes autorisations aux dossiers et fichiers créés dans le dossier donné
u pour l'utilisateur
g pour le groupe
r pour l'autorisation de lecture
w pour l'autorisation d'écriture
la source