Я создал каталог CGI, используя мод userdir
в Apache. Я использую как можно более общие конфигурации, чтобы их можно было использовать для других пользователей моего ноутбука. Я дошел до того момента, когда я могу запустить сценарий, используя этот URL:
http://localhost/~tomas/cgi-bin/hw.cgi
Но я также поместил ссылку на мой public_html
в корневом каталоге сервера по адресу / var / www / html
], поэтому при вызове URL-адреса localhost
я получаю индекс со ссылкой на мой каталог по адресу 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
Поскольку к каталогу 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
, а не Options +ExecCGI
, поскольку таким образом вы не будете наследовать нежелательные параметры.