![如何在 Ubuntu 中配置 CGI?](https://linux22.com/image/992183/%E5%A6%82%E4%BD%95%E5%9C%A8%20Ubuntu%20%E4%B8%AD%E9%85%8D%E7%BD%AE%20CGI%EF%BC%9F.png)
我对 Ubuntu 中的 Apache 还很陌生。我最近在 Ubuntu 上安装了 Apache2,并尝试配置 CGI。我在 apache2.conf 文件中添加了以下几行:
ScriptAlias /cgi-bin/ /home/router/cgi-bin/
<Directory /home/router/cgi-bin/>
Options ExecCGI
AddHandler cgi-script cgi pl
</Directory>
我保存并重新启动了 apache2,但是当我在浏览器中输入以下内容时:
http://192.168.1.1/cgi-bin/file1.cgi
我收到以下错误:
You don't have permission to access /cgi-bin/file1.cgi on this server.
答案1
首先,我会不要从你的/home/
目录运行 CGI。对于 Web 服务器,没有设置权限,有时会导致一些麻烦,包括权限配置和其他问题。
其次,我建议*创建一个专用目录/var/www/
(例如cgi-bin
),将 CGI 脚本放在其中,并在 Apache 配置中使用该目录。
sudo mkdir -p /var/www/cgi-bin/
sudo chown $USER:www-data /var/www/cgi-bin/
上述命令将创建目录并设置权限,以便您可以写入该目录,并且 Web 服务器可以读取该目录并有权在目录内执行操作。
从那里,将您的 CGI 放在那里,确保它以类似的方式拥有(sudo chown $USER:www-data /var/www/cgi-bin/*
),然后将您的 Apache 配置设置为使用/var/www/cgi-bin
而不是/home/router/cgi-bin
。
如果出于某种原因你必须使用/home/router/cgi-bin
,那么您需要做几件事:允许 www-data 和所有用户遍历该cgi-bin
目录,并授予 www-data 对目录本身的访问权限。
sudo chgrp www-data /home/router/cgi-bin
sudo chmod +rx /home/
sudo chmod +rx /home/router/
sudo chmod 750 /home/router/cgi-bin/
这样做的问题是,您必须将主目录开放到刚好足够大,以便“其他”类别的用户可以进入目录结构并遍历它。这是一个安全漏洞,因为任何其他用户都不应被允许以这种方式遍历文件系统进入您的主目录,因为这可能会导致数据泄露或个人数据被盗。(这就是为什么大多数 Web 服务器指南建议不要使用主目录,而是在 Web 服务器文档目录中/srv/
或/var/www/
为 Web 服务器文档目录使用专用目录的原因)
答案2
我刚刚使用 Ubuntu 18.04.01 设置了一个新的 LAMP 服务器,该服务器安装或升级(我不确定是哪个)到 Apache2 v 2.4.29。这对我来说有点新,因为 Apache 配置文件又变了,但我认为下面的过程是正确的。
cgi 加载模块未启用,因此我必须先通过运行 a2enmod 来执行此操作。(检查可用模块以获取正确的名称。)这会从启用的文件夹设置到可用文件夹中的文件的符号链接。
cgi 配置模块已启用 - 我认为这有点奇怪,但事实就是如此。配置模块有一个条件语句,用于检查加载模块是否可用,如果可用,则将 Scriptalias 设置为 /usr/bin/cgi-bin。我读到这不是一个好主意,就像前面的回答一样,最好为脚本创建一个 /var/www/cgi-bin 目录,所以我这样做了。
接下来,我将 php 脚本放入我在 /var/www/cgi-bin 创建的新目录中。它只需是只读的 - 我将其 chmod 设置为 444,它就可以正常工作了。
多年来,apache2.conf 文件变得越来越小,并且正如文档中所解释的那样,开发人员试图通过调用其他位使其更容易配置。