
Я настроил каталог 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 ExecCGI
over Options +ExecCGI
, поскольку в этом случае вы не будете наследовать нежелательные параметры.