Dans le cadre du Hackathon nous avons souhaité tester l’utilisation de la solution FreeIPA afin d’authentifier un parc de postes clients libres.

FreeIPA est une solution intégrée de gestion d’information de sécurité comprenant :

Cette solution gère l’authentification, l’autorisation et le suivi des connexions d’environnements réseaux GNU/Linux et UNIX de façon centralisée.

Contexte de l’expérimentation

Notre expérimentation a été réalisée dans un environnement virtualisé OpenNebula.

Voici les informations de contexte que nous avons choisi afin de permettre à tous de la reproduire :

Installer FreeIPA

La solution FreeIPA est empaquetée pour la plupart des distributions majeures, nous utiliserons une distribution CentOS dans notre exemple.

Pré-requis

La documentation en anglais de FreeIPA décrit très bien les pré-requis de l’installation de FreeIPA :

  • Une configuration DNS correcte, étant donné que la procédure d’initialisation fera des vérifications poussées ;
  • Un nom d’hôte statique, car si le nom d’hôte change l’authentification Kerberos ne peut plus fonctionner.

Installer les paquets logiciels

Sur la machine CentOS à jour, vous devez installer les paquets suivants :

  • ipa-server : méta-paquet permettant d’installer la solution ;
  • ipa-server-dns : méta-paquet permettant à FreeIPA de gérer la zone DNS directement.

Procéder à l’installation en exécutant la commande suivante :

[root@master ~]# yum install ipa-server ipa-server-dns

Cela doit prendre environ 120Mo sur le disque, une fois terminé, le serveur est prêt à être initialisé.

Initialiser le domaine FreeIPA

L’initialisation d’un domaine FreeIPA s’effectue avec avec la commande ipa-server-install, cette commande fonctionne soit de façon interactive, soit avec des options de ligne de commande.

Pour initialiser le serveur dans notre environnement, nous exécutons la commande suivante :

[root@master ~]# ipa-server-install \
    --realm=IPA.EXAMPLE \
    --domain=ipa.example \
    --hostname=master.ipa.example \
    --ssh-trust-dns \
    --setup-dns \
    --forwarder=192.168.232.2

Après avoir confirmé les informations et saisi les mots de passe de l’administrateur de l’annuaire et de l’administrateur du domaine, la commande se termine par les messages suivants :

==============================================================================
Setup complete

Next steps:
        1. You must make sure these network ports are open:
                TCP Ports:
                  * 80, 443: HTTP/HTTPS
                  * 389, 636: LDAP/LDAPS
                  * 88, 464: kerberos
                  * 53: bind
                UDP Ports:
                  * 88, 464: kerberos
                  * 53: bind
                  * 123: ntp

        2. You can now obtain a kerberos ticket using the command: 'kinit admin'
           This ticket will allow you to use the IPA tools (e.g., ipa user-add)
           and the web user interface.

Be sure to back up the CA certificates stored in /root/cacert.p12
These files are required to create replicas. The password for these
files is the Directory Manager password

Administrer FreeIPA

L’administration du service peut s’effectuer de deux façon :

  • en ligne de commande ;
  • par une interface web.

Ligne de commande

L’utilisation de la ligne de commande nécessite l’obtention d’un ticket Kerberos pour l’utilisateur admin créé pendant l’initialisation du serveur.

Pour obtenir un ticket Kerberos, il faut utiliser la commande kinit :

[root@master ~]# kinit admin
Password for admin@IPA.EXAMPLE: <SAISIE DU MOT DE PASSE ADMIN>

Vous pouvez vérifier les tickets en cours avec la commande klist :

[root@master ~]# klist
Ticket cache: KEYRING:persistent:0:0
Default principal: admin@IPA.EXAMPLE

Valid starting Expires Service principal
15/01/2018 13:21:55 16/01/2018 13:21:49 krbtgt/IPA.EXAMPLE@IPA.EXAMPLE

Vous pouvez ensuite gérer votre serveur grâce à la commande ipa, par exemple pour créer un utilisateur :

[root@master ~]# ipa user-add --first=Santenay --last=Sous-La-Roche santenay.sous-la-roche
---------------------------------------------
Utilisateur « santenay.sous-la-roche » ajouté
---------------------------------------------
  Identifiant de connexion: santenay.sous-la-roche
  Prénom: Santenay
  Nom: Sous-La-Roche
  Nom complet: Santenay Sous-La-Roche
  Nom affiché: Santenay Sous-La-Roche
  Initiales: SS
  Répertoire personnel: /home/santenay.sous-la-roche
  GECOS: Santenay Sous-La-Roche
  Interpréteur de commande: /bin/sh
  Nom principal: santenay.sous-la-roche@IPA.EXAMPLE
  Principal alias: santenay.sous-la-roche@IPA.EXAMPLE
  Adresse courriel: santenay.sous-la-roche@ipa.example
  UID: 1403600005
  GID: 1403600005
  Mot de passe: False
  Membre des groupes: ipausers
  Clés Kerberos disponibles: False

