我知道关于这个主题有一些问题,但似乎没有一个能解决我的问题。看到 这个 或 这个 或 这个。
我在 Linux、Fedora21 上,我正在尝试启用每个用户目录 CGI 脚本。我按照 这些 说明进行操作,但没有成功。
我得到错误:
[cgi:error] End of script output before headers: test.cgi
test.cgi
是一个可执行的sh文件,包含一个非常简单的脚本:
#!/usr/bin/sh
echo "Content-type: text/plain"
echo ""
echo "Hello"
它具有可执行标志并且从 shell 运行没有问题。我也尝试过使用 Python:同样的结果。
我还禁用了 selinux 以进行良好的衡量。
我还尝试将 debug
级别设置为 Apache 的 ErrorLog,但我得到的只是在上述错误之前“授予”权限。
我还配置了 /etc/httpd/conf.d/userdir.conf
文件
<Directory "/home/*/public_html">
AllowOverride All
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require all granted
</Directory>
<Directory /home/*/public_html/cgi-bin/>
Options ExecCGI FollowSymLinks
SetHandler cgi-script
AddHandler cgi-script .cgi .exe .pl .py .vbs
Require all granted
AllowOverride All
</Directory>
并重新启动服务器。没有成功。在我看来一切都很好,我不明白……怎么了??
编辑:
我忘了补充一点,这个问题只是针对每个用户的目录:如果我将相同的脚本移动到 /var/www/cgi-bin
目录,它会按预期工作。
编辑2:
外壳确实存在:
$ ls /usr/bin/sh
/usr/bin/sh
原文由 AkiRoss 发布,翻译遵循 CC BY-SA 4.0 许可协议
最后我解决了。感谢@JimB,因为在 他的评论 中他指出了我不知道的 SUEXEC(或者直到现在才被忽略)。
在阅读了一些 suEXEC 文档 后,我明白问题必须存在。所以,我看了一下配置:
一切看起来都很好(对我的用户来说很好的 uid/gid,userdir_suffix 很好,等等)。所以我看了一下系统日志:
这就是 问题所在:我的
cgi-bin
目录可被其他人写入。我通过简单地将权限更改为
755
来修复。