在CentOS 7上使用Apache / Httpd运行Perl CGI脚本

我的CGI Perl脚本CentOS 7没有正确运行,它们显示为纯文本或者出现服务器错误。

我一直把我的脚本放入默认的/var/www/cgi-bin目录中,没有运气。

我试图把CGI脚本放到/var/www/html/another-dir但是它们只是以纯文本forms出现。

这是如何让CGI Perl脚本在CentOS 7上正确执行。

我在这里离开这里,因为互联网上的很多资源似乎并没有把步骤结合起来,让我这样的人很困惑。

总之这是需要做的。

  1. 安装软件。
  2. 创build您的testingCGI文件。
  3. 确保CGI模块已加载。 在httpd.conf
  4. 更改httpd.conf的目录设置。
  5. 更改权限以允许CGI执行。

安装和configuration软件

 sudo yum update sudo yum install httpd sudo yum install perl perl-CGI sudo systemctl start httpd.service sudo systemctl enable httpd.service 

创build您的testingCGI文件

即使按照这些步骤完成,我从来没有在/var/www/cgi-bin获得CGI脚本来加载,而无需修改httpd.conf的web根目录。 相反,我决定只是在另一个目录中激活CGI。

在我的服务器上,我想要web根html来保存我的CGI文件。 这是/var/www/html/hello.cgi

 #!/usr/bin/perl print "Content-type: text/html\n\n"; # This is mandatory. print "<h2>Hello world!</h2>"; 

确保CGI模块已加载。 httpd.conf

您可以通过命令轻松检查。

 grep -n "LoadModule" /etc/httpd/conf/httpd.conf 

我可以看到没有指定CGI模块,我通过以下方法确认了它们在模块文件夹中的存在:

 find /etc/httpd/modules/ -iname "*cgi*" 

这是我之后的一个:

 /etc/httpd/modules/mod_cgi.so 

我们将其添加到/etc/httpd/conf/httpd.conf文件中:

 LoadModule cgi_module modules/mod_cgi.so 

我相信你需要在Ubuntu中以不同的方式加载模块 ,记住这一点。

更改httpd.conf的目录设置

在重新启动httpd之前,我们必须在/etc/httpd/conf/httpd.conf更改一个东西:

 <Directory "var/www/html"> Options +ExecCGI AddHandler cgi-script .cgi .pl </Directory> 

根据许多Google,你可能还必须修改httpd.conf文件的这一部分,以便它指向与上面"var/www/html"相同的目录:

 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 

我没有修改我的,这似乎没有什么差别。

更改权限以允许CGI执行

而这一个让我卡住了很多! 不要忽视这个!

您需要告诉您的服务器这些CGI脚本被允许作为程序执行。

 chmod 705 *.cgi 

或者您可以定位个别的CGI脚本。

 chmod 705 hello.cgi 

( 网上有些人说, chmod 755777也可能工作。)

现在重新启动httpd如下所示:

 sudo systemctl restart httpd.service 

在这一点上,我的CGI脚本正确地呈现到HTML中。

它们是从Web根目录服务的: http://<IP>/hello.cgi

请随时添加任何可能有助于他人的信息。

(网上有些人说,chmod 755和777也可能工作。)

如果您与其他人共享服务器,并且通常由于可能的攻击,您几乎肯定不会使用755,705或777中的/任何/这些会让任何其他用户login到您的服务器上执行您的脚本与他们select的任何参数。 相反,确保你的脚本和它上面的所有目录有nginx,apache或者其他用户/组运行你的web服务器,并且应该执行你的脚本,作为所有者或者组(使用命令chown或者chgrp)。 然后将chmod中的第三位设置为0(你不应该使用比750更宽松的东西),因为服务器上的其他用户(除了你和nginx / apache,无论是入侵者还是合法用户)都有/没有/业务从shell执行,读取或修改脚本。

你可以阅读Linux文件的权限,例如https://www.digitalocean.com/community/tutorials/linux-permissions-basics-and-how-to-use-umask-on-a-vps#octal或https&#xFF1A; //www.digitalocean.com/community/tutorials/an-introduction-to-linux-permissions等

祝你好运!

编辑:这是一个用户小鸡在1月28日写的解释 – 良好的调用,在教程中的权限太宽容。