我知道有关于这个主题的一些问题,但似乎都没有解决我的问题.看到这个或这个或这个.
我在Linux,Fedora21上,我正在尝试启用每个用户目录的CGI脚本.我遵循了这些指示,但没有成功.
我收到错误:
[cgi:error] End of script output before headers: test.cgi
Run Code Online (Sandbox Code Playgroud)
test.cgi
是一个可执行的sh文件,包含一个非常简单的脚本:
#!/usr/bin/sh
echo "Content-type: text/plain"
echo ""
echo "Hello"
Run Code Online (Sandbox Code Playgroud)
它有可执行标志,并且没有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>
Run Code Online (Sandbox Code Playgroud)
并重新启动服务器.没有成功.一切看起来都很好,我无法理解......有什么不对?
我忘了添加该问题只针对每用户目录:如果我将相同的脚本移动到/var/www/cgi-bin
目录,它按预期工作.
shell确实存在:
$ ls /usr/bin/sh
/usr/bin/sh
Run Code Online (Sandbox Code Playgroud)
最后我解决了这个问题 感谢@JimB,因为在他的评论中他指出了我不知道的SUEXEC(或者直到现在才被忽略).
在阅读了suEXEC文档后,我明白问题必须存在.所以,我看了一下配置:
# suexec -V
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=1000
-D AP_HTTPD_USER="apache"
-D AP_LOG_SYSLOG
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=1000
-D AP_USERDIR_SUFFIX="public_html"
Run Code Online (Sandbox Code Playgroud)
一切看起来都很好(我的用户好uid/gid,userdir_suffix很好,等等).所以我看了一下系统日志:
# journalctl -b | grep "suexec"
May 22 11:43:12 caladan suexec[5397]: uid: (1000/user) gid: (1000/user) cmd: test.cgi
May 22 11:43:12 caladan suexec[5397]: directory is writable by others: (/home/user/public_html/cgi-bin)
Run Code Online (Sandbox Code Playgroud)
而这就是问题:我的cgi-bin
目录是由别人写的.
我通过简单地将权限更改为755
.
归档时间: |
|
查看次数: |
57312 次 |
最近记录: |