Post

POC : Déploiement & viabilité d'Ubuntu Workstation en production

Retour d'expérience et validation technique sur l'intégration d'Ubuntu 26.04 au sein d'un domaine Active Directory avec chiffrement matériel TPM.

POC : Déploiement & viabilité d'Ubuntu Workstation en production

Document de Suivi de POC : Déploiement & Viabilité d’Ubuntu Workstation

  • Période du test : Juillet 2026 – Septembre 2026 (1,5 mois)
  • Périmètre : Validation technique du socle Ubuntu pour un déploiement en environnement institutionnel
  • Auteur : Équipe Systèmes & Réseaux

1. Contexte & Objectifs du POC

L’objectif de cette phase d’expérimentation est d’évaluer la faisabilité technique, opérationnelle et sécuritaire du remplacement ou de la coexistence d’Ubuntu avec le parc Windows existant.

Objectifs clés à valider

  • Intégration Active Directory : Authentification fluide via SSSD / Kerberos sur le domaine interne.
  • Sécurité du poste : Chiffrement matériel via la puce TPM 2.0 (systemd-cryptenroll) et conformité antivirus (WithSecure).
  • Services d’infrastructure : Impression réseau (CUPS/SMB), montages de partages de fichiers (cifs/smb), inventaire centralisé (GLPI) et sauvegardes (UrBackup).
  • Usages avancés : Virtualisation locale (KVM/QEMU) pour la rétrocompatibilité des outils Windows métier via des machines virtuelles locales.
  • Mobilité : Connectivité Wi-Fi.

2. Fiche d’Identité du Poste de Test

Paramètre Valeur / Nom de convention
Nom du poste Linux (AD) WS001-L-LNX (Suffixe -LNX obligatoire)
Domaine AD ad.entreprise.lan
Compte de jonction AD svc_ldap
OS Déployé Ubuntu 26.04 LTS
Type de chiffrement LUKS2 + TPM2 (PCR 7) + Recovery Key

3. Matrice de Validation Technique

Phase 1 : Préparation & Chiffrement Système

Étape Action / Procédure Statut Remarques / Bloqueurs
BIOS Reset de la puce de sécurité (Clear security chip). 🟩 Validé Obligatoire avant le premier enrôlement.
Installation OS Partitionnement chiffré par passphrase initiale. 🟩 Validé Passphrase consignée dans le gestionnaire de mots de passe.
Enrôlement TPM2 Liaison de la partition crypto avec systemd-cryptenroll --tpm2-pcrs=7. 🟩 Validé Contournement du bug d’installation PCR_UNUSABLE.
Clé de secours Génération de la recovery key (--recovery-key) + sauvegarde gestionnaire. 🟩 Validé Clé d’urgence hors ligne générée.
Boot Automatique Configuration de /etc/crypttab (tpm2-device=auto) + update-initramfs. 🟩 Validé Déverrouillage matériel opérationnel sans prompt.

Phase 2 : Intégration Annuaire & Authentification

Étape Action / Procédure Statut Remarques / Bloqueurs
DNS / Réseau Résolution FQDN du contrôleur de domaine via nslookup. 🟩 Validé Pointer impérativement sur l’IP du DC.
Jonction Domaine Exécution de realm join -U 'svc_ldap'. 🟩 Validé Création de l’objet ordinateur dans l’AD.
Tickets Kerberos Obtention des TGT via kinit USER@AD.ENTREPRISE.LAN. 🟩 Validé Majuscules strictes pour le domaine Kerberos.
Dossiers Utilisateurs Génération auto du /home/ (pam-auth-update --enable mkhomedir). 🟩 Validé Effectif à la première ouverture de session.
Droits d’administration Fichier sudoers /etc/sudoers.d/ad-admins pour le groupe AD. 🟨 En cours À tester sur un panel d’utilisateurs restreint.

Phase 3 : Services Réseau & Périphériques

Service Méthode & Commandes Statut Observations
Montage lecteur réseau Script cifs avec délégation sudo mount. Lancement au démarrage avec gnome-tweaks. 🟨 En cours Créer les scripts par groupe.
Imprimerie Publication CUPS vers dc-print (Driver PPD ou RAW). 🟩 Validé Authentification transparente via smbclient -k.
Wi-Fi Eduroam Configuration via le script Python officiel CAT eduroam. 🟨 À ajuster Profil de certificat appliqué. Spécification explicite du domaine requise.

Phase 4 : Agents de Gestion, Sécurité & Sauvegarde

