当我尝试在Apache服务器上执行基本Perl脚本时出现此错误。在我的浏览器中,我输入localhost/cgi-bin/first.pl
,我收到此错误:
(13)权限被拒绝:'/usr/lib/cgi-bin/first.pl'的执行失败
这是我的perl脚本:
#!/usr/lib/cgi-bin
print "Content-type: text/html\n\n";
print "Hello, World.";
这是sites-available
文件夹中的默认文件。如您所见,/usr/lib/cgi-bin
中的每个文件都应该被识别为CGI文件。而且,/usr/lib/cgi-bin
正好是first.pl
所在的位置。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AddHandler cgi-script .cgi .py
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
另外,我做过chmod a+x first.pl
。
答案 0 :(得分:1)
您收到此错误是因为shebang行(脚本的第一行,以#!
开头)指定了为执行脚本而启动的解释器。因此失败的是将/usr/lib/cgi-bin
作为可执行文件启动。
替换
#!/usr/lib/cgi-bin
与
#!/usr/bin/perl
如果仍然不起作用,一种可能性是perl
处于无意义的位置,您可以尝试
#!/usr/bin/env perl
一个建议是,如果你可以在你的脚本所在的机器上使用shell,那么就是尝试直接执行它。如果你这样做了,你会看到一个稍微更具解释性的信息&#34;糟糕的翻译:权限被拒绝&#34;。
答案 1 :(得分:0)
同时检查您的权限/所有者信息。
查看您发布的apache conf,您需要更改脚本以具有.cgi扩展名或将perl扩展名添加到AddHandler。你提供的只列出了python扩展名。
答案 2 :(得分:0)
我在git的http / cgi包装器中遇到了这个问题。
对我来说,问题是mod_cgid和/ var / run上的权限阻止cgid附加到用于cgi脚本的套接字上。
比较隐秘的线索是
[Fri Nov 27 14:39:02.506675 2020] [cgid:error] [pid 589971:tid 140310986311424] (13)Permission denied: [client 172.16.90.189:50018] AH01257: unable to connect to cgi daemon after multiple tries: /usr/lib/git-core/git-http-backend
但是www-data可以运行git-http-backend cgi可执行文件
我通过创建具有权限www_data:www_data 770的/ apache_run文件夹解决了此问题 并将以下内容添加到apache2.conf
ScriptSock /apache2_run/cgid.sock