Como usar a autenticação básica para um único arquivo no diretório Apache proibido de outra forma?

5

Eu quero permitir o acesso a um único arquivo em um diretório proibido.

Isso não funcionou:

<VirtualHost 10.10.10.10:80>
  ServerName example.com

  DocumentRoot /var/www/html

  <Directory /var/www/html>
    Options FollowSymLinks
    AllowOverride None
    order allow,deny
    allow from all
  </Directory>

  # disallow the admin directory: 
  <Directory /var/www/html/admin>
    order allow,deny
    deny from all
  </Directory>

  # but allow this single file:: 
  <Files      /var/www/html/admin/allowed.php>
      AuthType basic
      AuthName "private area"
      AuthUserFile /home/webroot/.htusers
      Require user admin1
  </Files>

  ...
</VirtualHost>

Quando visito http://example.com/admin/allowed.php , recebo a mensagem Proibida do diretório http://example.com/admin/ , mas não o pop-up de login do navegador da autenticação básica, portanto, a autenticação básica não funciona no arquivo. Como posso fazer uma exceção para o allowed.php?

Se não for possível, talvez eu possa enumerar todos os arquivos proibidos em outra diretiva de arquivos?

Digamos que admin / contenha também user.php e admin.php que devem ser proibidos neste host virtual.

Edit: Eu também tentei a seguinte modificação, tentando seguir os conselhos da resposta de Ignacio, com o mesmo resultado 'Proibido':

  ...

  # disallow the admin directory: 
  <Directory /var/www/html/admin>
    order allow,deny
    deny from all
  </Directory>

  # but allow this single file:: 
  <Files      /var/www/html/admin/allowed.php>
      order allow,deny
      allow from all
      AuthType basic
      AuthName "private area"
      AuthUserFile /home/webroot/.htusers
      Require user admin1
      satisfy all
  </Files>
  ...
    
por mit 15.06.2010 / 00:41

2 respostas

11

Tente isto:

<Directory /var/www/html/admin>
  <Files allowed.php>
    AuthType basic
    AuthName "private area"
    AuthUserFile /home/webroot/.htusers
    Require user admin1
  </Files>
  order allow,deny
  deny from all
  satisfy any
</Directory>

Os arquivos aninhados dentro de um diretório só serão aplicados nele para que seu bloco de código seja organizado de forma mais lógica, e eu acho que usar o 'Satisfazer qualquer' permitirá que eles sejam mesclados como planejado. Eu não tenho certeza se é realmente necessário, então tente com e sem a linha de satisfação ...

    
por 15.06.2010 / 08:57
2

Não sei se a solução com <Files xxx> funciona bem, como o Exigir documento A página indica que não se aplica a Files

Context:    directory, .htaccess

Em vez disso, o que o apache doc sugere é criar um diretório separado para o arquivo:

Removing controls in subdirectories

The following example shows how to use the Satisfy directive to disable access controls in a subdirectory of a protected directory. This technique should be used with caution, because it will also disable any access controls imposed by mod_authz_host.

<Directory /path/to/protected/>
    Require user david
</Directory>
<Directory /path/to/protected/unprotected>
    # All access controls and authentication are disabled
    # in this directory
    Satisfy Any
    Allow from all
</Directory>
    
por 02.08.2013 / 10:42