运行 FastCGI/PHP-FPM(作为用户“nobody”)时,在 PHP Sessions 文件夹上设置什么权限/所有权?

Pro*_*ink 19 security linux php centos

我在运行多个脚本时遇到问题,因为 PHP-FPM 无法写入我的会话文件夹:

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

显然这是一个许可问题;我的会话文件夹的所有者/组是网络服务器的用户 NGINX。PHP-FPM 就像运行一样nobody,因此将它添加到 nginx 组并不是那么简单。

一个临时的解决办法是设置的权限/var/lib/php/session777-我有一种感觉,这不是“最佳实践”虽然。

当您需要为文件夹分配守护程序写入权限但它作为 运行时,最佳实践是nobody什么?

小智 25

我们的正确权限在哪里

chown -R nobody:nogroup /var/lib/php/session
Run Code Online (Sandbox Code Playgroud)

as running php-cgias nobody,即使 NGinx 以用户身份运行nginx

  • 我收到以下错误:无效组 <<nobody:nogroup>> :( (2认同)

小智 10

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

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

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

那至少对我有用。


Sav*_*btz 3

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

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

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

  • 1. nginx 和 php-fpm 使用相同的用户:组(通过 `nginx.conf` 或 `php-fpm.conf`),因此您可以保留此目录 700。 2. 使用 `chown -R nginx:nobody / var/lib/php/session && chmod -R 770 /var/lib/php/session` 所以我认为 nginx 和 php-fpm 都可以使用它 (4认同)
  • 我可以确认使用 nginx:nobody (或在某些情况下 nginx:nogroup)有效。如果可能的话,我会倾向于 SaveTheRbtz 的选项 1。 (2认同)