web-dev-qa-db-fra.com

Comment configurer l'authentification de base dans les hôtes virtuels Apache httpd?

J'essaie de configurer l'accès Mercurial à l'aide d'Apache http. Il nécessite une authentification. Ma /etc/Apache2/sites-enabled/Mercurial ressemble à ça:

NameVirtualHost *:8080

<VirtualHost *:8080>
    UseCanonicalName Off
    ServerAdmin  webmaster@localhost
    AddHandler cgi-script .cgi
    ScriptAliasMatch ^(.*) /usr/lib/cgi-bin/hgwebdir.cgi/$1
</VirtualHost>

Chaque tutoriel que j'ai lu sur Internet me dit d'insérer ces lignes:

AuthType Basic
AuthUserFile /usr/local/etc/httpd/users

Mais quand je le fais, j'obtiens l'erreur suivante:

# /etc/init.d/Apache2 reload
Syntax error on line 8 of /etc/Apache2/sites-enabled/Mercurial:
AuthType not allowed here

Ma distribution est un Ubuntu personnalisé appelé Turnkey Linux Redmine

50
Jader Dias

Vous devez placer ceci dans une directive Location:

<VirtualHost *:8080>

<Location /> #the / has to be there, otherwise Apache startup fails
            Deny from all
            #Allow from (You may set IP here / to access without password)
            AuthUserFile /usr/local/etc/httpd/users
            AuthName authorization
            AuthType Basic
            Satisfy Any # (or all, if IPs specified and require IP + pass)
                        # any means neither ip nor pass
            require valid-user
</Location>
...
</VirtualHost>
75
Lanselot

J'utilise Apache2 sur Ubuntu 10.04 - même problème et merci pour la solution. J'ai trouvé que je devais mettre la configuration dans /etc/Apache2/Apache2.conf

Vous pouvez générer le nom d'utilisateur et le mot de passe à l'aide de htpasswd. Nouveau fichier:

$ htpasswd -c /srv/auth/.htpasswd squire

Pour ajouter au fichier existant:

$ htpasswd -b /srv/auth/.htpasswd squire2 tickleme2
10
SLL

Vous pouvez protéger un emplacement ou un répertoire. Pour un répertoire, ajoutez quelque chose comme:

<Directory /some/dir/cgi-bin/>
    Options +ExecCGI
    AddHandler cgi-script .cgi
    AuthType Basic
    AuthName 'Private scripts'
    AuthUserFile '/some/other/dir/.htpasswd'
    Require valid-user
</Directory>

Vous pouvez également ajouter des directives Deny et Allow pour un contrôle plus fin.

8
Dan Andreatta

Il semble que vous spécifiez les paramètres d'authentification dans VirtualHost. En règle générale, ces paramètres sont spécifiés sous la directive Directory.

Vous pouvez également utiliser .htaccesss fichiers, mais la spécification dans la conf Apache est une bonne valeur par défaut, car elle a moins d'exposition.

Documentation Apache

4
Warner

J'utilise Apache2 sur Ubuntu 10.10. J'ai eu des problèmes avec toutes les solutions ci-dessus, mais cela a bien fonctionné (d'après les documents Apache):

 <Répertoire /var/www/>
 Options Index FollowSymLinks MultiViews 
 AllowOverride All 
 Ordre autoriser, refuser 
 Autoriser de tous 
 AuthType Basic 
 AuthName "Restreint" 
 Fichier AuthBasicProvider 
 AuthUserFile /etc/users
 Requiert un visiteur utilisateur 
 </Directory> 

La plus grande différence avec les réponses ci-dessus semble être la directive AuthBasicProvider définie sur "fichier" et la directive Require incluant le bit "utilisateur" avant le nom d'utilisateur réel.

J'espère que cela aide quelqu'un.

3
Alex Beynenson

Nous exécutons une version optimisée en mémoire d'Apache et avons rencontré ce problème.

Cela était dû au fait que la ligne suivante n'était pas présente dans la configuration Apache:

LoadModule authz_user_module modules/mod_authz_user.so
3
DaveSB