我如何设置会话文件的默认权限,以便 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"