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

48

J'essaye de configurer l'accès mercurial en utilisant Apache http. Cela nécessite une authentification. Mon /etc/apache2/sites-enabled/mercurialressemble à ceci:

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 une Ubuntu personnalisée appelée Turnkey Linux Redmine

Jader Dias
la source

Réponses:

73

Vous devriez 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>
Lanselot
la source
1
Cela ne fonctionne pas pour moi. <Location /opt/mcmap/shapefiles.php> AuthType Kerberos AuthName KerberosLogin KrbServiceName HTTP/intranet.spectrumasa.com KrbMethodNegotiate On KrbMethodK5Passwd On KrbAuthRealms DOMAIN.COM Krb5KeyTab /etc/httpd/conf/intranet.keytab require valid-user Options Indexes MultiViews FollowSymLinks AllowOverride All Order allow,deny Allow from all SetOutputFilter DEFLATE </Location>
Shorif2000
1
La page doc d'Apache explique tout cela, mais ne vous donne jamais un exemple complet. J'ai copié une partie de leur exemple, mais j'ai raté la require valid-userpartie. Un exemple complet peut être une chose merveilleuse. Merci.
Buttle Butkus
1
@sharif devrait être <Location />, ce qui signifie que l'accès à l'URL racine de yourhost.com/ devrait nécessiter l'
autorisation de la
1
<Location />Dans tous les cas, j'avais besoin de ne pas avoir d'erreur de syntaxe lors du chargement du fichier de configuration.
Perséides
3
Pourquoi a-t-on <Location /> édité pour <Location>avec un message de journal interne de "corrigé ... pour éviter beaucoup de problèmes", sans rien dire de la vraie raison dans la réponse elle-même? Il n’existe pas de <Location>directive (c’est-à-dire sans localisation) dans Apache. Cela cause certainement des problèmes maintenant. ;) (Voir par exemple ci-dessus.)
Sz.
9

Je lance Apache2 sur Ubuntu 10.04 - même problème et merci pour la solution. J'ai trouvé que je devais mettre la configuration en/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
SLL
la source
7

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 Denyet Allowdirectives pour un contrôle plus précis.

Dan Andreatta
la source
4

On dirait que vous spécifiez les paramètres d’authentification dans le fichier VirtualHost. Généralement, ces paramètres sont spécifiés dans la Directorydirective.

Vous pouvez également utiliser des .htaccesssfichiers, mais spécifier dans la configuration d'Apache est un bon choix par défaut, car il est moins exposé.

Documentation Apache

Warner
la source
3

J'exécute 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 Apache Docs):

<Répertoire / var / www />
  Options Index FollowSymLinks MultiViews
  AllowOverride All
  Ordre permettre, refuser
  permettre à tous
  AuthType Basic
  AuthName "restreint"
  Fichier AuthBasicProvider
  AuthUserFile / etc / users
  Requérir un visiteur
</ Répertoire>

La plus grande différence par rapport aux réponses ci-dessus semble être la directive AuthBasicProvider définie sur "fichier" et la directive Require comprenant le bit "utilisateur" précédant le nom d'utilisateur réel.

J'espère que ça aide quelqu'un.

Alex Beynenson
la source
3

Nous utilisons une version optimisée de la 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 d'Apache:

LoadModule authz_user_module modules/mod_authz_user.so
DaveSB
la source