Activité 5
Mise en place de Kerberos et OpenLDAP
Contexte
Afin de pouvoir administrer les comptes des utilisateurs, Active Directory est souvent l’option de prédilection, cependant j’ai choisi d’utiliser uniquement des solutions open source et me suis donc dirigé vers une association d’OpenLDAP et Kerberos, qui servent la même fonction.
Objectif et enjeux
L’objectif de cette activité était de mettre en place une solution qui serve la même fonction qu’Active Directory qui puisse permettre de mettre en place des GPO et gérer les comptes utilisateurs.
Compétences
- Installation de logiciels
- Gestion des utilisateurs et groupes d’utilisateurs
- Mettre en place des GPO
Déscription de la situation de travail
Afin de trouver une alternative à Active Directory, il a fallu le décomposer en ses éléments principaux :
- Le DNS pour la résolution de noms
- Le protocole LDAP pour la gestion des annuaires
- Le protocole Kerberos pour la gestion des clefs de sécurité et de l’authentification
Ces trois services seront donc installés sur une machine virtuelle qui se chargera de l’administration du réseau. Pour cela j’ai installé des solutions open source pour chaque service.
- Bind9 Pour le DNS
La première étape pour le bon fonctionnement de cette installation est de mettre en place et de configurer un DNS. Ici j’ai choisi d’utiliser Bind9 qui est assez simple de configuration et simple d’installation.
L’installation se fait simplement par cette ligne de commande :
sudo apt install -y bind9 dnsutils
Une fois installé, il faut le configurer puis créer les zones DNS, la configuration principale se fait via le fichier named.conf situé dans /etc/bind . Celui-ci redirige vers trois autres fichiers : un pour les options : named.conf.options , et deux pour les zones DNS named.conf.local et named.conf.default-zones .
On commence alors par éditer le fichier named.conf.options et à remplacer son contenu pour une configuration simple qui pourra évoluer par la suite, en incluant également une ACL (règle d’accès) pour indiquer le réseau sur lequel les machines pourront contacter le DNS.
On vient ensuite ajouter les zones DNS dans named.conf.local :
Je copie ensuite le fichier db.local en changeant son nom pour m’en servir de modèle pour configurer mon fichier de zone.
Les différents appareils seront ajoutés au fur et à mesure. En attendant, le serveur DNS peut être démarré.
- Kerberos
OpenLDAP ne permettant pas à lui seul une authentification sécurisée car il envoie ses paquets en clair, Kerberos est utilisé pour la gestion des clefs et de l’authentification. Pour cela, j’installe les deux éléments de Kerberos : le KDC (gestionnaire de clefs) et le « kadmind » qui est le serveur maître de Kerberos et qui permettra l’administration de la base de données de Kerberos.
sudo apt install krb5-{admin-server,kdc}
Je rentre ensuite les informations demandées pour la configuration, le nom de domaine, l’emplacement des serveurs par defaut, leur noms, la création automatique de la configuration du KDC…
Je lance alors la création du territoire (realm) de Kerberos, ce sera le nom de sa zone d’execution.
sudo krb5_newrealm
J’ajuste ensuite le fichier /etc/krb5.conf , pour ajouter dans la section [domain_realm] les definitions des addresses du DNS qui correspondent au territoire de Kerberos. J’y ajoute aussi une section à la fin du fichier :
[logging]
kdc = FILE:/var/log/kerberos/krb5kdc.log
admin_server = FILE:/var/log/kerberos/kadmin.log
default = FILE:/var/log/kerberos/krb5lib.log
Puis pour créer le repertoire logging , et mettre à jour les permissions, je lance les commandes :
sudo mkdir /var/log/kerberos
sudo touch /var/log/kerberos/{krb5kdc,kadmin,krb5lib}.log
sudo chmod -R 750 /var/log/kerberos
sudo invoke-rc.d krb5-kdc restart
sudo invoke-rc.d krb5-admin-server restart
À partir de là, la configuration de base de kerberos est effectuée. Il faut alors définir les différents niveaux de droits qu’auront les différents comptes qui seront en relation avec Kerberos, en fonction de leurs catégories.
sudo kadmin.local
Authenticating as principal root/admin@RAYAN-POUSSUET.LOCAL with password.
add_policy -minlength 8 -minclasses 3 admin
add_policy -minlength 8 -minclasses 4 host
add_policy -minlength 8 -minclasses 4 service
add_policy -minlength 8 -minclasses 2 user
quit
Aucun compte utilisateur n’ayant été configuré, kadmin.local nous identifie en tant que root/admin, je créé donc le premier compte administrateur :
sudo kadmin.local
addprinc -policy admin rayan/admin
Enter password for principal « rayan/admin@RAYAN-POUSSUET.LOCAL »: PASSWORD
Re-enter password for principal « rayan/admin@RAYAN-POUSSUET.LOCAL « : PASSWORD
Principal « rayan/admin@RAYAN-POUSSUET.LOCAL » created.
quit
La même procedure peut être effectuée pour un compte lambda sans privilèges particuliers :
kadmin -p rayan/admin
Authenticating as principal rayan/admin@RAYAN-POUSSUET.LOCAL with password.
Password for rayan/admin@RAYAN-POUSSUET.LOCAL: PASSWORD
addprinc -policy user test
Enter password for principal « test@RAYAN-POUSSUET.LOCAL « : PASSWORD
Re-enter password for principal « test@RAYAN-POUSSUET.LOCAL »: PASSWORD
Principal « test@RAYAN-POUSSUET.LOCAL » created.
quit
Ainsi la configuration d’OpenLDAP et de Kerberos est faite, il ne reste qu’à les lier grâce à PAM. Je l’installe donc grâce à cette commande :
sudo apt install libpam-ldap libpam-krb5
- OpenLDAP pour le LDAP
Afin de permettre la gestion des annuaires, j’ai utilisé OpenLDAP qui s’occupera de la relation entre les utilisateurs, leurs droits et les différentes GPO qui leur seront associés.
Pour l’installer, je lance la commande suivante :
sudo apt-get install slapd ldap-utils
à l’installation, je choisis de ne pas omettre la configuration d’OpenLDAP, comme me le demande l’installateur et je réponds aux différentes questions de configuration : nom du domaine DNS, mot de passe, etc…
J’augmente ensuite le niveau de logs que je recevrai avec les commandes suivantes :
echo « dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: 256″ > /var/tmp/loglevel.ldif
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f /var/tmp/loglevel.ldif
OpenLDAP est donc opérationnel, il faut maintenant créer la structure en arborescence, avec en haut mon nom de domaine et ensuite les différents groupes, puis les utilisateurs ou les services. Pour cela, je créé un fichier LDIF simple pour ajouter mes deux premières oranizational units (ou). Sachant que je pourrais en ajouter par la suite.
echo «
dn: ou=Utilisateurs,dc=rayan-poussuet,dc=local
ou: Utilisateurs
objectClass: organizationalUnit
dn: ou=ServeursServices,dc=rayan-poussuet,dc=local
ou: ServeursServices
objectClass: organizationalUnit
» > /var/tmp/ou.ldif
Je les rentre ensuite dans le serveur OpenLDAP :
sudo invoke-rc.d slapd stop
sudo slapadd -c -v -l /var/tmp/ou.ldif
sudo invoke-rc.d slapd start
Une fois Les groups créés, je peux rentrer les utilisateurs sous la forme :
echo «
dn: cn=exemple,ou=Utilisateurs,dc=rayan-poussuet,dc=local
cn: exemple
gidNumber: 20000
objectClass: top
objectClass: posixGroup
uid: jerky
uidNumber: 20000
gidNumber: 20000
cn: Exemple
sn: Exemple
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
homeDirectory: /home/exemple
» > /var/tmp/exemple.ldif
Pour rentrer cet utilisateur dans OpenLDAP, je lance la commande suivante :
ldapadd -c -x -D cn=admin,dc=rayan-poussuet,dc=local -W -f /var/tmp/exemple.ldif
Conclusion
La solution d’utilisation d’OpenLDAP et de Kerberos demande beaucoup plus de mise en place et de temps qu’un serveur Active Directory, mais nous permet d’avoir un meilleur contrôle sur notre installation, tout en ayant le bénéfice de l’open source de pouvoir trouver très facilement de la documentation et une communauté très réactive et prête à aider les nouveaux utilisateurs.