Question Comment utiliser l'authentification de base pour un seul fichier dans un répertoire Apache interdit?


Je souhaite autoriser l'accès à un fichier unique dans un répertoire autrement interdit.

Cela n'a pas fonctionné:

<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>

Quand je visite http://example.com/admin/allowed.php Je reçois le message Interdit du http://example.com/admin/ répertoire, mais pas la fenêtre de connexion du navigateur de l’authentification de base; l’authentification de base ne fonctionne donc pas sur le fichier. Comment puis-je faire une exception pour allowed.php?

Si ce n’est pas possible, je pourrais peut-être énumérer tous les fichiers interdits dans une autre directive Files.

Disons que admin / contient aussi user.php et admin.php qui devraient être interdits dans cet hôte virtuel.

Modifier: J'ai aussi essayé la modification suivante, en essayant de suivre les conseils de la réponse d'Ignacio, avec le même résultat 'Interdit':

  ...

  # 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>
  ...

5
2018-06-14 22:41


origine


le <Files ...> référence prend seulement un nom de fichier, pas un chemin, au fait. - Gavin C


Réponses:


Essaye ça:

<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>

Les fichiers imbriqués dans un répertoire s’appliqueront uniquement dans celui-ci. Votre bloc de code sera donc organisé de manière plus logique. Je pense que l’utilisation de la case «Satisfaire à tous» permettra de les fusionner comme prévu. Je ne sais pas si c'est vraiment nécessaire, essayez-le avec et sans la ligne de satisfaction ...


11
2018-06-15 06:57



Je veux juste confirmer que cela fonctionne - j'espère que MIT reviendra et sélectionner cette réponse. - Gavin C
ça marche aussi pour moi, merci! - mit


Je ne suis pas sûr de la solution avec <Files xxx> fonctionne réellement bien, comme le Exiger une page de documentation déclare qu'il ne s'applique pas à Files 

Context:    directory, .htaccess

Au lieu de cela, le doc d'Apache suggère de créer un répertoire séparé pour le fichier:

Supprimer des contrôles dans des sous-répertoires

L’exemple suivant montre comment utiliser la directive Satisfy pour   désactiver les contrôles d'accès dans un sous-répertoire d'un répertoire protégé.   Cette technique doit être utilisée avec prudence, car elle aura également   désactiver tous les contrôles d'accès imposés par 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>

2
2017-08-02 08:42