运行 FastCGI / PHP-FPM(以用户“nobody”身份)时,在 PHP 会话文件夹上设置什么权限/所有权?

运行 FastCGI / PHP-FPM(以用户“nobody”身份)时,在 PHP 会话文件夹上设置什么权限/所有权?

由于 PHP-FPM 无法写入我的会话文件夹,因此我无法运行许多脚本:

“2009/10/01 23:54:07 [错误] 17830#0: *24 FastCGI 在 stderr 中发送:“PHP 警告:
    未知:打开(/var/lib/php/session/sess_cskfq4godj4ka2a637i5lq41o5,O_RDWR)
    失败:权限被拒绝(13),位于第 0 行的未知位置
PHP 警告:未知:无法写入会话数据(文件)。请验证
    session.save_path 的当前设置是否正确
    (/var/lib/php/session)在第 0 行“未知”,读取上游时”

显然这是一个权限问题;我的会话文件夹的所有者/组是 Web 服务器的用户 NGINX。PHP-FPM 的运行方式与nobody此类似,因此将其添加到 nginx 组并非易事。

一个临时的解决方案是设置权限/var/lib/php/session-777但我觉得这不是“最佳实践”。

当您需要为文件夹分配守护进程的写权限但它以 的身份运行时,最佳做法是什么nobody

答案1

对我们来说正确的权限

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

asphp-cgi以 身份运行nobody,尽管 NGinx 以用户身份运行nginx

答案2

如果你使用nginx运行系统更新时您可能会遇到这种情况。

有时当你更新系统时,的组/var/lib/php/session会变成apache。

尝试执行,sudo chgrp nginx /var/lib/php/*而不是将权限设置为 777,这是一种不好的做法。

至少这对我是有用的。

答案3

使用/etc/php.ini session.save_path指示。

一个临时的解决方案是将 /var/lib/php/session 的权限设置为 777 - 但我觉得这不是“最佳实践”。

“如果将此设置保留为全世界可读的目录,则服务器上的其他用户可能能够通过获取该目录中的文件列表来劫持会话。”

答案4

正确的方法应该是将会话文件夹的所有权更改为 nginx。但是,PHP-FPM 默认不使用 nginx 用户运行。它默认使用 apache。

话虽如此,您必须通过编辑来更改 PHP-FPM 使用的用户/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

重新启动 PHP-FPM,一切就绪了。

service php-fpm restart


PHP 会话路径位置可以在/etc/php.ini下找到session.save_path/var/lib/php/session是默认值。

更新 php 会话文件夹的所有权和组的命令

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

即使使用 chmod ,您也应该可以顺利进行700

相关内容