Назад | Перейти на главную страницу

Базовая аутентификация Apache - для некоторых файлов аутентификация не требуется

Я пытаюсь разрешить неаутентифицированный доступ к определенным скриптам в установке Nagios. Хотя вопрос не касается конкретно Nagios или обработки CGI, это также проиллюстрировано ниже.

По сути, я хочу потребовать аутентификацию для чего-либо в определенном каталоге:

http://example.com/nagios/cgi-bin/....

за исключением 2 конкретных путей:

http://example.com/nagios/cgi-bin/avail.cgi....
http://example.com/nagios/cgi-bin/trends.cgi....

В настоящее время у меня установлен Apache, требующий аутентификации для любого доступа к http://example.com/nagios/cgi-bin

ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin

<Directory "/usr/local/nagios/sbin">
  Options ExecCGI
  AllowOverride None
  Order allow,deny
  Allow from all
  AuthName "Nagios Access"
  AuthType Basic
  AuthUserFile /usr/local/nagios/etc/htpasswd.users
  Require valid-user
</Directory>

Я бы предпочел не реплицировать сценарии в другом каталоге, поскольку это пакетное программное обеспечение, и я хочу минимизировать усилия по поддержке - я не уверен, какие URL-адреса в пакете используют канонические пути.

редактировать:

Могу ли я использовать FilesMatch вместо блока Direcory? Если да, то основаны ли регулярные выражения Apache на PCRE или POSIX?

Изменить 3:

С помощью

<FilesMatch "/(cgi-bin\/)(?!trends.cgi)(?!avail.cgi)/"> 

удаляет аутентификацию со всех URL-адресов в каталоге :(

Я также пробовал реплицировать скрипты avail.cgi и trend.cgi в другой каталог. Кажется, это работает, но формы не заполнены никакими данными из моей конфигурации Nagios! Похоже, что в код Nagios встроен дополнительный уровень аутентификации. Это также приведет к отмене подхода «Требовать любой / разрешить от ip». :(

Хотя исправленное поведение в MSIE может быть правильным по RFC 2396 это вызывает у меня ужасные головные боли!

Если у вас есть второй IP-адрес, доступный на сервере, вы можете попробовать запустить обратный прокси-сервер на этом IP-адресе, который перенаправляет только эти два местоположения и выполняет HTTP-аутентификацию.

<VirtualHost secondIP:80>
    ProxyPassMatch ^\/nagios\/cgi-bin\/(trends|avail)\.cgi$ "http://127.0.0.1/nagios/cgi-bin/"
    ProxyPassReverse /nagios/cgi-bin/ "http://127.0.0.1/nagios/cgi-bin/"
</VirtualHost>

Я не пробовал, если это работает правильно, так как нет ProxyPassReverseMatch директива в apache.

Используйте удовлетворение:

Require valid-user
Order allow,deny
Allow from IP
Satisfy Any 

http://httpd.apache.org/docs/current/mod/core.html#satisfy

Вы пробовали создать новую папку с символической ссылкой на вашу "открытую" cgi?

Следующая конфигурация сработала для меня, требуя аутентификации для одного сценария CGI:

<Directory "/var/www/cgi-bin">
  <Files "my-cgi-script">
    # ...
    # AuthName, AuthType, AuthUserFile, Require
    # ...
  </Files>
</Directory>

Попробуйте вложить FilesMatch в каталог и использовать относительные пути в директиве FilesPath.