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.
- Editar el fichero de configuración del host virtual:
sudo nano /etc/apache2/sites-available/sitio1.conf - 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.100y127.0.0.1):<Directory /www/sitio1/> Order Allow, Deny Allow from 192.168.1.100 127.0.0.1 </Directory> - Guardar y salir del editor.
- Reiniciar Apache para aplicar los cambios:
sudo systemctl restart apache2 - Verificación. Ahora, si intentamos acceder a
http://sitio1.localdesde 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.
- Editar el fichero de configuración del host virtual:
sudo nano /etc/apache2/sites-available/sitio1.conf - 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> - Guardar y salir del editor.
- Reiniciar Apache para aplicar los cambios:
sudo systemctl restart apache2 - Verificación. Ahora, si intentamos acceder a
http://sitio1.localdesde la IP192.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.
- 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 - Crear el archivo de contraseñas utilizando la herramienta
htpasswd:Se te pedirá que ingreses y confirmes la contraseña para cada usuario.sudo htpasswd -c /etc/apache2/.htpasswd usuario1 sudo htpasswd /etc/apache2/.htpasswd usuario2 sudo htpasswd /etc/apache2/.htpasswd usuario3 - Editar el fichero de configuración del host virtual:
sudo nano /etc/apache2/sites-available/sitio1.conf - 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> - Guardar y salir del editor.
- Reiniciar Apache para aplicar los cambios:
sudo systemctl restart apache2 - 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.htpasswdpodrá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:
- Crear el archivo de grupos:
Agrega el siguiente contenido para definir un grupo llamado
sudo nano /etc/apache2/.htgroupadminque incluyeusuario1yusuario2:Guarda y cierra el archivo.admin: usuario1 usuario2 otros: usuario3 - Editar el fichero de configuración del host virtual:
sudo nano /etc/apache2/sites-available/sitio1.conf - 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> - Guardar y salir del editor.
- Recargar Apache para aplicar los cambios:
sudo systemctl reload apache2 - Verificación. Ahora, si intentamos acceder a
http://sitio1.local/protegido, solo los usuarios que pertenezcan al grupoadminpodrán acceder al recurso.