10 votes

.htaccess ne demande pas le mot de passe

J'utilise Ubuntu 12.04 et j'essaie d'utiliser le fichier .htaccess sur une page contenant un serveur apache2. Mon fichier .htaccess ressemble à ceci :

AuthType Basic
AuthName "Password Required"
AuthBasicProvider file
AuthUserFile /home/janeb/.htpasswd
require valid-user

Le fichier /home/janeb/.htpasswd est :

inb351:$apr1$Ya4tzYvr$KCs3eyK1O2/c7Q9zRcwn..

et le fichier /etc/apache2/sites-available/default est :

UserDir public_html
<Directory ~ "public_html/.*">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all  
</Directory>

J'ai redémarré apache. J'ai essayé de modifier require valid-user a require user inb351 . Toujours pas de chance. J'ai également essayé AllowOverride con AuthConfig y AuthConfig Indexes . Je ne sais donc pas quoi faire d'autre, et oui, à chaque étape que j'ai essayée, j'ai redémarré apache.

Edit : Le fichier exact par défaut est :

<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /var/www
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>
    UserDir disabled vmuser
    UserDir public_html
<Directory ~ "public_html/*">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

0 votes

Le module auth_basic est-il chargé ?

0 votes

Comment le vérifier ?

0 votes

Il suffit de l'activer avec "a2enmod auth_basic" si ce n'est pas le cas.

12voto

Shane Madden Points 112034

Je soupçonne que le apache l'utilisateur n'est pas capable de lire /home/janeb/.htpasswd . Vérifiez le journal des erreurs d'Apache.

C'est la seule chose que je vois d'anormal dans la configuration fournie, mais ce n'est peut-être pas le seul problème ; veuillez fournir la configuration complète de votre hôte virtuel. Je vous recommande également de déplacer la configuration de l'authentification hors de la section .htaccess il n'y a aucune raison pour qu'il soit là.

EDIT :

La raison pour laquelle le .htaccess n'est pas appliqué est parce que AllowOverride All n'est pas appliqué au chemin dans lequel se trouve votre .htaccess réside.

Le site .htaccess doit être appliqué en même temps que le fichier <Directory> blocs - si AllowOverride est spécifié dans un <Directory ~ ...> bloc, puis il se produit .htaccess aurait dû être appliquée. Puisque ça ne marche pas, la documentation met spécifiquement en garde contre cette pratique :

AllowOverride n'est valable que dans <Directory> les sections spécifiées sans expressions régulières, pas dans <Location> , <DirectoryMatch> o <Files> sections.

Ajouter un nouveau bloc à votre configuration pour permettre à votre .htaccess à utiliser :

<Directory /home>
    AllowOverride All
</Directory>

0 votes

J'ai découvert que j'avais un message d'erreur comme celui-ci : [Mon Sep 17 19:20:16 2012] [error] [client 127.0.0.1] client denied by server configuration : /home/janeb/public_html/.htaccess Cependant, j'ai obtenu ce message d'erreur lorsque j'ai essayé d'y accéder dans un navigateur en tentant d'entrer localhost/~janeb/.htaccess A part cette erreur, je n'ai que deux de ces entrées "[Mon Sep 17 19:18:40 2012] [notice] caught SIGTERM, shutting down [Mon Sep 17 19:18:42 2012] [notice] Apache/2.2.22 (Ubuntu) configured -- resuming normal operations".

0 votes

@SarpKaya Alors votre DocumentRoot (ou une référence à un Alias ) est /home/janeb/public_html/ ? Votre fichier vhost ne fait pas référence à cet emplacement ; savez-vous comment il a été configuré ? Ou accédez-vous au chemin mod_userdir de /~janeb ? Pouvez-vous vérifier quelles sont les autorisations sur /home/janeb ainsi que /home/janeb/.htpasswd ?

0 votes

Oui, j'y accède via localhost/~janeb, htpasswd est 0644

3voto

Virtual JB Points 1

D'après votre configuration, il est probable que vous deviez placer votre fichier .htaccess dans le dossier de l'utilisateur. /home/janeb/public_html qui est le répertoire DocumentRoot si je ne me trompe pas.

0 votes

Je viens d'essayer cette méthode également. Cela n'a pas fonctionné...

3voto

Ben Lessani Points 5146

Qu'est-ce que vous essayez de faire exactement ?

Dans votre vhost déclaration ...

order allow,deny
allow from all  

Vous avez déjà déclaré que tout le monde devrait avoir accès ... cela signifierait ce qui suit .htpasswd n'est pas pertinent, car il a la priorité.

Au lieu de cela, supprimez ce code, et dans votre .htaccess tout ce dont vous avez besoin est...

AuthType Basic
AuthName "Password Required"
AuthUserFile /home/janeb/.htpasswd
Require valid-user

Le site .htpasswd peut se trouver n'importe où sur le serveur, tant qu'il est lisible par la personne sous laquelle Apache s'exécute (généralement www-data).

Si vous voulez combiner la restriction IP et .htpasswd restriction, alors vous pouvez aussi utiliser .

order deny,allow
deny from all
allow from 192.168.0.10

AuthType Basic
AuthName "Password Required"
AuthUserFile /home/janeb/.htpasswd
Require valid-user

Satisfy Any

0 votes

Bonjour, Je n'ai pas besoin de restrictions en matière d'IP. J'ai donc fait ce que vous m'avez dit et je me suis débarrassé de order allow,deny allow from all Cependant, il ne demande toujours pas de mot de passe...

0 votes

Dans ce cas, il s'agit soit de la .htpasswd ne peut pas être lu par la personne sous laquelle Apache s'exécute (comme je l'ai dit plus haut), ou que votre vhost correspond à une autre instruction de répertoire. Modifiez tous les AllowOverride None a AllowOverride All - un par un, et redémarrer Apache entre chaque changement. Vous verrez alors où le problème se pose.

0 votes

"cela signifie que vous .htpasswd n'est pas pertinent, car il a la priorité". Hmm ? Ce ne serait le cas qu'avec Satisfy Any que je ne vois nulle part dans la configuration fournie.

0voto

Ketil Points 1

Je suis arrivé ici avec le même problème. Il s'avère que le public_html hérite de la définition du niveau supérieur du serveur ( <Directory /> ), et il contenait AllowOverride None . En changeant cette valeur pour All (ou AuthConfig ) a fait l'affaire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X