Perl CGI PHP会话权限被拒绝


Perl CGI PHP Session Permission Denied

我试图将PHP会话变量转换为Perl CGI脚本。我已经得到了下面的perl代码,它似乎在让我的PHPSESSID工作,然后我传递给PHP::Session与存储会话文件的目录一起。

my $cookie_name='PHPSESSID'; 
my $sess_query = new CGI;
my $session_name = $sess_query->cookie($cookie_name);
my $session = PHP::Session->new($session_name,{save_path =>'/var/lib/php/session/'});

我的问题发生时,我得到一个权限拒绝错误

[Fri Dec 2 16:52:44 2011] upload.cgi:/var/lib/php/session/sess_417ar7qsh4sh853gqs3bj454i5: Permission denied at/var/www/html/xxx/upload.cgi line 22, referer:…

第22行是上面代码中的PHP::Session->new行。

我的httpd服务器运行作为用户apache和cgi脚本是apache所有的会话文件在/var/lib/php/session/所以我想知道为什么不能cgi脚本能够读取会话文件。

我在网上读到一个人使用LWP作为解决方案,但这不是我的偏好,因为我觉得这是一些愚蠢的权限,我错过了。


UPDATE:添加信息-这里是会话文件-你可以看到会话文件存在,并由apache拥有,但CGI perl脚本不能读取这些:

-rw-------. 1 apache apache   0 Dec  2 16:58 /var/lib/php/session/sess_417ar7qsh4sh853gqs3bj454i5
-rw-------. 1 apache apache 126 Dec  2 16:58 /var/lib/php/session/sess_f39ot5ul3bu55uu7d1rg3aqq02

问题确实是SELinux…在本例中,不是1个AVC警报,而是5个警报——一个警报对应于读取目录中文件所需的每个文件I/O操作。它们按顺序触发,但可以使用下面的{}语法。

这个可以通过:

allow httpd_sys_script_t httpd_var_run_t: dir search;
allow httpd_sys_script_t httpd_var_run_t: file { lock read ioctl open getattr};

谈论使用皮带和吊带!

谢谢你的帮助!

R

…所以我想知道为什么CGI脚本不能读取会话文件。

在文档中说:

save_path

    会话文件存储目录的路径。默认值:/tmp .

我不认为你和这个模块考虑的是同一个会话文件