Autenticación en Apache

Resumen de una línea

Control acceso por autenticación: directiva Require, autenticación básica (HTTP Basic Auth), digest, políticas complejas, archivo .htaccess.

Información

Directiva Require (Autorización)

Control de acceso a recursos. Versión Apache 2.4 (no 2.2):

# Acceso público
Require all granted
 
# Acceso denegado
Require all denied
 
# Solo usuarios autenticados
Require valid-user
 
# Usuarios específicos
Require user juan maria
 
# Grupo específico
Require group admin
 
# IP específica
Require ip 10.0.0.0/8 192.168.1.0/24
 
# Hosts específicos
Require host www.ejemplo.com
 
# Localhost solo
Require local
 
# Negación (NOT)
Require not ip 192.168.1.100

Combinaciones Lógicas

RequireAll, RequireAny, RequireNone para lógica compleja:

# AND (todos deben cumplirse)
<RequireAll>
    Require method GET POST
    Require ip 192.168.1.0/24
</RequireAll>
# Solo GET/POST desde red interna
 
# OR (al menos uno)
<RequireAny>
    Require ip 192.168.1.0/24
    Require user admin
</RequireAny>
# Acceso desde red interna O usuario admin
 
# Negación
<RequireNone>
    Require ip 192.168.1.100
</RequireNone>
# Denegar IP 192.168.1.100

Autenticación Básica (HTTP Basic Auth)

Usuario/contraseña en Base64 (poco seguro sin HTTPS):

<Directory /var/www/privado>
    AuthType Basic
    AuthName "Área Privada"              # Mensaje en popup navegador
    AuthUserFile /etc/apache2/.htpasswd  # Fichero usuarios
    Require valid-user
</Directory>

Crear archivo .htpasswd

# Crear con primer usuario
htpasswd -c /etc/apache2/.htpasswd juan
# New password: ****
# Re-type password: ****
 
# Agregar usuario (sin -c para no sobrescribir)
htpasswd /etc/apache2/.htpasswd maria
 
# Ver contenido
cat /etc/apache2/.htpasswd
# juan:$apr1$ABC123...
# maria:$apr1$XYZ456...
 
# Eliminar usuario
htpasswd -D /etc/apache2/.htpasswd juan

Autenticación Digest

Más segura (hash contraseña, no Base64):

<Directory /var/www/privado>
    AuthType Digest
    AuthName "Área Privada"
    AuthUserFile /etc/apache2/.htdigest
    Require valid-user
</Directory>

Crear archivo .htdigest

# Crear usuario (AuthName debe coincidir)
htdigest -c /etc/apache2/.htdigest "Área Privada" juan
# Adding password for juan in realm Área Privada.
# New password: ****
# Re-type password: ****
 
# Agregar usuario
htdigest /etc/apache2/.htdigest "Área Privada" maria

Archivo .htaccess

Permite sobrescribir directivas en fichero .htaccess en directorio (sin reiniciar Apache):

# /var/www/privado/.htaccess
AuthType Basic
AuthName "Privado"
AuthUserFile /var/www/privado/.htpasswd
Require valid-user
 
# Solo en contexto Directory si AllowOverride AuthConfig
<Directory /var/www/privado>
    AllowOverride AuthConfig
</Directory>

Ventajas:

  • Sin reiniciar Apache
  • Usuario puede gestionar sin acceso root
  • Distribuido en directorios

Desventajas:

  • Menos eficiente (busca .htaccess en cada request)
  • AllowOverride None más seguro

Combinación Autenticación + Require

<Directory /var/www/secreto>
    # Primero: autenticación
    AuthType Basic
    AuthName "Zona Secreta"
    AuthUserFile /etc/apache2/.htpasswd
    
    # Luego: autorización (usuario debe estar + ser admin)
    <RequireAll>
        Require valid-user
        Require group admin
    </RequireAll>
</Directory>

Migración Apache 2.2 → 2.4

Antiguo (2.2 - Obsoleto):

Allow from 192.168.1.0/24
Deny from all
Order allow,deny

Nuevo (2.4 - Usar):

Require ip 192.168.1.0/24

Casos de Uso

Área privada basic auth

<Directory /var/www/admin>
    AuthType Basic
    AuthName "Admin Only"
    AuthUserFile /etc/apache2/.htpasswd
    Require user admin
</Directory>

Acceso solo red interna

<Directory /var/www/intranet>
    Require ip 192.168.0.0/16
</Directory>

Múltiples condiciones

<Directory /var/www/datos>
    AuthType Basic
    AuthName "Datos Empresa"
    AuthUserFile /etc/apache2/.htpasswd
    
    <RequireAll>
        Require valid-user
        Require ip 192.168.0.0/16
    </RequireAll>
    # Solo usuarios autenticados desde red interna
</Directory>

Relaciones

Conecta con

  • Apache — Servidor web
  • seguridad — Control acceso, autenticación
  • Configuración de Apache — Directivas Apache
  • TLS — HTTPS recomendado con autenticación basic

Fuentes