Какой стандартный способ не показывать CGI-скрипты?

Какой стандартный способ не показывать CGI-скрипты?

Я настроил каталог CGI с помощью userdirмода в Apache. Я использую конфигурации настолько общие, насколько это возможно, чтобы они были применимы к другим пользователям моего ноутбука. Я дошел до точки, где я могу запустить скрипт, используя этот URL:

http://localhost/~tomas/cgi-bin/hw.cgi

Но я также поместил ссылку на мой public_htmlв корневой каталог сервера в /var/www/html, поэтому при localhostвызове URL я получаю индекс со ссылкой на мой каталог в localhost/tomas. Ссылка работает нормально и выводит другой индекс, один из моего пользователя. Теперь приватный cgi-bin находится в /home/*/public_html/cgi-bin, поэтому я могу увидеть , cgi-binкогда получаю приватный индекс. Теперь, когда я вхожу в этот каталог, я получаю другой индекс с CGI. Меня это устраивает, хотя я не уверен, считается ли это безопасным. Но если я вызываю CGI оттуда, он не выполняется и вместо этого отображается . Вот в чем проблема.

Насколько я знаю, это связано с тем, что Apache не видит

http://localhost/tomas/cgi-bin/hw.cgi

как

http://localhost/~tomas/cgi-bin/hw.cgi

Я искал директиву, которая бы это заработала, но не нашел. Я даже не совсем уверен, что у меня есть — директива или что-то еще?

Вот мой usermod.conf:

<IfModule mod_userdir.c>
    UserDir public_html
    UserDir disabled root

    <Directory /home/*/public_html>
        AllowOverride FileInfo AuthConfig Limit Indexes
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        <Limit GET POST OPTIONS>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Require all denied
        </LimitExcept>
    </Directory>

    <Directory /home/*/public_html/cgi-bin>
        Options ExecCGI
        AddHandler cgi-script .cgi
    </Directory>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

решение1

Поскольку cgi-binк каталогу можно получить доступ через отдельный путь, один из способов сделать это — скопировать Directoryраздел с альтернативным путем прямо под другим, например:

<Directory /var/www/html/*/cgi-bin>
    Options ExecCGI
    AddHandler cgi-script .cgi
</Directory>

Это также должно отключить списки каталогов.

Если вы предпочитаете включить индексы, добавьте Indexesили Optionsунаследуйте родительские параметры, изменив ExecCGIих на +ExecCGI, например

<Directory /var/www/html/*/cgi-bin>
    Options Indexes ExecCGI
    AddHandler cgi-script .cgi
</Directory>

Я бы предпочел использовать Options Indexes ExecCGIover Options +ExecCGI, поскольку в этом случае вы не будете наследовать нежелательные параметры.

Связанный контент