Autenticação básica do Apache - autenticação não necessária para alguns arquivos

1

Estou tentando permitir o acesso não autenticado a determinados scripts em uma instalação do Nagios. Embora a questão não seja especificamente sobre o Nagios nem o manuseio do CGI, que também é ilustrado abaixo.

Essencialmente, desejo exigir autenticação para qualquer coisa em um diretório específico:

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

exceto por dois caminhos específicos:

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

Atualmente, tenho o Apache configurado para exigir autenticação para todo o acesso ao link

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>

Eu prefiro não replicar os scripts em um diretório diferente, pois este é um software empacotado e quero minimizar o esforço de suporte - não sei ao certo quais URLs dentro do pacote usam caminhos canônicos.

editar:

Posso usar um FilesMatch em vez do bloco Direcory? Se sim, o Apache regexe PCRE ou POSIX?

Editar 3:

Usando

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

remove a autenticação de todos os URLs no diretório: (

Eu também tentei replicar os scripts avail.cgi e trends.cgi em um diretório diferente. Isso parece funcionar - mas os formulários não são preenchidos com nenhum dado da minha configuração do Nagios! Parece que existe uma camada adicional de autenticação embutida no código do Nagios. Isso também iria contra a abordagem "Exigir qualquer / permitir de ip". : (

Embora o comportamento revisado no MSIE possa estar correto, wrt rfc 2396 está me causando terríveis dores de cabeça!

    
por symcbean 23.09.2010 / 14:03

4 respostas

0

Você tentou criar uma nova pasta com um link simbólico para o seu cgi "aberto"?

    
por 23.09.2010 / 14:14
1

Se você tiver um segundo endereço IP disponível no servidor, pode tentar executar um proxy reverso nesse endereço IP que apenas encaminha esses dois locais e faz a autenticação 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>

Eu não tentei se isso funcionar corretamente, pois não há uma diretiva ProxyPassReverseMatch no apache.

    
por 24.09.2010 / 00:09
0

Use satisfazer:

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

link

    
por 23.09.2010 / 22:57
0

A seguinte configuração funcionou para eu exigir autenticação para um único script CGI:

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

Tente aninhar o FilesMatch no Directory e usar caminhos relativos na diretiva FilesPath.

    
por 09.10.2010 / 20:03