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 nobodysi, y por lo tanto, agregarlo al grupo nginx no es tan trivial.
Una solución temporal es establecer los permisos de /var/lib/php/sessionto 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?

nobodyusuario 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/sessionseste 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/sessionse 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.inisession.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.confophp-fpm.conf), para que pueda mantener este directorio 700. 2. Usochown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/sessionasí 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 restartLa ubicación de la ruta de sesión PHP se puede encontrar en
/etc/php.inidebajosession.save_path./var/lib/php/sessiones el predeterminadoComando para actualizar la propiedad y el grupo de la carpeta de sesión php
chown -R nginx:nginx /var/lib/php/sessionY 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/sessionsudo chmod -R ug+rw /var/lib/php/sessionschmod 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