Skip to content

Dans ce référentiel, nous avons tenté de mettre en place une authentification du serveur apache grace au protocole "Kerberos".

Notifications You must be signed in to change notification settings

pra-tek/Authentification-serveur-apache-avec-kerberos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 

Repository files navigation

Authentification-serveur-apache-avec-kerberos

Dans ce référentiel, nous avons tentés de mettre en place une authentification du serveur web apache graçe au protocole Kerberos.

Introduction à 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

Kerberos en Image

Hôtes et adresse ip

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.

apacheserver

kdc

client

Définissons des noms d’hôte pour chaque machine :

  • Machine server web

hostnamectl --static set-hostname apacheserver.tek-up.de

apacheserver

  • Machine KDC

hostnamectl --static set-hostname kdc.tek-up.de

kdc

  • Machine cliente

hostnamectl --static set-hostname client.tek-up.de

client

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

apacheserver

  • Machine KDC

$ sudo vim /etc/hosts ou $ sudo nano /etc/hosts

kdc

  • Machine cliente

$ sudo vim /etc/hosts ou $ sudo nano /etc/hosts

client

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:

client

client

Configuration des machines:

Nous allons dans cette section, configurer kerberos dans nos machines.

Centre de Distribution de Clés (KDC):

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)

kdc

  • le serveur Kerberos: 'kdc.tek-up.de'

kdc

  • le serveur administratif du royaume: 'kdc.tek-up.de'

kdc

  • fin d'installation

kdc

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

kdc

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

kdc

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.

kdc

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 :

kdc

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

kdc

  • Créons un principal pour le serveur de service :
kadmin.local:  add_princ -randkey apacheserver.tek-up.de

kdc

Nous pouvons vérifier la liste des principaux en exécutant la commande:

kadmin.local: list_principals

kdc

Le serveur web apache:

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

apacheserver

Pour que notre serveur demarre automatiquement au démarrage de la machine, on doit executer la commande:

$ sudo systemctl enable apache2

apacheserver

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.

apacheserver

  • Le dossier sites-enabled:

Contenant les fichiers des sites actif sur le serveur.

apacheserver

Configuration du serveur pour notre site

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 groupe www-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

apacheserver

  • 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

apacheserver

  • Configurons:

apacheserver

  • 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

apacheserver

  • Nous devons activer notre site web. En créant un lien symbolique sites-available vers sites-enabled graçe à la commande:
$ sudo a2ensite 001-cyberias

apacheserver

  • Nous avons créer un fichier .htaccess pour la gérer la réecriture de notre url. afin que chaque fois que nous tapons www.cyberias.com l'url est reécrit en cyberias.git

apacheserver

  • Pour éviter les érreurs FORBIDEN à cause de l'absance du fichier ou plutôt de lien symbolique de rewrite dans mods-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'

apacheserver

  • Il fait bien parti des modules apache
ls mods-available | grep -i 'rewrite'
ou
ls /etc/apache2/mods-available | grep -i 'rewrite'

apacheserver

  • Activons le module rewrite
sudo a2mond rewrite

apacheserver

  • Nous avons modifier le fichier de configuration de la page par defaut afin qu'elle pointe ver notre site.

apacheserver

  • Vérifions l'effectiviter de notre config dans sites-enabled/:

apacheserver

  • pour que nos modification soit prise en compte, nous devons redemarrer notre serveur:
sudo systemctl reload apache2

apacheserver

Configuration Kerberos

  • Installation des Packages nécessaires:

    • le package libapache2-mod-auth-kerb

apacheserver

  • le package krb5-user

apacheserver

  • Configuration de l'installation:
    • Le royaume:

apacheserver

  • Le serveur kerberos:

apacheserver

  • Le serveur administrateur du royaume:

apacheserver

Préparation du fichier keytab

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]

kdc

  • Vérifions que notre keytab a été créer, graçe à l'utilitaire klist:
sudo klist -kt /etc/krb5.keytab

kdc

  • 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 kdc

  • 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

apacheserver

Configuration de notre site :

  • 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>

apacheserver

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.

Le client

Notre serveur est bien accessible dépuis la machine cliente:

client

client

Préparation de Kerberos

  • Installation de krb5-user:

client

  • Le royaume:

client

  • Le serveur kerberos:

client

  • le serveur administratif:

client

Authentification du client

  • Dans la machine cliente, vérifiez les informations d’identification mises en cache:

$ klist

  • Initialez ensuite l’authentification de l’utilisateur:

$ kinit [email protected]

client

  • 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

client

client

client

La configuration est parfaite

  • Le client à accès au serveur

    • Depuis le Terminal:

Aperçu du site depuis le terminal

  • Depuis le Navigateur web:

Aperçu du site depuis le navigateur  web

Réference de travail

About

Dans ce référentiel, nous avons tenté de mettre en place une authentification du serveur apache grace au protocole "Kerberos".

Resources

Stars

Watchers

Forks