设置会话文件的默认权限

设置会话文件的默认权限

我如何设置会话文件的默认权限,以便 apache-php-process 和 some-other-user's-php-process 都可以读写它们?会话由 some-other-user's-php-process 创建,之后 apache-php-process 应该能够读取和写入它。

现在会话文件的默认权限是 600。它应该是 660 或 666。我可以在哪里以及如何设置此权限(例如 httpd.cond 或 php.ini)?这样就不需要每次在 session_start() 之后都使用 chmod。

服务器是我自己的,因此无需出于安全原因避免这种情况。

Apache版本是2.2.15,php是5.3.3,服务器是Centos6 64位。

因为第一个问题是:你为什么需要这个,所以我首先回答这个问题:我在服务器上用 suphp 建立了几个站点,逻辑就是建立在此之上的,所以有几十次对 session_start() 的调用,所有的 php 进程都归某个特定用户所有。我有一个 getimage.php,它加载图像,在某些页面中,同一页面上可能有几十或几百个缩略图(我想要这种方式!)。虽然我有 100M 的互联网,但是页面加载缓慢,因为每次调用 getimage.php 都会启动新的 php 进程。getimage.php 使用会话来限制用户对特定图像的访问。我测试过为 php 创建一个 Apache 处理程序,并为此使用不同的文件扩展名:getimage.apachephp。速度提升非常大!但问题是我必须手动 chmod 会话文件以允许 apache-php 进程访问会话文件。我想如果可以在每次创建会话文件时自动进行 chmod,那么这个过程就会变得更有意义。


编辑:一个可能的解决方案是使用

session_save_path("0;666;/path/to/sessfile");
umask(0);
会话开始();

或者,如果您想避免使用 666 并使用更安全的 660,那么 apache-user 和 suphp-user 都必须属于同一组,例如。web并且在创建会话后将创建的会话文件的组更改为web。为简单起见,我选择了 666。

答案1

我知道这是一个老问题......

我相信您仍然必须umask为 apache 用户设置。(即,新用户save_path实际上是试图将文件设置为660,但umask不允许这样做)。

您只需编辑/添加:

echo "umask 0002" >> /etc/apache2/envvars  (Debian)
echo "umask 0002" >> /etc/sysconfig/httpd  (CentOS)

然后重新开始该服务(正常重新加载将不起作用)。

service httpd restart

关于save_path变量,我没有在运行时这样做,但我改变了php.ini,并添加:

session.save_path = "0;660;/var/lib/php5"

答案2

最简单的解决方案是将 PHP 中的会话处理程序更改为使用数据库而不是文件。一些例子 可在互联网上查阅

相关内容