在运行FastCGI / PHP-FPM(以“ nobody”用户身份)时,要在PHP Sessions文件夹上设置哪些权限/所有权?


17

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

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

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

暂时的解决方案是将的权限设置/var/lib/php/session777-虽然我觉得这不是“最佳实践”。

需要为文件夹分配守护程序写访问权但运行方式为的最佳实践是nobody什么?

Answers:


24

我们的正确权限在哪里

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

与一样php-cgi运行nobody,即使NGinx以用户身份运行nginx


就我而言,这不是所有权/权限的问题。删除“ 3;” 来自session.save_path =“ 3; / var / lib / php / sessions”
John Doe

1
我收到以下错误:无效的组<< nobody:nogroup >> :(
Pathros

我能够看到哪个nobody用户使用以下代码行运行php :(<?php echo exec('whoami'); ?>在我的情况下为www-data),在此之后就很简单了,因为chown -R www-data:www-data /var/lib/php/sessions这是被低估的google结果,因为它是唯一的答案,经过数小时的搜寻后我!谢谢!
迪米塔尔'18

9

如果使用nginx,则在运行系统更新时可能会遇到此问题。

有时,当您更新系统时,的组/var/lib/php/session更改为apache。

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

至少对我有用。


1
这应该标记为已接受的答案。
Yuda Prawira

3

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

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

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


抱歉,我想可能还不清楚:session.save_path已经设置为/ var / lib / php / session。问题是我无法弄清楚分配给会话路径目录的权限和所有权是为了使PHP-FPM能够对其进行写入并使其安全。将目录设置为所有者/组“ nginx”(我正在运行的Web服务器)和权限755似乎并没有解决问题
Frink教授

4
1.对nginx和php-fpm使用相同的user:group(通过nginx.confphp-fpm.conf),因此您可以保留该目录700。2.使用chown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/session,我认为nginx和php-fpm都可以使用它
SaveTheRbtz

2
我可以确认使用nginx:nobody(或在某些情况下为nginx:nogroup)有效。如果可能的话,我会倾向于SaveTheRbtz的选项1。
迈克尔·约翰逊

3

我必须为每个php-fpm池在/ var / lib / php / session中创建具有0700权限的文件夹。

此文件夹的所有者是php-fpm池中的用户和组。

并且/ var / lib / php / session现在为0777。

我认为这种方法最安全。只有php-fpm池用户才能看到此会话。


1

我有同样的问题,我解决了。我去了/tmp(那是我的ses_ *文件所在的地方),并全部删除了它们。之后一切都很好。

据我所知,系统正在尝试写旧的锁定文件。

我玩过后出现了问题php.ini。我一生中失去了几年,但最终找到了解决方案。


1

正确的方法应该是将会话文件夹的所有权更改为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


1

目录/ var / lib / php / sessions应该具有粘性位权限。

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

基于@Judder答案,使它工作,我不得不添加下面的命令授予读取写入权限无人nogroup

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

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

CHMOD将改变给定的权限文件夹
-R将采用相同的权限创建文件夹和文件内的给定文件夹
ü用户
用于基
- [R为读许可
瓦特写权限

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.