Plesk + Apache + PHP(FastCGI):持续会话权限问题,HTTP / HTTPS 之间冲突

Plesk + Apache + PHP(FastCGI):持续会话权限问题,HTTP / HTTPS 之间冲突

我刚刚将一组网站移至一台全新的服务器,该服务器运行 Apache 2.2.3、PHP 5.3 和 Plesk 10.1.1。我在 PHP 会话中的文件权限方面遇到了问题,这些会话存储在 中/var/lib/php/session

我最初为该文件夹设置了如下权限:

drwxrwx--- 2 apache psacln 8192 Mar 22 23:25 session

这很有效,因为HTTP会话。文件被保存在该文件夹中,并且具有以下权限:

-rw------- 1 client1        psacln 0 Mar 22 23:24 sess_507...
-rw------- 1 client2        psacln 0 Mar 22 23:25 sess_8o1...

但问题是,通过 HTTPS 访问的 PHP 脚本似乎不是由同一个用户运行的client1client2我删除了会话目录中的文件,并通过 HTTPS 访问了登录页面,以查看通过此协议启动时会话是如何保存的:

-rw------- 1 apache         apache 0 Mar 22 23:25 sess_507...

因此,无论出于何种原因,使用 HTTPS 浏览的客户端发起的会话都由 保存apache:apache,而来自 HTTP 客户端的会话则由 保存someclient:psacln

我想要问的是:

  1. 如何避免此会话权限问题?当通过未加密的 HTTP 创建会话并且客户端访问站点的 HTTPS 部分时,会显示权限错误,因为apache:apache尝试访问 创建的会话保存someclient:psacln。反之亦然。
    1. 我可以通过 Plesk 或命令行更改运行 Apache HTTPS 服务器的用户吗?
    2. 如果没有,我可以让 PHP 会话保存rw-rw----权限,然后添加apachepsacln组中吗?
    3. 关于如何解决此问题还有其他建议吗?

答案1

更改您的/etc/php.ini文件:

session.save_path = "0;0660;/var/lib/php/session"

PHP 5.3.5 可能会保存您的会话文件,如果-rw-r--确实如此,那么您需要编辑您的应用程序,仅使用代码start_session()

usermod(0);
start_session();

然后它将以-rw-rw--权限保存会话文件。

您还需要将您的 apache 组更改为 psacln(您的服务器可能以 apache:apache 的身份运行,因为 apache 的某些更新已覆盖配置文件)。

编辑您的httpd.conf

更改自:

user = apache
group = apache

到:

user = apache
group = psacln

现在,如果您从 mod_php 更改为 FastCGI 并返回,则不会与您的会话权限发生冲突。

更改后不要忘记重新启动 Apache 服务器/etc/init.d/httpd restart

如果你使用的是 Debian 发行版,你的守护进程命令将是/etc/init.d/apache restart,而你的配置文件将位于同义文件夹中,如/etc/php/apache/php.ini/etc/apache/httpd.conf/etc/apache/apache.conf

相关内容