设置会话文件的默认权限

我如何设置会话文件的默认权限,以便Apache-php进程和一些其他用户的php进程可以rw他们呢? 会话是由一些其他用户的PHP进程创build的,之后,Apache的PHP进程应该能够读取和写入。

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

服务器是我自己的,所以没有必要为了安全的原因避免这种情况。

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

因为第一个问题是:为什么你需要这个,我首先回答:我已经在服务器上构build了几个suphp的站点,逻辑是build立在这个,所以有几十个session_start()和所有php-进程是由某个特定用户拥有的。 我有一个getimage.php,加载图像,在一些页面上可以有几十或几百个缩略图在同一页(我想这样!)。 尽pipe我有100M的互联网,但由于每次调用getimage.php,页面加载速度都很慢,新的php进程已经启动。 getimage.php使用会话来限制用户访问特定的图像。 我testing了为php创build一个Apache处理程序,并为此使用不同的文件扩展名:getimage.apachephp。 加速是巨大的! 但问题是,我已经手动chmod会话文件,以允许apache-php进程访问会话文件。 而且我认为,如果chmod可以在每个会话文件创build时自动生成,那么这个过程就变得更有意义了。


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

 session_save_path( “0; 666; /path/到/ sessfile”);
的umask(0);
在session_start();

或者,如果你想避免666并使用更安全的660,则apache-user和suphp-user必须属于同一个组,例如。 web和会话之后创build将创build的会话文件组更改为web 。 为了简单,我select了666。

最简单的解决scheme是在PHP中更改会话处理程序,以使用数据库而不是文件。 在互联网上有一些这样的例子 。

我知道这是个老问题

我相信你仍然需要为apache用户设置umask 。 (即新的save_path实际上是试图将文件设置为660umask不会允许它)。

你只需要编辑/添加:

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

然后重新启动服务(优雅重新加载将无法正常工作)。

 service httpd restart 

关于save_pathvariables,我没有在运行时做,但我改变了php.ini ,增加:

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