【发布时间】:2015-01-22 19:50:42
【问题描述】:
我有一个由其他人编写的 perl cgi 脚本,我试图在没有真正理解它的情况下进行维护。从 apache 运行的脚本中的以下代码应该从文件中读取字符串,但它会因权限被拒绝错误而失败。
这是在带有 perl-5.18.4 和 apache-2.4.10 的 fedora20 系统上。
$changepass_dir 的值是 /var/changepass_temp,它归 apache.apache 所有。如果我su 给apache 用户,我可以读取/var/changepass_temp 中的$value{'username'}.fail 文件就好了。
但是,当直接从 apache 运行时,它会打印 OOPs /var/changepass_temp user1 -- Permission denied。
if(-e "$changepass_dir/$value{'username'}\.fail"){
&login_fail($value{'username'},$value{'ip'});
open(IN,"$changepass_dir/$value{'username'}\.fail") || print ("OOPs $changepass_dir $value{'username'} -- $!");
my $message = join('',<IN>);
unlink("$changepass_dir/$value{'username'}.fail");
&print_error($message);
last;
}
整个脚本长达数百行,所以我认为发布整个内容不合适。希望这里有足够的信息来确定为什么这是一个问题?
谢谢, 亚历克斯
【问题讨论】:
-
我还要提一下 selinux 目前已禁用。
-
我还应该提到apache产生的错误消息是:
[Thu Jan 22 00:18:56.261500 2015] [cgi:error] [pid 569] [client 68.195.193.42:57097] AH01215: [Thu Jan 22 00:18:56 2015] changepass.cgi: readline() on closed filehandle IN at /var/www/mail.example.com-443/html/changepass.cgi line 395., referer: https://webstage.example.com/changepass.cgi