Pourquoi l'authentification Apache Basic ne fonctionne-t-elle pas?


14

Je viens de mettre à niveau Apache depuis sa version 2003 vers une toute nouvelle version 2.4.1. Tout semble assez bon, sauf pour une chose flagrante:

Dans mon fichier httpd.conf, j'ai les éléments suivants:

<Directory />
    AllowOverride none
    Options FollowSymLinks
    AuthType      Basic
    AuthName      "Enter Password"
    AuthUserFile  /var/www/.htpasswd
    Require     valid-user
</Directory>

Cela ne devrait autoriser que les utilisateurs du fichier d'authentification spécifié à accéder au serveur - tout comme il l'avait fait dans l'ancienne version d'Apache. (Droite?)

Cependant, cela ne fonctionne pas. Les demandes sont accordées sans authentification fournie. Lorsque je passe la journalisation à LogLevel Debug, pour les accès, cela dit:

[Sat Mar 24 21:32:00.585139 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of Require all granted: granted
[Sat Mar 24 21:32:00.585446 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of <RequireAny>: granted

Je ne sais vraiment pas ce que cela signifie - et je (au meilleur de ma connaissance) n'ai aucune déclaration "Exiger toutes les autorisations" ou "" dans aucun de mes fichiers.

Des idées pourquoi cela ne fonctionne pas, ou où déboguer ??

MISE À JOUR:

J'ai un hôte virtuel sur le port SSL qui permet le proxy. Lorsque je mets les mêmes entrées dans le

<proxy *> 

dans la configuration de virtualhost, cela fonctionne . Il ne semble pas fonctionner dans le

 <Directory> 

clause. J'ai ensuite essayé de mettre sous d'autres clauses Directory (spécifiques aux autres répertoires) et cela n'a pas fonctionné non plus.

AUSSI

D'après les questions de Shane ci-dessous - j'ai essayé de dupliquer le bloc racine "/" dans un répertoire "/ tmp". Le répertoire / tmp fonctionne correctement !! Donc - ce problème est spécifique au répertoire racine uniquement ???


1
Quels autres <Directory>blocs avez-vous appliqués aux demandes qui ne fonctionnent pas?
Shane Madden

Je viens d'en mettre un pour le répertoire racine "/", qui devrait s'appliquer à l'ensemble du serveur. J'ai essayé d'en ajouter un au répertoire de base de l'utilisateur (par mod_userdir) et j'ai eu les mêmes résultats avec cela.
Brad

@ShaneMadden - sur votre question - j'ai essayé de dupliquer le bloc racine "/" dans un répertoire "/ tmp". Le répertoire / tmp fonctionne correctement !! Donc - ce problème est spécifique au répertoire racine uniquement ???
Brad

Je soupçonne qu'il y a un <Directory>bloc plus spécifique ailleurs dans votre configuration Apache qui a priorité sur celui que vous avez défini /.
Shane Madden

J'ai juste tout salué - rien. Ces fichiers de configuration étaient des modifications très minimes des valeurs par défaut nouvellement installées d'Apache.
Brad

Réponses:


12

J'ai eu un problème similaire avec l'authentification Digest sur une nouvelle installation 2.4. En regardant attentivement la documentation sur le site d'Apache, il semble que les directives d'authentification doivent être dans une <Location>balise plutôt que dans une <Directory>balise. Consultez la documentation de la directive AuthBasicProvider .


2
Ce n'est pas correct. mod_auth_basic et mod_auth_digest peuvent être utilisés dans <Directory> et <Location> ainsi que <File> <If> et <Proxy>. Dans la documentation pour Apache 2.4 -> httpd.apache.org/docs/current/mod/… Sous "Context" est répertorié "Directory" qui indique tous les conteneurs valides ci-dessus. -> httpd.apache.org/docs/current/mod/directive-dict.html#Context
JadedCore du

Cela ne devrait pas être correct, mais cela a fonctionné pour moi. C'est peut-être parce que dans la partie Répertoire, il y avait d'autres paramètres (es. RewriteRule)
paul.ago

6

J'ai fait face au même problème, et rien de ce post ne m'a aidé, alors je vais ajouter mes 2 cents. Dans mon cas (apache 2.4), le problème était dans les directives séquentielles Require .

Par défaut, si vous avez plusieurs directives Require , elles sont considérées comme<RequireAny>

Dans mon <Directory>j'ai eu

Require ip 192.168.100.0/24 10.9.8.0/24
Require valid-user

La demande d'authentification n'apparaissait donc pas si l'adresse IP était correcte. J'ai dû changer exiger la logique de <RequireAny>la <RequireAll>et il semble que maintenant tout fonctionne correctement.

   <Directory /var/www>

      DirectoryIndex index.html
      Options -Indexes

      AuthType Basic
      AuthName "hidden data"
      AuthBasicProvider    file
      AuthUserFile /opt/httpaswd
      <RequireAll>
        Require ip 192.168.100.0/24 10.9.8.0/24
        Require valid-user
      </RequireAll>
    </Directory>

5

La réponse de jscott est incorrecte. Apache 2.4 certainement fait permettre des directives d'authentification dans des <Directory>conteneurs. De plus, c'est le seul moyen sécurisé d'implémenter l'authentification, car les <Location>conteneurs sont accessibles de différentes manières, ce qui permet de contourner votre authentification si vous ne faites pas attention. À titre de référence, voici un exemple de conteneur que j'utilise sur un système de production:

<Directory "/srv/http/my_domain.org/html/secret-stuff"> Options Indexes Multiviews FollowSymLinks AuthType Digest AuthName "staff" AuthUserFile /etc/httpd/private/secret-stuff.htaccess Require valid-user </Directory>


1

Il semble qu'il manque un fournisseur pour AuthBasic. Essayez d'ajouter une ligne comme:

AuthBasicProvider    file

Une fois que cela fonctionne, vous pouvez consulter la Satisfydirective. Cela peut être utilisé pour autoriser l'accès local sans mot de passe, tout en exigeant un mot de passe pour l'accès à Internet.

EDIT: J'utilise un fichier include pour BasicAuth pour permettre l'accès à distance par mot de passe au contenu qui n'est normalement pas disponible sur Internet. Vous ne voudrez peut-être pas la Satisfydirective. Voici mon /etc/apache2/basicauth.confdossier:

# Basic authorization configuration include file 
# Enable basic auth access for remote users
AuthName             "Authentication Required"
AuthType             Basic
AuthBasicProvider    file
AuthUserFile         /etc/apache2/httpd.passwd
Require              valid-user
Satisfy              any

J'ai également un /etc/apache2/allow_local.conffichier d'inclusion pour l'authentification basée sur IP.

# Common local access block - Allow all local addresses
Order deny,allow
Deny  from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Allow from 192.168.1.0/24

Pour les activer, j'utilise ces inclus.

Include /etc/apache2/allow_local.conf
Include /etc/apache2/basicauth.conf

Vous pouvez essayer d'ajouter à la spécification d'autorisation. Cela fonctionne avec ma configuration de test.

Order deny,allow
Allow from all

Je l'ai essayé - ça ne marche toujours pas: -O
Brad

Si j'inclus simplement vos fichiers tels quels, j'obtiens une erreur: "AuthName non autorisé ici" - car vous ne pouvez pas spécifier ces directives n'importe où (comme en dehors d'une clause "Location", "Directory" ou "Proxy". Ou est-ce que je manque quelque chose? Si je l'inclus dans la clause "Annuaire" - encore une fois - je suis autorisé à entrer sans aucune information d'identification
Brad

Si je mets seulement un "refus de tous" dans la clause "répertoire", l'accès me sera refusé (comme vous vous en doutez). Si vous incluez ensuite votre PREMIER script dans la clause d'annuaire, je suis autorisé à accéder sans condition. Si je supprime le "satisfaire" dans votre script, je suis refusé sans condition.
Brad

0

J'ai eu le même problème et c'est probablement un bogue d'Apache; dans mon cas, le problème est apparu après une mise à jour et a disparu après une mise à jour ultérieure, mais j'ai dû ajouter ceci en bas:

Deny from all

C'est effrayant qu'Apache puisse ouvrir des failles de sécurité comme celle-ci :(


Deny from allest un paramètre apache 2.2. httpd.apache.org/docs/2.4/upgrading.html#run-time
danger89

oui changer les directives liées à la sécurité d'une manière incompatible en amont est baaaaaad
greg

0

Essayer:
<Directory "/"> ... </Directory>

Au lieu de:
<Directory /> ... </Directory>

Signification: encapsuler le symbole racine avec des guillemets doubles. Sinon, vous pourriez fermer la balise avec cette barre oblique.


0

Vérifiez également s'il n'y en a pas accidentellement un autre

    Require all granted

ailleurs dans la même configuration d'annuaire. il peut être prioritaire sur votre

    Require     valid-user
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.