Agent / Outil Installation & Configuration Statut Commentaires
Antivirus WithSecure Exécution de linuxsecurity-installer.sh. 🟨 En cours Moteur local actif, remontée console à surveiller.
Inventaire GLPI Déploiement de glpi-agent en mode service. 🟩 Validé Inventaire OK (gestion du dual-boot confirmée).
UrBackup Client Configuration du mode Internet (srv-backup.entreprise.lan:55415) + AuthKey. 🟩 Validé Ingestion du dossier /home/ de l’utilisateur OK.
Téléassistance Utilisation de l’agent de téléassistance pour prise en main à distance. 🟩 Validé Opérationnel.

Phase 5 : Virtualisation & Rétrocompatibilité (KVM / Samba)

Composant Configuration effectuée Statut Notes techniques
Hyperviseur Paquets qemu-system-x86, libvirt, virt-manager. 🟩 Validé Utilisateur rattaché aux groupes libvirt et kvm.
Pilotes Guest Intégration de l’ISO virtio-win pour les VM Windows. 🟩 Validé Réseau et stockage optimisés dans l’invité.
Partage Hôte / VM Serveur Samba local sur virbr0 (/srv/samba/partage). 🟩 Validé Workgroup configuré sur WS-VM-SHARED.
VM sur serveur VM Windows Server avec licences RDS/CAL pour connexions simultanées. ⬜ À créer Étude d’architecture en cours.

4. Retours d’Expérience & Points de Vigilance

Points forts

  • Performance matérielle : Démarrage très rapide du système déverrouillé directement par le module TPM.
  • Virtualisation intégrée : KVM offre un fonctionnement fluide et des performances quasi natives pour faire tourner ponctuellement des applications Windows métier.

Points d’attention & Axes d’amélioration

  • Temps de déploiement initial : L’installation manuelle actuelle nécessite environ une journée par poste. Une automatisation (via des scripts PXE / Autoinstall YAML) sera indispensable en cas de passage à l’échelle.
  • Mises à jour BIOS : Toute mise à jour de carte mère ou de firmware BIOS invalide le registre PCR 7 et nécessite une réinitialisation manuelle du slot TPM : ```bash sudo systemd-cryptenroll /dev/nvme0n1p3 –wipe-slot=tpm2 sudo systemd-cryptenroll /dev/nvme0n1p3 –tpm2-device=auto –tpm2-pcrs=7 sudo update-initramfs -u -k all
1
2
3
4
5
6
7
8
9
10

* **Client VPN :** En l'absence de paquet graphique Linux supporté en version 26.04, la connexion s'effectue en ligne de commande via `openconnect` (script utilisateur documenté ci-dessous).
* **Eduroam :** Nécessite de spécifier manuellement le domaine (`ad.entreprise.lan`) et de valider les options de certificat dans le gestionnaire réseau GNOME.
* **Wine :** À évaluer pour exécuter certains utilitaires Windows légers sans l'empreinte mémoire d'une machine virtuelle complète.
* **Instabilité réseau / reprise de veille :** En cas de perte de session après un changement de réseau ou une veille prolongée, exécuter :
```bash
sudo systemctl restart NetworkManager systemd-resolved sssd
sudo resolvectl flush-caches

Pour désactiver la mise en veille agressive de la carte Wi-Fi, éditer /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf et renseigner wifi.powersave = 2.


5. Procédure Technique : Script & Raccourci VPN OpenConnect

Phase 1 : Configuration Administrateur (Root / Sudo)

1. Délégation des privilèges sudoers :

1
2
sudo visudo /etc/sudoers.d/vpn-openconnect

Contenu à insérer :

1
2
%ad-users ALL=(ALL) NOPASSWD: /usr/sbin/openconnect, /bin/kill, /usr/bin/kill, /bin/rm /var/run/openconnect-vpn.pid

2. Déploiement du script système :

1
2
sudo nano /usr/local/bin/vpn.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/bin/bash

SERVER="vpn.entreprise.lan"
PID_FILE="/var/run/openconnect-vpn.pid"

echo "=========================================="
echo "         Connexion VPN Institutionnel     "
echo "=========================================="

if ! command -v openconnect &> /dev/null; then
    echo "Erreur : openconnect n'est pas installé sur cette machine."
    echo ""
    read -p "Appuyez sur Entrée pour quitter..."
    exit 1
fi

check_status() {
    if [ -f "$PID_FILE" ] && sudo kill -0 $(cat "$PID_FILE") 2>/dev/null; then
        return 0
    else
        return 1
    fi
}

echo "Que souhaitez-vous faire ?"
echo "1) Se connecter"
echo "2) Se déconnecter"
echo "3) Voir le statut"
read -p "Votre choix [1-3] : " CHOIX

