SuexecUserGroup 是否与 Apache 2.4 中的 Virtualhost 一起使用

SuexecUserGroup 是否与 Apache 2.4 中的 Virtualhost 一起使用

我正在尝试设置一个使用以特定用户和组身份运行的 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/ 下,这样就成功了。

相关内容