Ejercicio 2: Control de acceso, autenticación y autorización
ENTREGA
Parte 1
Captura accediendo a
departamentos.iesgn.org/intranetdesde nuestro host

Captura accediendo a
departamentos.iesgn.org/intranetdesde cliente

Parte 2
Captura accediendo a
departamentos.iesgn.org/internetdesde nuestro host

Captura accediendo a
departamentos.iesgn.org/internetdesde 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/secretosó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:
