简单的 cgi 脚本因权限被拒绝错误而失败

Simple cgi script fails with permission denied error

Perl CGI 脚本失败

Can't locate /home/testdir/first.pl:  /home/testdir/first.pl:  
Permission denied at /var/www/cgi-bin/first.cgi line 2.

End of script output before headers: first.cgi  in /etc/httpd/logs/error_log

这是一个装有 apache 2.4 的 rhel8 系统

我试过将 first.pl 移动到不同的位置并修改 first.cgi 以指向 first.plfirst.cgi 如果我将 first.pl 放在 /var/www 中而不是 /home/testdir/var 或其他目录

中则执行

httpd.conf 中,我将 /home/testdir/ 的权限设置为与 /var/www 相同的权限,如下所示,并重新启动了 apache

<Directory "/home/testdir">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

出于沮丧,我随后将 /var/www 的权限更改为 Require all denied 并重新启动了 apache。 first.cgi 仍然成功 运行 first.pl 当我将它指向 /var/www 并且权限更改为 Require all denied.

我也禁用 suexec 并在将 first.cgi 指向 /home/testdir

时收到相同的错误

first.pl的权限在/home/testdir/var/www中都是755,用户和组都是root。

hometestdirvarwww的权限都是755,用户和组都是root

first.cgi:

#!/usr/bin/perl
require '/home/testdir/first.pl';
test();

first.pl:

#!/usr/bin/perl
sub test{
    print "Content-type: text/html\n\n";
    print "Hello, World.";
}
first;

脚本应显示 "Hello, World"。在网页上。相反,它显示:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Dave Mitchell 的评论是正确的。在命令行输入sudo setenforce permissive后,脚本运行正常