¿Cómo configurar la autenticación básica en los hosts virtuales Apache httpd?

48

Estoy tratando de configurar el acceso mercurial usando Apache http. Requiere autenticación Mi /etc/apache2/sites-enabled/mercurialaspecto es este:

NameVirtualHost *:8080

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

Cada tutorial que leo en Internet me dice que inserte estas líneas:

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

Pero cuando lo hago me sale el siguiente error:

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

Mi distribución es un Ubuntu personalizado llamado Turnkey Linux Redmine

Jader Dias
fuente

Respuestas:

73

Debe colocar esto dentro de una directiva de ubicación:

<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
fuente
1
Esto no funciona para mi. <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 página del documento de Apache explica todo esto, pero molestamente nunca te da un ejemplo completo. Copié parte de su ejemplo, pero perdí la require valid-userparte. Un ejemplo completo puede ser algo maravilloso. Gracias.
Buttle Butkus
1
@sharif debería ser <Ubicación />, lo que significa que el acceso a la URL raíz de yourhost.com/ debería requerir esa configuración de autenticación
agbb
1
En <Location />cualquier caso, necesitaba no obtener un error de sintaxis al cargar el archivo de configuración.
Perseidas
3
¿Por qué fue <Location /> editado <Location>con un mensaje de registro interno de "arreglado ... para evitar muchos problemas", pero sin decir nada sobre la verdadera razón en la respuesta misma? No existe una <Location>directiva (es decir, una sin una ubicación) en Apache. Eso definitivamente causa problemas ahora. ;) (Ver, por ejemplo, arriba.)
Sz.
9

Estoy ejecutando Apache2 en ubuntu 10.04, el mismo problema y gracias por la solución. Descubrí que tenía que poner la configuración en/etc/apache2/apache2.conf

Puede generar el nombre de usuario y la contraseña utilizando htpasswd. Archivo nuevo:

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

Para agregar al archivo existente:

$ htpasswd -b /srv/auth/.htpasswd squire2 tickleme2
SLL
fuente
7

Puede proteger una ubicación o un directorio. Para un directorio, agregue algo como:

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

También puede agregar Denyy Allowdirectivas para un control más fino.

Dan Andreatta
fuente
4

Parece que está especificando la configuración de autenticación dentro de VirtualHost. Normalmente, esta configuración se especifica en la Directorydirectiva.

También puede usar .htaccesssarchivos, pero especificar en la configuración de Apache es un buen valor predeterminado, ya que tiene menos exposición.

Documentación de Apache

Warner
fuente
3

Estoy ejecutando Apache2 en ubuntu 10.10. He tenido problemas con todas las soluciones anteriores, pero esto funcionó bien (de los documentos de Apache):

<Directorio / var / www />
  Opciones Índices FollowSymLinks MultiViews
  Permitir anular todo
  Orden permitir, negar
  permitir de todos
  AuthType Basic
  AuthName "Restringido"
  Archivo AuthBasicProvider
  AuthUserFile / etc / users
  Requerir visitante de usuario
</Directory>

La mayor diferencia con respecto a las respuestas anteriores parece ser la directiva AuthBasicProvider establecida en "archivo" y la directiva Requerir que incluye el bit "usuario" antes del nombre de usuario real.

Espero que esto ayude a alguien.

Alex Beynenson
fuente
3

Estamos ejecutando una versión optimizada de memoria de apache, y encontramos este problema.

Esto se debió a que la siguiente línea no estaba presente en la configuración de apache:

LoadModule authz_user_module modules/mod_authz_user.so
DaveSB
fuente