case $CHOIX in
    1)
        if check_status; then
            echo "Le VPN est déjà connecté !"
        else
            echo ""
            echo "Veuillez saisir vos identifiants VPN :"
            echo "------------------------------------------"

            sudo openconnect --protocol=gp -b --pid-file="$PID_FILE" "$SERVER"

            if [ $? -eq 0 ]; then
                echo ""
                echo "Connexion établie en arrière-plan !"
            else
                echo ""
                echo "Échec de la connexion."
            fi
        fi
        ;;

    2)
        if ! check_status; then
            echo "Le VPN n'est pas actif."
            [ -f "$PID_FILE" ] && sudo rm -f "$PID_FILE" 2>/dev/null
        else
            echo "Déconnexion en cours..."
            sudo kill -SIGINT $(cat "$PID_FILE") 2>/dev/null
            sudo rm -f "$PID_FILE" 2>/dev/null
            echo "VPN déconnecté."
        fi
        ;;

    3)
        echo ""
        if check_status; then
            echo "Statut : CONNECTÉ (PID: $(cat $PID_FILE 2>/dev/null))"
            ip a show dev tun0 2>/dev/null | grep -E "inet " || true
        else
            echo "Statut : DÉCONNECTÉ"
        fi
        ;;

    *)
        echo "Choix invalide."
        ;;
esac

echo ""
read -p "Appuyez sur Entrée pour quitter..."

3. Permissions :

1
2
sudo chmod +x /usr/local/bin/vpn.sh


Phase 2 : Configuration Session Utilisateur

1. Raccourci d’application GNOME :

1
2
nano ~/.local/share/applications/vpn-service.desktop

1
2
3
4
5
6
7
8
9
10
11
[Desktop Entry]
Type=Application
Name=VPN Entreprise
Comment=Connexion VPN OpenConnect
Exec=/usr/local/bin/vpn.sh
Icon=network-vpn-symbolic
Terminal=true
Categories=Network;
Keywords=VPN;openconnect;reseau;
StartupNotify=true

2. Droits et indexation :

1
2
3
chmod 755 ~/.local/share/applications/vpn-service.desktop
update-desktop-database ~/.local/share/applications


6. Procédure Technique : Script de Montage CIFS / GVfs

1. Script de montage Bash

Emplacement : ~/.local/bin/mount-cifs.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

# Extraction et export du ticket Kerberos pour la session utilisateur
CCACHE_FILE=$(klist 2>/dev/null | awk -F':' '/Ticket cache/ {print $3}' | tr -d ' ')
export KRB5CCNAME="FILE:${CCACHE_FILE}"

# Montage GVfs pour Partage Principal
if ! gio mount -l | grep -q "smb://srv-nas.ad.entreprise.lan/Services"; then
    gio mount "smb://srv-nas.ad.entreprise.lan/Services" 2>/dev/null
fi

# Montage GVfs pour Partage Public
if ! gio mount -l | grep -q "smb://srv-nas.ad.entreprise.lan/Public"; then
    gio mount "smb://srv-nas.ad.entreprise.lan/Public" 2>/dev/null
fi

1
2
chmod +x ~/.local/bin/mount-cifs.sh

2. Lanceur GNOME Desktop

Emplacement : ~/.local/share/applications/mount-cifs.desktop

1
2
3
4
5
6
7
8
9
10
11
[Desktop Entry]
Type=Application
Name=Montage Partages CIFS
Comment=Lancer le montage manuel des lecteurs réseau
Exec=bash -c "$HOME/.local/bin/mount-cifs.sh"
Icon=folder-remote-symbolic
Terminal=true
Categories=Network;
Keywords=CIFS;partage;lecteur;montage;
StartupNotify=true

3. Fonctionnement & Précisions

  • Authentification transparente : Le script s’appuie sur le ticket Active Directory déjà présent dans la session (klist) sans réclamer de mot de passe.
  • Intégration Nautilus : L’utilisation de gio mount (GVfs) permet un montage utilisateur accessible dans le panneau latéral de l’explorateur ou sous /run/user/$UID/gvfs/.
  • Réinitialisation : En cas d’erreur de point de montage après bascule réseau, démonter les chemins orphelins via sudo umount -l /mnt/* 2>/dev/null || true avant de relancer le script.

7. Bilan Final & Décision

  • Taux de satisfaction utilisateur : [ / 10]
  • Consommation de support / tickets N1/N2 : [Élevé / Modéré / Faible]
  • Avis sur la viabilité en production :
  • GO : Déploiement validé (avec industrialisation du déploiement).
  • NO GO : Bloquages métiers / incompatibilités trop critiques.
  • RÉSERVE : Nécessite une prolongation du test sur d’autres profils.

Commentaires de clôture :

À renseigner à l’issue de la période de test.