【问题标题】:apache suexec "command not in docroot"apache suexec“命令不在 docroot 中”
【发布时间】:2013-10-01 00:33:33
【问题描述】:

错误信息是:

command not in docroot (/home/site1/cgi-bin/test.pl).

Here我发现了这个:

suexec 要求 CGI 脚本位于服务器的 DocumentRoot(而不是 VirtualHost DocumentRoot)下。但是,VirtualHost DocumentRoot 可以是指向实际 DocumentRoot 下的目录的符号链接。

虚拟主机配置的一部分是:

[...]
DirectoryIndex index.html index.html index.php
DocumentRoot /home/site1/htdocs

SuexecUserGroup site1 site1

ScriptAlias /cgi-bin/ /home/site1/cgi-bin/
<Location /home/site1/cgi-bin>
           Options +ExecCGI
</Location>

<Directory /home/site1/>
Options -Includes -Indexes -FollowSymLinks +ExecCGI MultiViews
AddHandler cgi-script .cgi .pl
AllowOverride none
Order allow,deny
Allow from all
</Directory>
[...]

所以,我更喜欢在 cgi-bin 中包含 Perl 脚本,但如果我无法解决这个问题,我可以将所有脚本移动到 htdocs。

【问题讨论】:

    标签: linux perl apache suexec


    【解决方案1】:

    suEXEC 有自己的docroot,它完全独立于您在 Apache 配置中配置的任何内容。你可以通过调用查看suEXEC的docroot是什么:

    suexec -V
    

    您可能需要成为 root 用户。在我的例子中,docroot 是/var/www。你必须把你的脚本放在那里。无法更改此保存重新编译suEXEC。不要尝试使用符号链接将您的脚本保留在 /var/www 之外(或您的 suEXEC 配置的任何内容)。

    编辑:正如@insaner 在 cmets 中提到的,该命令可能是 suexec 或者我在至少一台服务器上看到的 suexec2suEXEC 正是 Apache 文档所称的模块/功能。

    【讨论】:

    • apache2-suexec-custom 允许更大的灵活性。
    • 优秀。正是我想要的。
    • 太棒了!我正在使用一个符号链接,不幸的是它不起作用。
    • 检查 docroot 目录是否存在。例如,如果您的 docroot 是 "/home" ,则 /home 目录必须存在。你可以在 /home1 /home2 和 ... 中运行命令
    【解决方案2】:

    如果您使用apache2-suexec-custom 包,/etc/apache2/suexec/www-data 中有一个配置,前 2 行以下。

    /var/www
    public_html/cgi-bin
    

    您需要用您的设置替换这些行。应该有 2 行。只给一行会出错。

    我使用了类似下面的东西,

    home
    cgi-bin
    

    【讨论】:

      【解决方案3】:

      将 DocumentRoot /home/site1/htdocs 更改为 DocumentRoot /home/site1/

      【讨论】:

        猜你喜欢
        • 2013-05-18
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-05
        • 1970-01-01
        • 1970-01-01
        • 2014-11-13
        相关资源
        最近更新 更多