Saltar a contenido

P2.8 Control de acceso

El control de acceso es una parte fundamental de la administración de servidores web. Permite restringir o denegar el acceso a ciertos recursos basándose en criterios como la dirección IP del cliente, el nombre de usuario o el grupo al que pertenece.

Control mediante direcciones IP

El control de acceso mediante direcciones IP es una forma común de restringir el acceso a ciertos recursos en un servidor Apache. Podemos permitir o denegar el acceso basándonos en la dirección IP del cliente. Para eso, utilizamos las directivas Allow from y Deny from. Ademas, estableceremos un valor por defecto con la directiva Order.

  1. Editar el fichero de configuración del host virtual:
    sudo nano /etc/apache2/sites-available/sitio1.conf
    
  2. Agregar las directivas de control de acceso. Dentro del bloque <VirtualHost>, agrega las siguientes líneas para denegar por defecto y permitir solo a una IP específica (por ejemplo, 192.168.1.100 y 127.0.0.1):
    <Directory /www/sitio1/>
        Order Allow, Deny
        Allow from 192.168.1.100 127.0.0.1
    </Directory>
    
  3. Guardar y salir del editor.
  4. Reiniciar Apache para aplicar los cambios:
    sudo systemctl restart apache2
    
  5. Verificación. Ahora, si intentamos acceder a http://sitio1.local desde una IP diferente a las permitidas, deberíamos recibir un error de acceso denegado (403 Forbidden). Solo las IPs especificadas podrán acceder al recurso.

La otra opción es permitir por defecto y denegar solo a una IP específica.

  1. Editar el fichero de configuración del host virtual:
    sudo nano /etc/apache2/sites-available/sitio1.conf
    
  2. Agregar las directivas de control de acceso. Dentro del bloque <VirtualHost>, agrega las siguientes líneas para permitir por defecto y denegar solo a una IP específica (por ejemplo, 192.168.1.200):
    <Directory /www/sitio1/>
        Order Deny, Allow
        Deny from 192.168.1.200
    </Directory>
    
  3. Guardar y salir del editor.
  4. Reiniciar Apache para aplicar los cambios:
    sudo systemctl restart apache2
    
  5. Verificación. Ahora, si intentamos acceder a http://sitio1.local desde la IP 192.168.1.200, deberíamos recibir un error de acceso denegado (403 Forbidden). Solo las IPs especificadas podrán acceder al recurso.

Control mediante autenticación básica

La autenticación básica es un método sencillo para proteger recursos en un servidor web. Requiere que los usuarios proporcionen un nombre de usuario y una contraseña para acceder a ciertos recursos. Para implementar la autenticación básica en Apache, utilizaremos las directivas AuthType, AuthName, AuthUserFile, y Require.

  1. Crear el directorio protegido:
    sudo mkdir -p /www/sitio1/protegido
    sudo touch /www/sitio1/protegido/index.html
    echo "<h1>Área Protegida</h1><p>Solo usuarios autorizados pueden ver este contenido.</p>" | sudo tee /www/sitio1/protegido/index.html
    
  2. Crear el archivo de contraseñas utilizando la herramienta htpasswd:
    sudo htpasswd -c /etc/apache2/.htpasswd usuario1
    sudo htpasswd /etc/apache2/.htpasswd usuario2
    sudo htpasswd /etc/apache2/.htpasswd usuario3
    
    Se te pedirá que ingreses y confirmes la contraseña para cada usuario.
  3. Editar el fichero de configuración del host virtual:
    sudo nano /etc/apache2/sites-available/sitio1.conf
    
  4. Agregar las directivas de autenticación. Dentro del bloque <VirtualHost>, agrega las siguientes líneas para proteger el directorio /protegido:
    <Directory /www/sitio1/protegido/>
        AuthType Basic
        AuthName "Área Protegida"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user  
    </Directory>
    
  5. Guardar y salir del editor.
  6. Reiniciar Apache para aplicar los cambios:
    sudo systemctl restart apache2
    
  7. Verificación. Ahora, si intentamos acceder a http://sitio1.local/protegido, se nos solicitará un nombre de usuario y una contraseña. Solo los usuarios definidos en el archivo .htpasswd podrán acceder al recurso.

Autenticación por grupos

También es posible restringir el acceso a ciertos usuarios basándonos en grupos. Para ello, utilizaremos la directiva AuthGroupFile.

Necesitaremos primero activar el módulo de autenticación por grupos:

sudo a2enmod authz_groupfile
sudo systemctl restart apache2

Una vez activado, seguimos estos pasos:

  1. Crear el archivo de grupos:
    sudo nano /etc/apache2/.htgroup
    
    Agrega el siguiente contenido para definir un grupo llamado admin que incluye usuario1 y usuario2:
    admin: usuario1 usuario2
    otros: usuario3
    
    Guarda y cierra el archivo.
  2. Editar el fichero de configuración del host virtual:
    sudo nano /etc/apache2/sites-available/sitio1.conf
    
  3. Actualizar las directivas de autenticación. Dentro del bloque <VirtualHost>, actualiza las líneas para utilizar el archivo de grupos:
    <Directory /www/sitio1/protegido/>
        AuthType Basic
        AuthName "Área Protegida"
        AuthUserFile /etc/apache2/.htpasswd
        AuthGroupFile /etc/apache2/.htgroup
        Require group admin
    </Directory>
    
  4. Guardar y salir del editor.
  5. Recargar Apache para aplicar los cambios:
    sudo systemctl reload apache2
    
  6. Verificación. Ahora, si intentamos acceder a http://sitio1.local/protegido, solo los usuarios que pertenezcan al grupo admin podrán acceder al recurso.