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é:
Common ghosting methods (Clonezilla or Ghost) are efficient on homogeneous IT infrastructures with roaming user profiles.
Deployment tools (OCSInventory or WPKG) can broadcast software but do not easily allow software level or user level customizations that are useful to prevent or limit user support requests.
Software from smaller vendors often need Local Administrator rights to run properly.
Currently available solutions to address theses problems are either too expensive or too inefficient, and they are in every case too complex.
WAPT development hypotheses and motivations¶
Le développement de WAPT est animé par deux principes:
What is complicated should be made simple.
What is simple should be made trivial.
WAPT s’appuie sur un jeu d’hypothèses fondamentales :
Sysadmins should know a scripting language and WAPT has chosen Python for the depth and breadth of its libraries.
Sysadmins who have little experience with scripting languages must find inspiration in simple and efficient examples that they’ll adapt to fit their needs.
Sysadmins must be able to communicate on the efficiency of their actions to their superiors and report process gaps to internal or external auditors.
Sysadmins must be able to collaborate with their IT team; thereby WAPT local repositories provide signed packages that they can trust to be deployed on their network. Alternatively, they can choose external public repositories providing them the security guarantees that they consider sufficient.
Sysadmins are aware that user workstations serve business purposes and some customizations must be possible. The adaptation of the infrastructure to the business needs is facilitated by the notion of groups and OU; it allows to select a large number of machines to customize their 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 :
A small form factor and no maintenance appliance with the role of secondary repository is deployed on the local network of each remote site; a workstation can also be used, although it may not be up and running if you want to connect to it.
The remote repository replicates the packages from the main repository.
The WAPT clients connect in priority with the repository that is the closest to them, the local repository.
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.
Each group often correspond to:
a service in an organization (ex: accounting).
une pièce, un bâtiment, etc.
Indication
A host can be a member of several groups.
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 :
A PKI.
ACLs.
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 :
Code-signing to allow IT admins to package, sign and deploy WAPT packages containing executable loads (i.e.
setup.py
).CA to delegate to other IT admins the right to issue certificates.
No right to limit IT admins to only deploying packages containing non executable loads (i.e. configure hosts).
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.
When first registering with the WAPT Server, the WAPT agent sends the entire inventory (BIOS, hardware, software) to the server.
When the WAPT agent updates, the WAPT agent will report its inventory status to the WAPT Server.
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 :
To install a base, a group or a unit package if it is available.
To remove obsolete packages.
To resolve package dependencies and conflicts.
To make sure all installed WAPT packages are up to date compared to the ones stored on the repository.
To regularly update the WAPT server with its hardware status and the status of installed software.
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:
On triggerring an update, the agent downloads NEED-UPGRADE or NEED-INSTALL packages and stores them in the cache folder.
On triggerring an upgrade, the agent unzips the packages into a temporary folder.
The
setup.py
content is parsed and stored in WAPT agent database located inC:\Program Files (x86)\wapt\db\waptdb.sqlite
.The file
setup.py
is executed and the software is installed from unzipped files.In case of success: the downloaded packages and unzipped files are deleted. An OK status is returned to the WAPT Server.
In case of failure: the downloaded packages are kept and the unzipped files are deleted. An ERROR status is returned to the WAPT Server.
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 :
The
setup.py
content is retrieved from WAPT agent database located inC:\Program Files (x86)\wapt\db\waptdb.sqlite
.The WAPT agent looks up the
UninstallString
in the local database.If defined in the
setup.py
copied into the local database during initial installation of the WAPT package, the uninstall() function is executed.
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 :
Import packages from an external repository (or create a new package from scratch).
Test, validate, build and then sign the package.
Upload the package onto the main repository.
Packages are automatically downloaded by WAPT clients.
Packages are executed based on the selected method:
The Administrator forces the upgrade.
The Administrator proposes the upgrade at User.
A scheduled task launches the upgrade.
The upgrade is executed when the machine shuts down.
The User chooses the right time for herself (at shutdown or using the self-service).
Inventory information feedback.
The updated inventory is reported in the WAPT console.
Architecture du serveur WAPT¶
L’architecture du serveur WAPT repose sur plusieurs rôles distincts:
The repository role for distributing packages.
The inventory and central server role for hardware and software inventory.
The proxy role to relay actions between the WAPT console and the WAPT agents.
Fonctionnement du dépôt WAPT¶
Tout d’abord, le serveur WAPT sert de dépôt de fichiers web.
The repository role is accomplished by a Nginx web server.
The repository allows the distribution of WAPT packages, the installers for waptagent and waptsetup.
WAPT packages are available via a web browser by visiting https://srvwapt.mydomain.lan/wapt.
The host packages are stored in a directory that is not accessible by default (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 :
Hardware inventory.
Software inventory.
WAPT packages status.
Tasks status (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 à signing 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 :
Doing conditional loops (if … then … else …).
Copying, pasting, moving files and directories.
Checking whether files or directories exist.
Checking whether registry keys exist.
Checking access rights, modifying access rights.
Looking up information on external data sources (LDAP, databases, files, etc).
And more.
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 :
What was complicated is made simple.
What was simple is made trivial.