我如何设置会话文件的默认权限,以便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实际上是试图将文件设置为660但umask不会允许它)。
你只需要编辑/添加:
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"