Tengo problemas para ejecutar una serie de scripts porque PHP-FPM no puede escribir en mi carpeta de sesión:
"2009/10/01 23:54:07 [error] 17830 # 0: * 24 FastCGI enviado en stderr:" Advertencia PHP: Desconocido: abierto (/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR) falló: Permiso denegado (13) en Desconocido en la línea 0 Advertencia de PHP: Desconocido: Error al escribir los datos de la sesión (archivos). Por favor verificar que la configuración actual de session.save_path es correcta (/ var / lib / php / session) en Desconocido en la línea 0 "mientras lee en sentido ascendente"
Obviamente este es un problema de permiso; El propietario / grupo de mi carpeta de sesión es el usuario del servidor web, NGINX. PHP-FPM se ejecuta como nobody
si, y por lo tanto, agregarlo al grupo nginx no es tan trivial.
Una solución temporal es establecer los permisos de /var/lib/php/session
to 777
, aunque tengo la sensación de que esa no es la "mejor práctica".
¿Cuál es la mejor práctica cuando necesita asignar un acceso de escritura de daemon a una carpeta, pero se ejecuta como nobody
?
nobody
usuario que ejecuta php con esta línea de código:<?php echo exec('whoami'); ?>
(en mi caso, www-data) y después de eso fue simple como acabo de escribir,chown -R www-data:www-data /var/lib/php/sessions
este es un resultado de google subestimado, ya que fue la única respuesta que ayudó yo después de horas de búsqueda! ¡Gracias!Si usa nginx , podría encontrarse con esto cuando ejecute una actualización del sistema.
A veces, cuando actualiza el sistema, el grupo de
/var/lib/php/session
se cambia a apache.Intente ejecutar en
sudo chgrp nginx /var/lib/php/*
lugar de establecer permisos en 777, que es una mala práctica.Eso funcionó para mí al menos.
fuente
Utilice la directiva
/etc/php.ini
session.save_path ."Si deja este conjunto en un directorio legible a nivel mundial, otros usuarios en el servidor podrán secuestrar sesiones obteniendo la lista de archivos en ese directorio".
fuente
nginx.conf
ophp-fpm.conf
), para que pueda mantener este directorio 700. 2. Usochown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/session
así que creo que tanto nginx y php-FPM pueden usarloTuve que crear una carpeta con derechos 0700 en / var / lib / php / session para cada grupo php-fpm.
El propietario de esta carpeta es el usuario y el grupo del grupo php-fpm.
Y / var / lib / php / session ahora 0777.
Creo que este método es más seguro. Solo el usuario del grupo php-fpm verá estas sesiones.
fuente
Tuve el mismo problema y lo resolví. Fui a
/tmp
(ahí es donde están mis archivos ses_ *) y los eliminé todos. Después de eso todo estuvo bien.Tan cerca como pude ver, el sistema estaba tratando de escribir en viejos archivos bloqueados.
El problema ocurrió después de que estaba jugando
php.ini
. Perdí un par de años de mi vida, pero finalmente encontré la solución.fuente
La forma correcta debería ser cambiar la propiedad de la carpeta de sesión a nginx. Sin embargo, PHP-FPM no se ejecuta utilizando el usuario nginx de forma predeterminada. Utiliza apache por defecto.
Dicho esto, debe cambiar el usuario que usa PHP-FPM mediante la edición
/etc/php-fpm.d/www.conf
.Reinicie PHP-FPM y debería estar listo para comenzar.
service php-fpm restart
La ubicación de la ruta de sesión PHP se puede encontrar en
/etc/php.ini
debajosession.save_path
./var/lib/php/session
es el predeterminadoComando para actualizar la propiedad y el grupo de la carpeta de sesión php
chown -R nginx:nginx /var/lib/php/session
Y debería ser bueno para ir incluso con chmod de
700
.fuente
El directorio / var / lib / php / sessions debe tener permisos de bits fijos.
fuente
Basado en la respuesta de @Judder , para que funcione tuve que agregar el siguiente comando para dar permisos de lectura y escritura a nadie y nogroup :
chown -R nobody:nogroup /var/lib/php/session
sudo chmod -R ug+rw /var/lib/php/sessions
chmod cambiará los permisos en la carpeta dada
-R aplicará los mismos permisos a las carpetas y archivos creados dentro de la carpeta dada
u para el usuario
g para el grupo
r para el permiso de lectura
w para el permiso de escritura
fuente