Dans ce référentiel, nous avons tentés de mettre en place une authentification du serveur web apache graçe au protocole Kerberos.
Kerberos est un protocole d’authentification qui prend en charge le concept d’authentification unique (SSO). Après s’être authentifiés une fois au début d’une session, les utilisateurs peuvent accéder aux services réseau dans un domaine Kerberos sans s’authentifier à nouveau. Pour que cela fonctionne, il est nécessaire d’utiliser des protocoles réseau compatibles Kerberos.
Dans le cas de HTTP, la prise en charge de Kerberos est généralement fournie à l’aide du mécanisme d’authentification SPNEGO (Simple and Protected GSS-API Negotiation). Ceci est également connu sous le nom d'«authentification intégrée » ou « authentification de négociation ». Apache ne supporte pas SPNEGO lui-même, mais le support peut être ajouté au moyen du module d’authentification. mod_auth_kerb
Nous n'avons pas nécéssairement besoin de trois machines pour celà. Une machine peut tout à fait contennir deux rôles ( KDC et server). Mais dans notre cas, nous avons utilisé trois machines virtuelles sur VmWare Workstation Pro. Nos machines étant soit une distribution basé sur ubuntu, soit ubuntu. Nos machines étant toutes les trois virtuelles, Nous n'avons pas eu besoin de modifier l'adaptateur réseau par defaut (NAT) pour les attribuer des addresses ip; Vm Ware s'en est chargé.
Dans notre cas :
-
L’adresse IP de l’ordinateur client (machine virtuelle) est: 192.168.111.130
-
L’adresse IP de la machine du serveur web (machines virtuelles) est: 192.168.111.134
-
L’adresse IP de la machine KDC (machine virtuelle) est: 192.168.111.133
Nous pouvons vérifier les adresses IP des trois machines en les exécutant dans chacune d’elles. hostname -I
!! Étant donné que le protocole Kerberos implique un horodatage, les horloges des trois machines doivent être synchronisées.
Définissons des noms d’hôte pour chaque machine :
- Machine server web
hostnamectl --static set-hostname apacheserver.tek-up.de
- Machine KDC
hostnamectl --static set-hostname kdc.tek-up.de
- Machine cliente
hostnamectl --static set-hostname client.tek-up.de
Nous pouvons vérifier le nom d’hôte d’une machine en exécutant la commande: hostname
Ensuite, nous allons mapper ces noms d’hôte à leurs adresses IP correspondantes sur les trois machines à l’aide du fichier /etc/hosts
.
Maintenant, nous devons définir ci-dessous les informations sur /etc/hosts pour les trois machines :
<KDC_IP_ADDRESS> kdc.tek-up.de kdc
<APACHE_SERVER_ADDRESS> apacheserver.tek-up.de apacheserver
<CLIENT_ADDRESS> client.tek-up.de client
- Machine server web
$ sudo vim /etc/hosts
ou $ sudo nano /etc/hosts
- Machine KDC
$ sudo vim /etc/hosts
ou $ sudo nano /etc/hosts
- Machine cliente
$ sudo vim /etc/hosts
ou $ sudo nano /etc/hosts
Une fois la configuration terminée, nous pouvons vérifier si les trois machines sont accessibles graçe à la commande ping
.
Exemple sur la machine cliente:
Nous allons dans cette section, configurer kerberos dans nos machines.
Voici les packages à installer sur la KDC:
$ sudo apt update
$ sudo apt install krb5-kdc krb5-admin-server krb5-config
-
Lors de l’installation, il nous sera demandé de configurer:
- le royaume: 'TEK-UP.DE' (doit être tout en majuscules)
- le serveur Kerberos: 'kdc.tek-up.de'
- le serveur administratif du royaume: 'kdc.tek-up.de'
- fin d'installation
Royaume ou Realm est un réseau logique, similaire à un domaine, auquel appartiennent tous les utilisateurs et serveurs partageant la même base de données Kerberos.
La clé principale de cette base de données KDC doit être définie une fois l’installation terminée :
sudo krb5_newrealm
Les utilisateurs et les services d’un domaine sont définis comme un principal dans Kerberos. Ces principaux sont gérés par un utilisateur admin que nous devons créer manuellement :
$ sudo kadmin.local
kadmin.local: add_principal root/admin
kadmin.local est un programme d’administration de base de données KDC. Nous avons utilisé cet outil pour créer un nouveau principal dans le domaine TEK-UP.DE(). add_princ
Nous pouvons vérifier si l’utilisateur "root/admin" a été créé avec succès en exécutant la commande: kadmin.local: list_principals
Nous devrions voir le principal 'root/[email protected]' répertorié avec d’autres principaux par défaut.
Ensuite, nous devons accorder tous les droits d’accès à la base de données Kerberos à admin principal root / admin en utilisant le fichier de configuration /etc/krb5kdc/kadm5.acl .
sudo vim /etc/krb5kdc/kadm5.acl
Dans ce fichier, nous devons ajouter la ligne suivante :
Pour que les modifications prennent effet, nous devons redémarrer le service suivant:
sudo service krb5-admin-server restart
Une fois que l'utilisateur "admin" qui gère les principaux est créé, nous devons créer les principaux. Nous allons crééer des principaux pour la machine cliente et la machine serveur de web.
- Créons un mandataire pour le client :
$ sudo kadmin.local
kadmin.local: add_principal jean
- Créons un principal pour le serveur de service :
kadmin.local: add_princ -randkey apacheserver.tek-up.de
Nous pouvons vérifier la liste des principaux en exécutant la commande:
kadmin.local: list_principals
Installation de Apache2 :
$ sudo apt update -y
$ sudo apt install apache2 -y
Suite à l'installation, le serveur Apache2 est déjà démarré, on peut le vérifier avec la commande ci-dessous. Cela permettra de voir qu'il est bien actif.
$ sudo systemctl status apache2
Pour que notre serveur demarre automatiquement au démarrage de la machine, on doit executer la commande:
$ sudo systemctl enable apache2
Après l'installation, il est recommandé d'installer "curl", si l'on veut pouvoir lancer les connexion web de puis le navigater:
$ sudo apt install curl
Les fichiers et dossiers necessaires à la configuration des sites webs au travers des hôtes virtuels sont dans /etc/apache2
. ceux nous intéressant sont:
- Le fichier
apache2.conf
:
Contenant la configurations par defauts d'apache.
- Le dossier
conf-available
:
Contenant les configurations disponibles dans apache.
- Le dossier
conf-enabled
:
Contenant les configurations actives dans apache.
- Le dossier
mods-available
:
Contenant les modules prient en charges par apache.
- Le dossier
sites-available
:
Contenant les fichiers de configuration des sites web.
- NB:
Apache lit les fichier de configuration pas ordre numérique de 000 à XXX.
- Le dossier
sites-enabled
:
Contenant les fichiers des sites actif sur le serveur.
Pour ce Projet nous avons décider de changer la page html par défaut du serveur par un site web basic (sans Js ni Php).
- Nous allons créer un site sur notre serveur. Pour ma part, ce sera le site Cyberias.git, accessible également sur cyberias. Il sera stocké à l'emplacement suivant : /var/www/cyberias.
$ sudo mkdir /var/www/cyberias
www-data
etant l'utilisateur d'apache appartenant au groupewww-data
, nous allons changer le propriétaire de notre dossier ainsi que son groupe. Et vérifier l'effectiviter des changement graçe àls
:
$ sudo chown -R www-data:www-data /var/www/cyberias/
$ ls /var/www/cyberias -la
- Créons le fichier de configuration de notre site:
$ sudo vim sites-available/001-cyberias.conf
ou bien
$ sudo vim /etc/apache2/sites-available/001-cyberias.conf
- Configurons:
- Apache possède un outils de verification des fichiers de configurations nommé
configtest
, qui éffectu un test de ces fichiers (la syntaxe, indentation, etc ...). Il est accéssible par la commande:
$ /usr/sbin/apachectl configtest
- Nous devons activer notre site web. En créant un lien symbolique
sites-available
verssites-enabled
graçe à la commande:
$ sudo a2ensite 001-cyberias
- Nous avons créer un fichier
.htaccess
pour la gérer la réecriture de notre url. afin que chaque fois que nous taponswww.cyberias.com
l'url est reécrit encyberias.git
-
Pour éviter les érreurs
FORBIDEN
à cause de l'absance du fichier ou plutôt de lien symbolique de rewrite dansmods-enabled
, nous avons activer le module rewrite.- Le ficher rewrite est absent du dossier mods-enabled
ls mods-enabled | grep -i 'rewrite'
ou
ls /etc/apache2/mods-enabled | grep -i 'rewrite'
- Il fait bien parti des modules apache
ls mods-available | grep -i 'rewrite'
ou
ls /etc/apache2/mods-available | grep -i 'rewrite'
- Activons le module rewrite
sudo a2mond rewrite
- Nous avons modifier le fichier de configuration de la page par defaut afin qu'elle pointe ver notre site.
- Vérifions l'effectiviter de notre config dans
sites-enabled/
:
- pour que nos modification soit prise en compte, nous devons redemarrer notre serveur:
sudo systemctl reload apache2
-
Installation des Packages nécessaires:
- le package
libapache2-mod-auth-kerb
- le package
- le package
krb5-user
- Configuration de l'installation:
- Le royaume:
- Le serveur kerberos:
- Le serveur administrateur du royaume:
Nous devons extraire le principal du service de la base de données des principaux KDC dans un fichier keytab.
- Dans la machine KDC, exécutons la commande suivantes pour générer le fichier keytab:
$ sudo kadmin.local
kadmin.local: ktadd HTTP/[email protected]
- Vérifions que notre keytab a été créer, graçe à l'utilitaire
klist
:
sudo klist -kt /etc/krb5.keytab
-
Envoyez le fichier keytab de la machine KDC à la machine du serveur: ! Nous devons avoir openssh-server package installé sur le serveur:
sudo apt install openssh-server
-
Vérifiez que le principal du service a été extrait avec succès de la base de données KDC:
-
Répertorier la liste de clés actuelle:
ktutil: list
-
Lire un keytab krb5 dans la liste de touches actuelle
ktutil: read_kt /home/orphe/Bureau/krb5.keytab
-
Répertorier à nouveau la liste de clés actuelle
ktutil: list
-
- Modifions légèrement la configuration de notre site dans le fichier
001-cyberias.conf
, afin d'intégrer l'authentification kerberos. Ajouter ce qui suit dans<VirtualHost *:80> ...... </VirtualHost>
.
<Location /
AuthType Kerberos
AuthName "ce que vous voulez"
KrbAuthRealms TEK-UP.DE
KrbServiceName HTTP/apacheserver.tek-up.de
KrbMethodNegotiate on
KrbMethodK5Passwd off
Krb5Keytab /home/orphe/Bureau/krb5.keytab
</Location>
NB:
La
require valid-user
doit rester commenter ou ne même pas exister, sauf si vous voulez definir une liste d'utilisateur spécifique.
Notre serveur est bien accessible dépuis la machine cliente:
- Installation de
krb5-user
:
- Le royaume:
- Le serveur kerberos:
- le serveur administratif:
- Dans la machine cliente, vérifiez les informations d’identification mises en cache:
$ klist
- Initialez ensuite l’authentification de l’utilisateur:
$ kinit [email protected]
- Et vérifiez le ticket d’octroi de ticket (TGT):
$ klist
Si elle ne contient pas une liste d'utilisateur et n'est plus commenter, le client ne poura pas accerder au serveur.
Pour accéder au serveur après l'implémentation de Kerberos, utiliser :
curl --negotiate -u : apacheserver
ou
curl --negotiate -u : apacheserver.tek-up.de
ou encore
curl --negotiate -u : 192.168.111.134
-
Le client à accès au serveur
- Depuis le Terminal:
- Depuis le Navigateur web: