我正在尝试将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/'});
当我收到权限被拒绝错误时,我的问题就出现了
[2011年12月2日星期五16:52:44] upload.cgi:/ var / lib / php / session / sess_417ar7qsh4sh853gqs3bj454i5:/var/www/html/xxx/upload.cgi第22行允许拒绝,引用: ..
第22行是上述代码中的PHP::Session->new
行。
我的httpd服务器作为用户apache运行,而cgi脚本由apache拥有,/var/lib/php/session/
中的所有sesssion文件也是如此,所以我想知道为什么CGI脚本不能读取会话文件
我在网上看到一个人使用LWP作为解决方法,但这不是我的偏好,因为我觉得这对于我缺少的权限是愚蠢的。
更新:添加了信息 - 这里是会话文件 - 正如您所看到的,会话文件存在并由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
答案 0 :(得分:2)
问题确实是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
答案 1 :(得分:0)
...所以我想知道为什么CGI脚本不能读取 会话文件。
在documentation中说:
的save_path
会话文件存储的目录路径。默认值:/ tmp。
我不认为你和这个模块正在考虑相同的会话文件。