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.

 

  1. 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é.

  1. 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

  1. 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.