Ejercicio 2: Control de acceso, autenticación y autorización
ENTREGA
Parte 1
Captura accediendo a
departamentos.iesgn.org/intranet
desde nuestro host
Captura accediendo a
departamentos.iesgn.org/intranet
desde cliente
Parte 2
Captura accediendo a
departamentos.iesgn.org/internet
desde nuestro host
Captura accediendo a
departamentos.iesgn.org/internet
desde cliente
Parte 3
Mostrar que la autenticación básica funciona
Parte 4
Captura con las cabeceras HTTP donde se vea la autenticación básica
Se manda una cabecera Authorization
en la petición, con el mensaje dmlwOnZpcA==
en texto plano.
Con cualquier decodificador online de Base64 podemos averiguar lo que significa:
Pues bien, ahí tenemos el usuario y la contraseña que he introducido durante la autenticación básica.
Parte 5
Mostrar que la autenticación digest funciona
Pruebo el acceso con nodirectivo1
:
Pruebo el acceso con directivo1
:
Parte 6
Captura con las cabeceras HTTP donde se vea la autenticación digest
Parte 7
Mostrar el funcionamiento del ejercicio 4
Prueba de acceso desde cliente:
Prueba de acceso desde mi máquina:
Entregar la configuración realizada
Modifico /etc/apache2/sites-available/departamentos.conf
:
<Directory "/var/www/departamentos/secreto">
<RequireAny>
<RequireAll>
Require ip 10.0.0
</RequireAll>
<RequireAll>
Require ip 192.168.121
AuthType Digest
AuthName "directivos"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</RequireAll>
</RequireAny>
</Directory>
Reinicio Apache:
Preliminares
Control de acceso
¿Control de acceso por defecto de 000-default?
En 000-default.conf
no hay control de acceso definido, pero como el DocumentRoot está en /var/www/html
, le afecta la siguiente directiva de apache2.conf
:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
EJERCICIOS
Ejercicio 0
Definir escenario Vagrant:
- Servidor:
- Interfaz eth0 (NAT) actuando como pública
- Interfaz privada (veryisolated)
- Cliente conectado a la red privada
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.define :ej2controlacceso do |ej2controlacceso|
ej2controlacceso.vm.box = "debian/bullseye64"
ej2controlacceso.vm.hostname = "ej2controlacceso"
ej2controlacceso.vm.network :private_network,
:libvirt__network_name => "ej2controlaccesonet",
:libvirt__dhcp_enabled => false,
:ip => "10.0.0.2",
:libvirt__forward_mode => "veryisolated"
end
config.vm.define :cliente do |cliente|
cliente.vm.box = "debian/bullseye64"
cliente.vm.hostname = "cliente"
cliente.vm.network :private_network,
:libvirt__network_name => "ej2controlaccesonet",
:libvirt__dhcp_enabled => false,
:ip => "10.0.0.3",
:libvirt__forward_mode => "veryisolated"
end
end
Crear VirtualHost
departamentos.iesgn.org
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName departamentos.iesgn.org
DocumentRoot /var/www/departamentos
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Ejercicio 1
A
departamentos.iesgn.org/intranet
:
- Se permite acceso desde cliente
- Se deniega acceso desde nuestra máquina
Modificar /etc/apache2/sites-available/departamentos.conf
:
Reiniciar Apache:
Prueba de acceso desde mi máquina:
Prueba de acceso desde cliente:
He usado "lynx".
A
departamentos.iesgn.org/internet
:
- Se permite acceso desde nuestra máquina
- Se deniega acceso desde cliente
Modificar /etc/apache2/sites-available/departamentos.conf
:
Reiniciar Apache:
Prueba de acceso desde mi máquina:
Prueba de acceso desde cliente:
Ejercicio 2
Autenticación básica en
departamentos.iesgn.org/secreto
Creo el fichero htpasswd
:
He añadido un usuario "vip" con contraseña "vip".
Comprobamos que se ha creado htpasswd
y sus contenidos:
Modifico /etc/apache2/sites-available/departamentos.conf
:
<Directory "/var/www/departamentos/secreto">
AuthType Basic
AuthName "Acceso para VIPs"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
Reinicio Apache:
Pruebo que funciona:
Comprobar las cabeceras HTTP durante la autenticación básica ¿Cómo se manda la contraseña entre el cliente y el servidor?
Se manda una cabecera Authorization
en la petición, con el mensaje dmlwOnZpcA==
en texto plano.
Con cualquier decodificador online de Base64 podemos averiguar lo que significa:
Pues bien, ahí tenemos el usuario y la contraseña que he introducido durante la autenticación básica.
Ejercicio 3
Modificar la autenticación a tipo digest, y hacer que
departamentos.iesgn.org/secreto
sólo sea accesible por usuarios del grupo directivos
Sobreescribo el antiguo fichero htpasswd
añadiendo un usuario directivo:
Añado también un usuario no directivo:
Ambos usuarios tienen como contraseña "1234".
Ahora el fichero .htpasswd
luce de la siguiente manera:
directivo1:directivos:4fdd1584741ce8cc0d722a82af5d2a1f
nodirectivo1:nodirectivos:305a303414ab365e1637a8f26f2c30cc
Habilito el módulo necesario:
Modifico /etc/apache2/sites-available/departamentos.conf
:
<Directory "/var/www/departamentos/secreto">
AuthType Digest
AuthName "directivos"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
Reinicio Apache:
Pruebo el acceso con nodirectivo1
:
Pruebo el acceso con directivo1
:
Comprobar las cabeceras HTTP durante la autenticación digest ¿Cómo funciona esta autenticación?
Ahora en la cabecera Authorization
de la petición, se manda un campo response
que contiene las credenciales enviadas encriptadas.
No hay manera de sacar la contraseña en texto plano a partir de ese mensaje encriptado, ya que el sistema se hizo así intencionamente para que no fuese posible.
Ejercicio 4
Para acceder a
departamentos.iesgn.org/secreto
:
- No pide autenticación desde la intranet
- Pide autenticación desde nuestro host
Modifico /etc/apache2/sites-available/departamentos.conf
:
<Directory "/var/www/departamentos/secreto">
<RequireAny>
<RequireAll>
Require ip 10.0.0
</RequireAll>
<RequireAll>
Require ip 192.168.121
AuthType Digest
AuthName "directivos"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</RequireAll>
</RequireAny>
</Directory>
Reinicio Apache:
Prueba de acceso desde cliente:
Prueba de acceso desde mi máquina: