- Kerberos is a computer network authentication protocol, which provides a secure Single Sign On (SSO) based on a trusted third-party mutual authentication service. It is secure because the user’s password is never transmitted over the wire. Kerberos uses Tickets which are negotiated with the server, with a limited time to live.
- In the case of HTTP, support for Kerberos is usually provided using the SPNEGO authentication mechanism (Simple and Protected GSS-API Negotiation). This is also known as ‘integrated authentication’ or ‘negotiate authentication’.
- Apache does not itself support SPNEGO, but support can be added by means of the
mod_auth_kerb
authentication module.
in this manipulation we will use 3 kali machines :
- KDC machine :
192.168.232.3
- Apache server machine :
192.168.232.6
- Client machine :
192.168.232.5
Virtual machines only have a NAT adapter by default but we will have to assign IP addresses to these machines, In order to do that we have to add a host-only adapter to each machine manually
Kerberos nécessite une synchronisation de horloges entre les 3 machines. Donc les horloges des 3 machines doivent être synchronisées.
System clock synchronized était initialisée à false. Pour l’activer :
sudo apt install systemd-timesyncd
sudo systemctl start systemd-timesyncd
sudo systemctl set-nyp true
KDC | Client | Service |
---|---|---|
Définissons des noms d'hôtes pour chaque machine:
Machine KDC | Machine Client | Machine Apache Server |
---|---|---|
NB: pour vérifier le nom d'hôte de chaque machine on utilise la commande :
hostname
Ensuite on mappe chaque nom d'hôte avec son IP address sur chaque machine . On accède alors au fichier au fichier /etc/hosts
et on ajoute ces lignes.
sudo nano /etc/hosts
Une fois la configuration terminée, nous pouvons vérifier si les 3 machines sont accessibles grâce à la commande ping
:
Machine KDC | Machine Client | Machine Apache Server |
---|---|---|
-
on installe les packages à installer sur la machine KDC:
sudo apt update
sudo apt install krb5-kdc krb5-admin-server krb5-config
Lors de l’installation , on doit configurer Kerberos comme suit
- Le realm :
INSAT.TN
(doit être écrit tout en majuscules) - Le serveur Kerberos :
kdc.insat.tn
- Le serveur administrateur du royaume :
kdc.insat.tn
Le realm de Kerberos est un terme utilisé dans le système d'authentification Kerberos. Il s'agit d'une chaîne de caractères qui identifie un domaine administratif unique pour l'ensemble des serveurs et des clients qui utilisent Kerberos pour l'authentification et l'autorisation.
- puis on exécute la commande :
sudo kerb5_newrealm
Elle nous demande alors d’entrer le KDC dataset master key
NB :
- La commande
sudo krb5_newrealm
est utilisée pour créer un nouveau royaume Kerberos sur un serveur. Cette commande est généralement utilisée par les administrateurs système qui mettent en place un nouvel environnement Kerberos.- Lorsque vous exécutez la commande
sudo krb5_newrealm
, elle vous invite à entrer plusieurs options de configuration, telles que le nom de royaume, le nom du serveur d'administration Kerberos et le royaume Kerberos par défaut pour les clients qui ne font pas partie du nouveau royaume. Une fois que vous avez saisi toutes les informations requises, la commande crée un nouveau royaume Kerberos et initialise la base de données Kerberos.
- Création des utilisateurs :
Les utilisateurs et les services d’un domaine sont définis comme des principals dans Kerberos . Ils sont gérés par un utilisateur admin que nous devons créer manuellement :
sudo kadmin.local
NB :
kadmin.local
est un utilitaire d'administration local pour Kerberos qui permet de gérer les principaux d'une base de données Kerberos à partir d'une ligne de commande.
- Pour vérifier la liste des principals:
list_principals
- 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 nano /etc/krb5kdc/kadm5.acl
-
Pour que les modifications prennent effet, nous devons redémarrer le service suivant:
sudo service krb5-admin-server restart
-
Maintenant on va créer des principaux pour la machine cliente et la machine apacheserver
Le principal pour le client |
---|
Le principal su server Apache |
-
on installe
apache2
:sudo apt update -y
sudo apt install apache2 -y
-
pour vérifier que Apache2 est déjà démarré :
sudo systemctl status apache2.service
-
pour que notre serveur démarre automatiquement au démarrage de la machine , on doit exécuter la commande:
sudo systemctl enable apache2
-
Après l’installation il est recommandé d’installer
curl
, si on veut pouvoir lancer les cnxs web depuis le navigateur:sudo apt install curl
-
Les fichiers et dossiers nécessaires à la configuration des sites webs au travers des hôtes virtuels sont dans
/etc/apache2
. ceux nous intéressant sont:
.
│ ...
├── etc
│ └── apache2
│ ├── apache2.conf # fichier contenant la configurations par defauts d'apache
│ ├── conf-available # dossier contenant les configurations disponibles dans apache
│ ├── conf-enabled # dossier contenant les configurations actives dans apache
│ ├── mods-available # dossier contenant les modules prient en charges par apache
│ └── sites-available # dossier contenant les fichiers de configuration des sites web
│ ...
NB:
* Le dossier sites-enabled : (contenant les fichiers des sites actif sur le serveur)
- Apache lit les fichier de configuration pas ordre numérique de
000
àXXX
.
Pour ce Projet nous avons décidé 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.Il sera stocké à l'emplacement suivant :
/var/www/sitesec
:
-
www-data
étant 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'effectivité des changement grâce àls
:sudo chown -R www-data:www-data /var/www/sitesec
ls /var/www/sitesec -la
- créons le fichier de configuration de notre site:
ls /var/www/sitesec -la
- Apache possède un outil de vérification des fichiers de configurations nommé
configtest
, qui effectue un test de ces fichiers (la syntaxe, indentation, etc ...). Il est accessible par la commande:
/usr/sbin/apache2ctl configtest
- nous devons activer notre site web. En créant un lien symbolique
sites-available
verssites-enabled
grâce à la commande :
sudo a2ensite 001-sitesec
- Nous avons créé un fichier
.htaccess
pour la gérer la réécriture de notre url. afin que chaque fois que nous taponswww.sitesec.com
l'url est reécrit ensitesec
- 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 fichier rewrite est absent du dossier
mods-enabled
:
- il fait bien parti des modules apache
- Activons le module rewrite :
- On va modifier le fichier de configuration de la page par défaut afin ls qu’elle pointe vers notre site :
- Vérifions l'effectivité de notre config dans
sites-enabled/
:
- pour que nos modification soit prise en compte, nous devons redémarrer notre serveur:
- Installation des Packages nécessaires:
- on doit configurer le royaume :
- 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, on va générer le fichier
keytab
:
sudo kadmin.local
- Vérifions que notre
keytab
a été créer:
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:
-
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:
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-sitesec.conf
, afin d'intégrer l'authentification kerberos. Ajouter ce qui suit dans<VirtualHost *:80> ...... </VirtualHost>
Notre serveur est bien accessible depuis la machine cliente :
- Dans la machine cliente, vérifiez les informations d’identification mises en cache:
klist
- Initialisez ensuite l’authentification de l’utilisateur:
kinit user@INSAT.TN
- et vérifiez le ticket d’octroi de ticket (TGT):
-
Pour accéder au serveur après l'implémentation de Kerberos :
- Depuis Le Terminal:
curl --negotiate -u : apacheserver.insat.tn
- Depuis Le Serveur Web :
- from another unauthorized user
Ce projet a été rélisé par :
Raoua Trimech | Hadil Helali |
---|