Notre utilisateur est alors créé, sans mot de passe.

Interface web

Certaines opérations peuvent paraître plus confortables avec une interface graphique, FreeIPA fournit une interface web couvrant presque toutes les fonctionnalités de la ligne de commande.

La connexion s’effectue en HTTPS sur le serveur FreeIPA : https://master.ipa.example/

Mire d’authentification de l’interface d’administration Web

Mire d’authentification de l’interface d’administration Web

Par défaut, le certificat est celui généré par la PKI interne de FreeIPA :

L’interface d’administration Web utilise des certificats internes

L’interface d’administration Web utilise des certificats internes

Une fois connecté, l’interface s’ouvre sur la gestion des identités et affiche le seul utilisateur actif après l’installation admin :

Tableau de bord de l’interface d’administration

Tableau de bord de l’interface d’administration

Nous pouvons ajouter un nouvel utilisateur et définir son mot de passe de première connexion, un mot de passe est par défaut défini comme expiré, nécessitant son changement à la première connexion :

Création de l’utilisateur corton.charlemagne

Création de l’utilisateur corton.charlemagne

Nous sommes maintenant prêt à configurer un poste GNU/Linux.

Intégrer un client lourd GNU/Linux

Les tests ont été effectués avec une distribution Debian GNU/Linux Sid utilisant le bureau GNOME 3.

  • S’assurer de la configuration DNS : utiliser l’adresse IP du serveur FreeIPA comme serveur DNS récursif ;
  • S’assurer que le client est à l’heure, pour les tests nous avons utilisé le fuseau horaire du Japon afin de vérifier que cela fonctionne avec un serveur d’un autre fuseau horaire.

Installer les paquets logiciels

Sur la distribution GNU/Linux le paquet à installer est nommé freeipa-client :

pcadmin@debian-gnome:~$ sudo apt install freeipa-client

Intégrer le poste client

L’intégration du poste client se fait simplement avec la commande ipa-client-install. Cette commande peut être exécutée de façon interactive ou en lui passant des options de la ligne de commande.

Nous procédons à l’intégration en exécutant la commande suivante :

pcadmin@debian-gnome:~$ sudo ipa-client-install \
     --domain=ipa.example \
    --mkhomedir \
    --ntp-server=master.ipa.example \
    --ssh-trust-dns

La commande demande les paramètres de connexion d’un compte utilisateur permettant d’intégrer la machine, le compte admin dans notre cas.

Nous pouvons dorénavant afficher les utilisateurs du domaine à l’aide de la commande id :

pcadmin@debian-gnome:~$ id admin
uid=1403600000(admin) gid=1403600000(admins) groupes=1403600000(admins)

Connecter un utilisateur du domaine

Nous pouvons nous connecter avec un utilisateur du domaine :

Invite de connexion GDM3

Invite de connexion GDM3

Le mot de passe doit être changé à la première connexion d’un utilisateur, celui-ci étant défini comme expiré par défaut :

Changement de mot de passe à la première connexion

Changement de mot de passe à la première connexion

Le bureau GNOME 3 s’affiche et nous somme bien reconnus avec nos informations d’identité :

Le bureau GNOME 3

Le bureau GNOME 3

Utiliser FreeIPA avec LTSP

Afin de vérifier la pertinence de la solution, nous avons essayer de faire fonctionner l’authentification LTSP avec FreeIPA et cela a été un succès sans aucun effort supplémentaire.

Pour aller au plus simple, nous avons réutilisé le poste GNU/Linux lourd déjà installé et configuré afin de le transformer en serveur LTSP :

  • Installer le paquet ltsp-server-standalone qui fourni tout ce qui est nécessaire au fonctionnement (DHCP et TFTP) ;
  • Configurer les services comme décrit dans le Howto Debian ;
  • Générer l’image du client léger.

Lorsqu’une machine démarre en PXE :

  1. Le serveur DHCP lui signale où télécharger le noyau à démarrer ;
  2. La machine télécharge par TFTP le noyau et l’initramfs et les utilise pour démarrer ;
  3. Le système démarre et affiche la mire d’authentification LTSP ;
  4. Un utilisateur déclaré dans FreeIPA peut alors se connecter avec ses identifiants.

Une fois le compte corton.charlemagne déconnecté de la console physique de la machine Debian GNU/Linux, nous pouvons nous connecter avec ce compte sur LTSP :

Mire d’authentification LTSP

Mire d’authentification LTSP

Une fois connecté, nous avons accès au même bureau qu’en connexion locale, mais nous pouvons aussi exécuter des programmes embarqués dans l’image du client léger :

Session GNOME3 en LTSP avec un Xterm exécuté localement

Session GNOME3 en LTSP avec un Xterm exécuté localement

ATTENTION : La mire d’authentification LTSP ne supporte pas encore le changement de mot de passe lorsque celui-ci est expiré comme le fait GDM.