Présentation des grands principes de WAPT¶
A quoi sert WAPT ?¶
WAPT installe, met à jour et supprime les logiciels et les configurations sur les appareils Windows, Linux et macOS. Le déploiement de logiciels (Firefox, MS Office, etc.) peut être effectué à partir d’un serveur central à l’aide d’une console graphique. WAPT reprend de nombreuses idées de l’outil de gestion de paquets apt Debian Linux, d’où son nom.
Des entreprises privées de toutes tailles, des collèges, des écoles, des universités, des laboratoires de recherche, des gouvernements locaux et nationaux, des hôpitaux, des mairies et des ministères d’État du monde entier utilisent avec succès WAPT.
WAPT existe en deux versions, Discovery et Enterprise, toutes deux propriétaires, la version Community ayant été amicalement forkée à la communauté Opensource.
WAPT est très efficace pour répondre aux besoins récurrents de mise à jour de Firefox ou Chrome et c’est souvent pour couvrir ce besoin de base que WAPT est initialement adopté ; il devient alors un outil de choix pour les tâches quotidiennes de l’administrateur système.
Certification de sécurité de l’ANSSI¶
Suite à sa certification CSPN du 14 février 2018, WAPT a obtenu le 15 mars 2018 la Qualification Elémentaire de l’ANSSI.
Genèse WAPT¶
Notre constat après 15 ans d’infogérance¶
L’administration d’un large parc de PC sous Microsoft Windows est aujourd’hui une tâche difficile dans un environnement sécurisé:
Les méthodes généralement utilisées (mastérisations type ghost ou clonezilla) sont efficaces si les parcs machines et les parcs applicatifs sont homogènes et que les profils utilisateurs sont itinérants.
Les outils de télé-déploiement (OCSInventory ou WPKG) diffusent les logiciels mais ne permettent pas d’effectuer de manière simple les personnalisations qui évitent les demandes de support utilisateur.
Les logiciels de petits éditeurs nécessitent souvent des droits Administrateur Local pour fonctionner correctement.
Les solutions actuellement disponibles pour résoudre ces problèmes sont soit trop coûteuses, soit trop inefficaces, et elles sont dans tous les cas trop complexes.
Hypothèses et motivations du développement WAPT¶
Le développement de WAPT est animé par deux principes:
Ce qui est compliqué doit être rendu simple.
Ce qui est simple doit être rendu trivial.
WAPT s’appuie sur un jeu d’hypothèses fondamentales :
Les adminsys doivent connaître un langage de script, et WAPT a choisi Python pour la profondeur et l’étendue de ses librairies.
Les administrateurs système qui ont peu d’expérience avec les langages de script doivent s’inspirer d’exemples simples et efficaces qu’ils sauront adapter à leurs besoins.
Les adminsys doivent pouvoir communiquer sur l’efficacité de leurs actions à leur direction et reporter les écarts de processus aux auditeurs internes ou externes.
Les adminsys doivent pouvoir collaborer avec leur équipe informatique; ainsi les dépôts WAPT internes fournissent des paquets auxquels ils peuvent faire confiance pour les déployer sur leur réseau. Sinon, ils peuvent choisir des dépôts externes publics qui leur fournissent les garanties de sécurité qu’ils jugent suffisantes.
Les administrateurs système sont conscients que les postes de travail des utilisateurs servent à des fins commerciales et que certaines personnalisations doivent être possibles. L’adaptation de l’infrastructure aux besoins de l’entreprise est facilitée par la notion de groupes et des:abbr:OU (Organizational Units); ils permettent de sélectionner un grand nombre de machines pour personnaliser leur configuration.
Principes fondamentaux¶
Principe de Dépôt¶
Les paquets sont stockés dans un répertoire web. Ils ne sont pas stockés dans une base de données.
Note
Le protocole de transport utilisé pour le déploiement des paquets est le HTTPS.
Les paquets WAPT sont servis par le serveur web Nginx, disponible sous Linux et Windows.
Le fichier d’index Packages
est la seule chose nécessaire. Il liste les paquets disponibles sur les dépôts autorisés et quelques informations de base sur chaque paquet.
Ce mécanisme permet de mettre en place facilement un processus de réplication entre plusieurs dépôts.
Les grandes organisations avec des sites distants et des filiales nécessitent parfois que les services soient répliqués localement pour éviter la congestion de la bande passante (Edge Computing).
Dépôts répliqués ¶
WAPT Enterprise offre la possibilité de mettre à niveau les agents distants pour servir de dépôt distants pouvant être gérés directement depuis la console WAPT. Tous les agents WAPT peuvent ensuite être configurés de manière centralisée pour sélectionner automatiquement le meilleur dépôts en fonction d’un ensemble de règles.
Lorsque WAPT est utilisé sur des sites distants à bande passante limitée, il est logique d’avoir un appareil local qui répliquera le dépôt WAPT principal pour réduire la bande passante réseau consommée lors du déploiement des mises à jour sur vos appareils distants.
Avec les dépôts distants, WAPT reste une solution à faible coût d’exploitation car vous n’avez pas besoin de mettre en place des liaisons fibre haut débit pour profiter de WAPT.
Cela fonctionne comme suit :
Une appliance de petite taille et sans maintenance jouant le rôle de dépôt secondaire est déployée sur le réseau local de chaque site distant ; un poste de travail peut également être utilisé, même s’il peut ne pas être opérationnel si vous souhaitez vous y connecter.
Le dépôt distant réplique les paquets du dépôts principal.
Les agents WAPT se connectent en priorité au dépôts le plus proche d’eux, le dépôt local.
Pour en savoir plus sur le dépôt répliqué, consultez la documentation sur Réplication d’un dépot.
Principe de Paquets¶
La structure d’un paquet WAPT est similaire à celle d’un paquet .deb de Debian Linux. Chaque paquet WAPT embarque avec lui les binaires qui seront exécutés et les autres fichiers dont il aura besoin.
Un paquet est transportable facilement.
Voici à quoi ressemble un package WAPT:
Pour en savoir plus sur la composition d’un paquet WAPT, consultez la documentation sur la structure détaillée d’un paquet.
Types de paquets WAPT¶
Il existe 7 types de paquets WAPT:
Les paquets base¶
Ce sont les paquets logiciels classiques.
Ils sont stockés dans le répertoire web https://srvwapt.mydomain.lan/wapt/.
Les paquets group¶
Ce sont des groupes de paquets.
Chaque groupe correspond souvent à:
service dans l’entreprise (ex : comptabilité).
une pièce, un bâtiment, etc.
Indication
Un client peut-être membre de plusieurs groupes.
Ils sont stockés dans le répertoire web https://srvwapt.mydomain.lan/wapt/.
Les paquets host¶
Les paquets « machines » portent le nom UUID Bios ou le FQDN de la machine.
Chaque client recherchera son paquet host pour connaître les packages qu’il doit installer (dépendances).
Les paquets host sont stockés dans le répertoire web https://srvwapt.mydomain.lan/wapt/.
les paquets unit ¶
Les paquets « unit » portent le nom complet d’une OU, exemple: OU=piece1,OU=prod,OU=computers,DC=mydomain,DC=lan.
Par défaut, chaque ordinateur recherche les paquets unit puis installe la liste des dépendances associées.
Les paquets Unit sont stockés dans le répertoire web https://srvwapt.mydomain.lan/wapt/.
les paquets wsus ¶
Les paquets wsus contiennent le liste des mises à jour Windows autorisées et interdites.
Lorsque ce paquet est installé sur le terminal, la prochaine analyse de mise à jour effectuée par WAPT choisira les mises à jour Windows en fonction de ce filtrage.
Les paquets wsus sont stockés dans le répertoire web https://srvwapt.mydomain.lan/wapt/.
les paquets self-service ¶
Les paquets self-service contiennent une liste de groupes ou d’utilisateurs (Active Directory ou local) et leurs listes associées de paquets que les utilisateurs seront autorisés à installer par eux-mêmes.
Les paquets self-service sont stockés dans le répertoire web https://srvwapt.mydomain.lan/wapt/.
les paquets profile ¶
Les paquets profile sont similaires aux paquets group.
Cependant, les paquets profile fonctionnent un peu différemment et sont plus utiles lorsqu’un serveur Active Directory fonctionne dans l”Organisation :
Principe de dépendance¶
Dans WAPT tout fonctionne selon le principe de dépendance.
Par défaut, l’agent WAPT recherchera son paquetage host. Le paquet host liste les paquets à installer sur l’ordinateur.
Ainsi, le paquet host sera correctement installé si toutes ses dépendances sont satisfaites.
Chaque sous-dépendance doit être satisfaite pour satisfaire une dépendance de niveau supérieur.
Lorsque toutes les dépendances sont satisfaites, l’hôte notifie son statut au serveur WAPT. Son indicateur devient OK et vert dans la console WAPT, ce qui signifie que l’hôte a le profil d’hôte que le Administrator ou Package Deployer a défini pour lui.
Indication
Lorsque l’on attribue un logiciel à un hôte en tant que dépendance, seul le nom canonique du logiciel sans son numéro de version est enregistré comme dépendance (ex : Je veux que Freemind soit installé sur cette machine dans sa dernière version et que Freemind soit configuré pour que le User ne m’appelle pas parce qu’il ne trouve pas l’icône sur son bureau !)
Pour chaque dépendance, l’agent WAPT se chargera d’installer automatiquement la dernière version disponible du paquet. Ainsi, si plusieurs versions de Freemind sont disponibles sur le dépôt, l’agent WAPT obtiendra toujours la dernière version, à moins que j’aie épinglé la version pour des raisons de compatibilité avec d’autres ensembles d’outils.
Ensuite, lorsque l’agent contacte le dépôt pour vérifier s’il y a de nouvelles mises à jour, il compare les versions des paquets du dépôt avec sa propre liste locale de paquets déjà installés sur la machine.
Si une mise à jour d’un paquet déjà installé est disponible, le client basculera le statut du paquet en NEED UPGRADE. Il installera ainsi les mises à jour au prochain upgrade.
Principe de Clé privée / certificat public¶
Comme les paquets Android APK, les paquets WAPT sont signés; un hsah de la somme de contrôle de tous les fichiers contenus dans le paquet est calculé.
Cette méthode de signature permet de garantir la provenance et l’intégrité du paquet.
Pour fonctionner correctement, WAPT a besoin d’une paire clé privée /certificat public (auto-signée, émise par une autorité de certification interne Certificate Authority ou commerciale).
La clé privée sera utilisée pour signer les paquets WAPT tandis que le certificat public sera distribué avec chaque agent WAPT afin que les agents WAPT puissent valider les fichiers qui ont été signés avec la clé privée.
Les différents certificats publics seront stockés dans le sous-dossier ssl
de l’agent WAPT. Ce dossier peut contenir plusieurs certificats publics.
Vérification des paquets¶
Lorsqu’un paquet WAPT est téléchargé, l’agent WAPT (waptagent) vérifie l’intégrité du paquet, puis vérifie que le paquet a été correctement signé.
Si la signature du paquet WAPT ne correspond à aucune des certificats publics situées dans C:\Program Files (x86)\wapt\ssl
sur Windows ou /opt/wapt/ssl sur Linux et MacOS, l’agent WAPT refusera d’installer le paquet.
Pour plus d’informations, veuillez consulter la documentation sur comment l’intégrité du processus d’installation d’un paquet WAPT est assurée.
La clé privée est importante¶
Attention
La clé privée ne doit PAS être stockée sur le serveur WAPT, ni sur aucun stockage public ou partagé auquel pourrait accéder du personnel non autorisé. En effet, la sécurité de WAPT repose sur le maintien de la clé privée privée.
La clé privée doit être stockée en lieu sûr, car celui qui contrôle votre clé contrôle votre parc !
Enfin, pour un maximum de sécurité, la clé privée pourra être sécurisée sur une smartcard ou un jeton cryptographique que les Administrateurs et Déployeur de Paquet transporteront physiquement sur eux, utilisant leur smartcard ou leur jeton cryptographique ponctuellement pour signer un paquet WAPT.
Note
La clé privée est protégée par un mot de passe par défaut.
Plus d’informations sur générer le certificat de l’administrateur pour signer les paquets WAPT.
Différenciation des rôles des utilisateurs dans WAPT ¶
WAPT offre la possibilité de différencier les rôles en fonction de :
Une A PKI.
ACL.
Infrastructure à Clé Publique (PKI)¶
Indication
L’utilisation d’une PKI existante est possible, la Console WAPT est livré avec un générateur simple de certificat.
WAPT fonctionne comme un mode CA en ce qui concerne la PKI.
De par sa conception, WAPT est capable de générer des certificats qui peuvent être utilisés comme clés parent pour générer d’autres clés enfant publiques et privées.
Par conséquent, l’administrateur principal de WAPT qui agit en tant qu’administrateur peut émettre des certificats pour chaque administrateur informatique afin que leurs actions puissent être identifiées lorsqu’ils utilisent WAPT.
Les certificats enfants émis par la CA peuvent eux-mêmes être configurés comme :
La signature de code pour permettre aux administrateurs informatiques d’empaqueter, de signer et de déployer des paquets WAPT contenant des charges exécutables (c’est-à-dire
setup.py
).CA pour déléguer à d’autres administrateurs informatiques le droit d’émettre des certificats.
Aucun droit pour limiter les administrateurs informatiques au seul déploiement de paquets contenant des charges non exécutables (c’est-à-dire configurer des hôtes).
Plus d’informations sur générer l’autorité de certification (CA).
Liste de contrôle d’accès (ACL)¶
Avec WAPT, il est possible de définir les droits des utilisateurs en utilisant ACL.
Chaque technicien informatique est identifié par son propre certificat et les droits peuvent donc être appliqués finement sur une base individuelle.
Par exemple, un utilisateur de la console WAPT peut avoir le droit de « Voir » sur une machine mais ne pas être autorisé à cliquer sur « Modifier la machine ».
Plus d’informations sur la La liste des droits de l’ACL.
Mode de fonctionnement WAPT¶
Inventaire logiciel¶
WAPT tient un inventaire matériel et logiciel de chaque machine.
Cet inventaire est stocké dans une petite base de données intégrée à chaque agent WAPT.
Lors du premier enregistrement avec le serveur WAPT, l’agent WAPT envoie l’inventaire complet (BIOS, matériel, logiciel) au serveur.
Lors de chaque mise à jour du client, l’agent WAPT remonte le delta de l’inventaire au serveur.
L’inventaire central vous permet de filtrer les hôtes par leurs composants, leurs logiciels ou tout autre argument de recherche.
La remontée des informations d’inventaire¶
L’agent WAPT remonte également le statut des paquets WAPT.
En cas d’erreur lors de l’installation du paquet, l’information sera transmise au serveur WAPT. La machine apparaîtra alors en ERROR dans la console.
Le Administrator peut voir le paquet retourné en erreur dans la console et corriger le paquet en conséquence.
Pour chaque upgrade, WAPT essaiera d’installer une nouvelle version du paquetage jusqu’à ce qu’aucun statut d’erreur ne soit renvoyé.
Note
Les agents WAPT signent leur inventaire avant de l’envoyer au serveur WAPT.
Pour plus d’informations, veuillez vous reporter à Signature des remontées d’inventaire.
Les interactions classiques de WAPT¶
update¶
Lorsqu’une commande update est lancée sur un agent, cela revient à ordonner à l’agent de vérifier le dépot WAPT pour les nouveaux paquets. Par défaut, l’agent WAPT recherche les mises à jour toutes les deux heures.
Si la date du fichier d’index Packages
a changé depuis la dernière update, alors l’agent WAPT télécharge le nouveau fichier Packages
(entre 20 et 100k), sinon, il ne fait rien.
L’agent WAPT compare ensuite le fichier Packages
avec sa propre base de données locale.
Si l’agent WAPT détecte qu’un paquet doit être ajouté ou mis à jour, il fait passer le statut de l’hôte et celui du paquet à NEED-UPGRADE.
Il ne lancera pas l’installation du paquet immédiatement. L’agent WAPT attendra un ordre « upgrade » pour lancer la mise à niveau.
upgrade¶
Lorsque nous lançons une upgrade, nous demandons à l’agent WAPT d’installer les paquets ayant un statut NEED-UPGRADE.
Une update doit précéder une upgrade, sinon l’agent ne saura pas si des mises à jour sont disponibles.
Par défaut, l’agent WAPT déclenchera une update/ download-upgrade au démarrage ; après le démarrage, l’agent WAPT vérifiera ensuite toutes les 2 heures s’il a quelque chose à faire.
Les paquets à installer seront téléchargés et mis en cache dans le dossier C:\Program Files (x86)\wapt\cache
.
Le waptexit lancera une upgrade lorsque l’ordinateur s’éteindra. Un Administrator pourra également forcer le lancement immédiat d’une upgrade à partir de la console WAPT. Un utilisateur final peut également choisir de lancer manuellement une upgrade. Enfin, une tâche planifiée peut être configurée sur les hôtes pour lancer une upgrade.
Si le serveur WAPT n’est pas joignable lors de la mise à niveau, l’agent WAPT sera toujours capable d’installer les paquets mis en cache.
Les mises à jour de l’inventaire seront ensuite envoyées au serveur WAPT lorsque la connectivité réseau sera rétablie.
Les 5 objectifs de l’agent WAPT sont donc :
Pour installer un paquet base, un groupe ou un unité s’il est disponible ;
De supprimer les paquets obsolètes.
Pour résoudre les dépendances et les conflits de paquets.
Pour s’assurer que tous les paquets WAPT installés sont à jour par rapport à ceux stockés dans le dépot.
Pour mettre régulièrement à jour le serveur WAPT avec son état matériel et l’état des logiciels installés.
Comportement de l’agent WAPT¶
Un concept clé qui peut être difficile à comprendre est le comportement d’un agent WAPT lors de l’installation d’un paquet et les considérations qui l’entourent.
L’installation du paquet d’agents WAPT peut être divisée en étapes simples:
Lors du déclenchement d’un update, l’agent télécharge les paquets NEED-UPGRADE ou NEED-INSTALL et les stocke dans le dossier cache.
Lors du déclenchement d’un upgrade, l’agent décompresse les paquets dans un dossier temporaire.
Le contenu du
setup.py
est analysé et stocké dans la base de données de l’agent WAPT située dansC:\Program Files (x86)\wapt\db\waptdb.sqlite
.Le
setup.py
est exécuté et le logiciel est installé à partir des fichiers décompressés.En cas de succès : les paquets téléchargés et les fichiers dézippés sont supprimés. Un statut OK est renvoyé au serveur WAPT.
En cas d’échec : les paquets téléchargés sont conservés et les fichiers dézippés sont supprimés. Un statut ERROR est renvoyé au serveur WAPT.
Ce comportement est important pour comprendre le cycle de vie d’un paquet installé.
Par exemple, lors du retrait d’un paquet, les étapes suivantes sont suivies :
Le contenu du
setup.py
est extrait de la base de données de l’agent WAPT située dansC:\Program Files (x86)\wapt\db\waptdb.sqlite
.L’agent WAPT recherche le
UninstallString
dans la base de données locale.Si elle est définie dans le
setup.py
copié dans la base de données locale lors de l’installation initiale du paquetage WAPT, la fonction uninstall() est exécutée.
Des étapes similaires sont reproduites lors de l’exécution de session_setup et audit.
Diagramme complet du fonctionnement de WAPT¶
Nous retrouvons ici le comportement commun de WAPT, depuis la duplication d’un paquet à partir d’un dépôt externe accessible sur Internet, jusqu’à son déploiement sur les machines du réseau.
Lire le diagramme dans le sens des aiguilles d’une montre :
Importer des paquets depuis un dépôt externe (ou créer un nouveau paquet à partir de zéro).
Tester, ensuite valider, puis construire et enfin signer le paquet.
Télécharger le paquet sur le dépôt principal.
Les paquets sont automatiquement téléchargés par les clients WAPT.
Exécution des paquets selon la méthode sélectionnée:
L”Administrateur force l”upgrade.
L”Administrateur propose l” upgrade à l”Utilisateur.
Une tâche planifiée lance l’exécution de la mise à jour.
La mise à jour est exécutée à l’extinction de la machine.
L”Utilisateur choisit le bon moment pour lui-même (à l’arrêt ou en utilisant le self-service).
Remontée des informations d’inventaire.
Consultation de la remontée d’inventaire via la console.
Architecture du serveur WAPT¶
L’architecture du serveur WAPT repose sur plusieurs rôles distincts:
Le rôle de dépôt pour la distribution des packages.
Le rôle inventaire et serveur central pour l’inventaire du matériel et des logiciels.
Le rôle proxy pour relayer les actions entre la console WAPT et les agents WAPT.
Fonctionnement du dépôt WAPT¶
Tout d’abord, le serveur WAPT sert de dépôt de fichiers web.
Ce rôle de dépôt est accompli par un serveur web Nginx.
Le dépôt permet la distribution des paquets WAPT, des installeurs waptagent et waptsetup.
Les paquets WAPT sont accessibles avec un navigateur web à l’adresse https://srvwapt.mydomain.lan/wapt.
Les paquets host sont contenus dans un répertoire inaccessible par défaut (https://srvwapt.mydomain.lan/wapt/wapt-host/).
Rôle d’inventaire¶
Deuxièmement, le serveur WAPT sert de serveur d’inventaire.
Le serveur d’inventaire est un service passif qui collecte les informations que les agents WAPT lui envoient :
Inventaire matériel.
Inventaire logiciel.
Statut des paquets WAPT.
Etat des tâches (running, pending, error).
Note
Le service WAPT n’est pas actif dans le sens où il ne fait que recevoir des informations des clients. Par conséquent, si le serveur d’inventaire tombe en panne, l’inventaire se rétablira de lui-même à partir des rapports d’état d’inventaire reçus des agents WAPT déployés.
Dans la version Discovery de WAPT, l’accès aux données d’inventaire n’est possible que par la console WAPT.
WAPT Enterprise est livré avec des capacités reporting. En parallèle, il est possible de pousser l’inventaire WAPT vers l’outil ITSM GLPI.
Rôle de Proxy¶
Troisièmement, le serveur WAPT sert de proxy de commande.
Il sert de relais entre la console de gestion WAPT et les agents WAPT déployés.
Note
Chaque action déclenchée sur un agent WAPT à partir du serveur est signée avec une clé privée. Sans une clé privée valide, il n’est pas possible de déclencher des actions à distance sur des appareils distants équipés de WAPT. Pour plus d’informations sur les actions à distance, veuillez vous référer à signer des actions relayées aux agents WAPT.
Langage et environnement de développement WAPT¶
WAPT est construit en utilisant le langage Python.
Attention
Avec WAPT 2.0, le code interne de WAPT est passé à python3. Les paquets WAPT doivent MAINTENANT suivre la nouvelle syntaxe python3.
Consultez cette documentation pour vous aider à identifier les problèmes potentiels lors du passage de vos paquets existants de Python2 à Python3.
Tout environnement de développement rapide d’applications destiné au développement de Python convient.
Tranquil IT a développé quelques plugins spécifiques WAPT utiles pour l’IDE PyScripter (https://sourceforge.net/projects/pyscripter).
Tranquil IT recommande d’utiliser PyScripter pour développer des paquets WAPT pour Windows et vscode pour développer des paquets WAPT pour macOS et Linux.
La puissance de Python¶
Toute la puissance de Python peut être avantageusement mise à profit.
De nombreuses bibliothèques existent déjà en Python pour :
Faire des boucles conditionnelles (si … alors … autrement …).
Copier, coller, déplacer des fichiers et des répertoires.
Vérifier si les fichiers ou les répertoires existent.
Vérifier si les clés de registre existent.
Vérifier les droits d’accès, modifier les droits d’accès.
La recherche d’informations sur des sources de données externes (LDAP, bases de données, fichiers, etc.).
Et plus.
La puissance de WAPT¶
Les fonctions les plus couramment utilisées avec WAPT ont été simplifiées dans des bibliothèques appelées Setuphelpers.
Les fonctions Setuphelpers simplifient le processus de création et de test des paquets WAPT, validant ainsi les principaux objectifs de WAPT :
Ce qui était compliqué est rendu simple.
Ce qui était simple est rendu trivial.