我正在尝试设置一个使用以特定用户和组身份运行的 CGI 脚本的虚拟主机。我正在使用 SuexecUserGroup 指令,但似乎不起作用。
基本设置。用户“Bob”的 cgi-bin 目录中有一些可以正常工作的 CGI 脚本。因此对于此 URL:
http://myhost.com/~bob/cgi-bin/whoami.cgi
其中 whoami.cgi 脚本打印 uid,该 URL 工作正常并且报告 Bob 的 UID。
Bob 有一个域名 bobhost.org,由我的服务器托管。我设置了一个虚拟主机,如下所示:
<VirtualHost *:80>
ServerName bobhost.org
DocumentRoot /home/bob/public_html
ScriptLog logs/bob_script_log
TransferLog logs/bob_access_log
ErrorLog logs/bob_error_log
LogLevel warn suexec:debug
SuexecUserGroup bob bob
ScriptAlias /cgi-bin/ "/home/bob/public_html/cgi-bin/"
<Directory "/home/bob/public_html/">
Require all granted
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
</VirtualHost>
以下 URL 失败:
http://bobhost.org/cgi-bin/whoami.cgi
尽管 whoami.cgi 脚本是完全相同的文件。错误日志文件显示:
[时间戳] [cgi:error] [pid] [客户端] 标头之前的脚本输出结束:whoami.cgi
ScriptLog 中没有任何内容(该指令是否有效?)或我能看到的任何其他地方。
我最终通过以下方式使其工作:(1)删除 SuexecUserGroup 行和(2)将所有文件的 uid:gid 更改为 apache:apache。
虽然我很高兴它能工作,但我对这个解决方案感到不舒服。SuexecUserGroup 指令是否可以与虚拟主机一起使用?
答案1
感谢 HBruijn,我成功了。首先,我在 /var/log/secure 中找到了关键的错误信息,即
Timestamp host suexec[24393]: command not in docroot (/home/bob/public_html/cgi-bin/whoami.cgi
这让这个 SO 帖子:https://stackoverflow.com/questions/19004550/apache-suexec-command-not-in-docroot 和这个 https://wincent.com/wiki/Troubleshooting_suexec_errors
我将 .cgi 文件移至 /var/www/ 下,这样就成功了。