Passer au contenu

Sécurisez un site Zope avec LoginManager et MySQL

Conçu par Digital Creations et une communauté de développeurs indépendants, Zope est un serveur d’application Python disponible en open source. Nous allons adapter ses fonctions de sécurité à un existant, pour une application de type intranet.

Zope est livré avec une base de données objet, un module de publication d’objets et un langage de présentation appelé DTML (Document Template Markup Language). La sécurité de ce serveur d’application s’appuie sur des permissions au niveau de chaque objet. Les permissions correspondent aux opérations qu’un utilisateur effectue sur l’objet. L’administrateur d’un site Zope crée un objet de type “Utilisateur” en lui attribuant un nom, un mot de passe et des rôles. Ces objets résident dans le système d’authentification du site, appelé UserFolder, qui fournit les règles de gestion nécessaires à l’authentification des utilisateurs.Par défaut, lors de son installation, Zope crée un UserFolder qui va gouverner la gestion de la sécurité sur tous les objets. Pour mettre en ?”uvre une sécurité prenant en compte votre existant, il convient d’utiliser un nouveau système d’authentification baptisé LoginManager. Celui-ci offre une infrastructure capable d’accepter plusieurs mécanismes d’authentification et diverses sources d’utilisateurs telles qu’une base SQL, les comptes Unix et Windows NT ou un annuaire LDAP.

1. Configurez votre base de données MySQL

Après avoir préalablement installé MySQL, créez une nouvelle base de données puis nommez-la “intranet_db”. Utilisez les commandes SQL fournies dans le code A directement sous MySQL, ou recourez à une interface du type PHPMyAdmin pour concevoir les tables de données nécessaires à l’application. Il s’agit de la table des utilisateurs, de la table des rôles et de la table de correspondance utilisateur-rôle.

2. Installez les composants

Accédez à votre système Linux sous le compte “root”. Procurez-vous la dernière version stable de Zope sur le site zope.org. Utilisez la commande “python zpasswd.py access” pour personnaliser votre compte d’administration Zope. Téléchargez ensuite l’archive de ZPatterns dans “/usr/local/Zope”, puis décompressez-la.Récupérez maintenant l’archive du module LoginManager ( zope.org/Members/tsarna/LoginManager) et décompressez-la. Déplacez le répertoire “LoginManager” obtenu dans le répertoire “/usr/local/Zope/lib/python/Products”. Procurez-vous ensuite l’archive de l’adaptateur Zope pour MySQL à l’adresse zope.org/Members/adustman/Products/ZMySQLDA et décompressez-la. Déplacez le répertoire “ZMySQLDA” obtenu dans le sous-répertoire “lib/python/Products” de Zope. Procédez de même pour l’interface Python MySQLdb, téléchargeable sur zope.org/Members/adustman/Products /MySQLdb. Ce module doit être compilé. Dans le nouveau répertoire créé, exécutez successivement les commandes “python setup.py build” et “python setup.py install”.

3. Paramétrez votre système d’authentification

Une fois les diverses installations terminées, démarrez Zope à l’aide de la commande “./start”. À la racine de la hiérarchie d’objets de Zope, ouvrez un nouveau dossier avec l’identifiant “intranet”. À l’intérieur, créez un objet de type “LoginManager”. Sélectionnez “GenericUserSource” pour l’attribut “UserSource” et gardez les valeurs par défaut pour les autres paramètres. Créez ensuite un objet de type “Z MySQL Database Connection” dans l’objet “LoginManager”. Cet objet est fourni par le module connecteur Zope-MySQL pour gérer les connexions aux bases de données externes. Choisissez un identifiant spécifique comme “dbConnection” pour l’attribut “Id”. Entrez ensuite la chaîne de connexion à la base de données, sous la forme “intranet_db admin password”, “admin” étant le compte Linux d’administration du serveur MySQL et “password” son mot de passe.Afin d’accéder aux données des utilisateurs, créez des scripts de requête SQL dans l’objet “LoginManager”. Fournis par Zope, les objets “SQL Methods” servent à effectuer des requêtes vers les bases de données de manière indépendante du SGBD utilisé. Le résultat de l’exécution d’un script de type SQL Method consiste en une liste Python où chaque élément est une ligne de la table résultat de la requête SQL. Créez les SQL Methods suivants comme indiqué dans le code B.Dans un script SQL Method, utilisez la balise “dtml-sqlvar” issue du langage DTML pour insérer les valeurs des variables ou attributs des objets Zope. Vous noterez, dans les scripts, l’utilisation de la fonction “encrypt()” de MySQL et de son argument “salt”. En effet, “ENCRYPT(chaine de caractères, salt)” génère une nouvelle chaîne de caractères chiffrée grâce à la chaîne “salt”.

4. Ajoutez les scripts Python pour les SQL Methods

Vous devez maintenant bâtir la couche applicative du système en créant des scripts Python, dédiés à la gestion des utilisateurs, utilisables via le web comme tout objet Zope.

5. Testez le système

Utilisez le script “sql_add_user” pour créer les entrées de votre utilisateur d’administration de Zope et celles d’un utilisateur de test dans la table “users”. Pour chaque ajout, ouvrez la page de gestion du script et cliquez sur le lien de l’onglet “Test”. Saisissez ensuite les valeurs des attributs dans les champs proposés et activez le bouton “Submit Query”.Si tout s’est bien déroulé jusqu’ici, vous pouvez tester l’authentification de vos 2 utilisateurs dans le cadre d’un accès à l’intranet. Pour cela, pointez votre navigateur à l’adresse de l’intranet (http://localhost:8080/intranet), après avoir pris soin de fermer le navigateur et de le relancer pour réinitialiser le cookie de la session. Vous obtenez alors la boîte de dialogue d’authentification de Zope pour l’intranet.

6. Créez un formulaire pour changer les mots de passe

Dans l’objet “LoginManager”, créez un objet de type “DTML Method” et nommez-le “change_password_form”. Créez le formulaire invitant l’utilisateur à changer de mot de passe. Concevez ensuite un autre objet “DTML Method” baptisé “change_password”, validant ce changement.

🔴 Pour ne manquer aucune actualité de 01net, suivez-nous sur Google Actualités et WhatsApp.


Kamon Ayeva