Université de TUNIS II Ecole Nationale des Sciences de l’Informatique (Tunisie) Réalisé par co-encadré par (Responsable du stage) INRIA Sophia-Antipolis (France) (France) 1999-2000 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Table des Matières 1 REMERCIEMENTS 4 2 MOTS CLES 5 3 INTRODUCTION. 7 4 PRESENTATION GENERALE 8 4.1 L’INRIA. 8 4.1.1 L’INRIA – PRESENTATION GENERALE. 8 4.1.2 L’INRIA – HISTORIQUE. 8 4.1.3 LES CHIFFRES-CLES. 11 4.2 L'UNITE DE RECHERCHE INRIA SOPHIA ANTIPOLIS. 11 4.2.1 LES EQUIPES DE L’UNITE 11 4.2.2 THEME 3 : INTERACTION HOMME-MACHINE, IMAGES, DONNEES, CONNAISSANCES. 12 4.3 ORION - ENVIRONNEMENTS INTELLIGENTS DE RESOLUTION DE PROBLEMES POUR DES SYSTEMES AUTONOMES. 13 4.3.1 PRESENTATION ET OBJECTIFS GENERAUX. 13 4.3.2 RELATIONS INTERNATIONALES ET INDUSTRIELLES. 14 4.4 LE PILOTAGE DE PROGRAMMES 15 4.4.1 PRESENTATION 15 4.4.2 STRUCTURE DES CONNAISSANCES 15 5 PROBLEMATIQUE 5.1 L’EXISTANT 17 19 6 ETAT DE L’ART 20 6.1 6.2 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.4 6.4.1 6.4.2 6.4.3 6.4.4 20 22 22 23 23 25 25 26 27 27 28 28 28 GESTION DES UTILISATEURS ORGANISATION DES RESSOURCES (FICHIERS…) MODELES DE SECURITE TYPES DE SECURITE MECANISMES DE PROTECTIONS LES ACL UNIX LES ACL WINDOWS NT LES C-LISTS JAVA DISTRIBUTION SUR INTERNET LES SOCKETS HTTP/CGI LES SERVLETS JAVA DCOM Ecole Nationale des Sciences de l’Informatique de Tunisie 1 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes 6.4.5 6.4.6 6.4.7 CORBA RMI COMPARAISON ENTRE LES DIFFERENTES TECHNIQUES INRIA 28 28 29 7 SPECIFICATIONS 31 7.1 MODELISATION DU PROBLEME : 7.2 SPECIFICATION DES BESOINS 7.3 CONTRAINTES LOGICIELLES/MATERIELLES: 7.3.1 LANGAGES ET ENVIRONNEMENTS DE PROGRAMMATIONS: 7.3.2 ENVIRONNENT DE DEVELOPPEMENT : 7.3.3 ENVIRONNEMENT D'EXECUTION : 31 31 33 33 33 33 8 CONCEPTION 34 8.1 ARCHITECTURE GENERALE 8.2 GESTION DES UTILISATEURS 8.2.1 LES DOMAINES 8.2.2 LES UTILISATEURS 8.2.3 LES GROUPES 8.2.4 LES DOMAINES, UTILISATEURS ET GROUPES SPECIAUX 8.2.5 COMPARAISON AVEC LE MODELE D’UNIX 8.2.6 COMPARAISON AVEC LE MODELE DE WINDOWS NT 8.3 ORGANISATION DES RESSOURCES 8.4 LOCALISATION, IDENTIFICATION DES OBJETS 8.5 MODELE DE SECURITE 8.5.1 L’AUTHENTIFICATION 8.5.2 CONTROLE DE L’ACCES ET DE LA MANIPULATION DES RESSOURCES 8.5.3 LA STRUCTURE D’UNE PERMISSION: 8.5.4 LE SIGNATAIRE 8.5.5 LA CIBLE 8.5.6 LES CONTRAINTES 8.6 DISTRIBUTION DES OBJETS 8.6.1 FONCTIONNEMENT DU SOUS-SYSTEME LOCAL 8.6.2 FONCTIONNEMENT DU SOUS-SYSTEME EXPORTE 8.6.3 MIGRATION DES OBJETS 8.6.3.1 Problème de sécurité 8.6.3.2 Problème au niveau du RMI 8.7 APPLICATION AU PILOTAGE DE PROGRAMME 8.8 MODELE OBJET 8.8.1 TOUT EST DOBJECTINTERFACE : 8.8.2 UML DE LOCALSYSTEMMANAGERINTERFACE 8.8.3 UML DE DOBJECTINTERFACE HIERARCHIE DES OBJETS 34 37 37 38 38 39 40 41 41 41 43 43 44 44 45 45 47 51 53 55 56 57 57 58 60 60 61 61 62 9 REALISATION 63 9.1 L’API DOOVOS 9.2 LA SERVLET PROGRAMSUPERVISIONSERVLET 9.3 LES OUTILS COMPLEMENTAIRES 9.3.1 HANDLER_GENERATOR 9.3.2 TEMPLATEGENERATOR 9.3.3 JHTML_GENERATOR 9.3.4 DOOVOS LAUNCHER 9.3.5 DDEBUGGER 63 64 66 66 66 67 67 69 Ecole Nationale des Sciences de l’Informatique de Tunisie 2 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes 9.4 9.5 INTEGRATION DANS L’APPLET PERFORMANCES DU SYSTEME INRIA 70 70 10 CONCLUSION 72 11 BIBLIOGRAPHIE 73 11.1 11.2 11.3 73 73 74 ARTICLES OUVRAGES ADRESSES INTERNET ANNEXE A : LA HIERARCHIE DES CLASSES ET DES INTERFACES DEVELOPPEES 76 12 ANNEXE B : COMPARATIF ENTRE MOTEURS DE SERVLETS 80 13 ANNEXE C : UTILISATION DE L’API DOOVOS, EXEMPLE 81 14 ANNEXE D : CONFIGURATION DES SERVEURS, EXEMPLE 83 Ecole Nationale des Sciences de l’Informatique de Tunisie 3 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 1 Remerciements Je remercie tout particulièrement Mme Sabine Moisan, mon responsable de stage, ainsi que Mme Monique Thonnat, directeur du projet, pour leurs précieux conseils et leur patience face à mes nombreuses questions. Je voudrais également remercier Mr Francis Avnaim, avec qui j’ai collaboré durant toute la durée du stage et qui m’a été d’une aide considérable en ce qui concerne Unix et Java. Mme Wided Chaari m’a permis d’effectuer ce stage, qu’elle en soit remerciée. Enfin, je remercie toute l’équipe ORION (Alain Boucher, Robert Stahr, Francois Bermond et tous les autres sans exception). Ecole Nationale des Sciences de l’Informatique de Tunisie 4 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 2 Mots clés Pilotage de programmes Base de connaissances Distribution Utilisateur Ressource Java Applet RMI Activation Sécurité Serialisation Servlet HTML Client-Serveur Ecole Nationale des Sciences de l’Informatique de Tunisie 5 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Résumé : Ce projet, réalisé à l’INRIA Sophia Antipolis, porte sur la spécification, la conception et la réalisation d’un serveur permettant via Internet de gérer de façon distribuée des ressources et les utilisateurs de ces ressources, tout en garantissant un niveau acceptable de sécurité. Il a été décidé de développer un outil permettant à des scientifiques de bénéficier à travers un site Internet des outils développés par l’équipe de recherche Orion et tout particulièrement l’équipe de pilotage de programmes. Mon travail a consisté à concevoir un modèle de gestion des utilisateurs, des ressources et de la sécurité. Ce modèle a été implanté en un système comprenant essentiellement : - une API Java évolutive permettant de manipuler des ressources réparties, ou encore de définir de nouveaux types de ressources. - des Servlet permettant, via Internet et de façon interactive, l’administration du système à partir de pages HTML sur un navigateur. Des outils de développements ont également été réalisés et le système a été utilisé pour la distribution d’une application liée au pilotage de programmes. Abstract : This project, done at INRIA Sophia Antipolis, deals with the specification, the design and the developpment of a server which allows via Internet the management of distributed resources and users while garanteeing and acceptable level of security. We have developped a tool that allows scientists from all over the world to access to tools and resources in the ORION team (especially in Program Supervision). My work has consisted in the design of a management model of either users or resources, taking into account security concerns. The corresponding developped system is based on : - a Java API for the management of distributed resources or the definition of new resource types; - Java Servlets for the administration of the system via a WEB browser. Depeloppment tools have been also realized and the system has been used to implement a distributed application related to Program Supervision. Ecole Nationale des Sciences de l’Informatique de Tunisie 6 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 3 Introduction. Dans le cadre du projet de fin d’études pour l’obtention du diplôme d’Ingénieur en Informatique, j’ai passé un peu moins de quatre mois (du 10 mars au 30 juin 2000) au sein de l’équipe ORION à Sophia Antipolis (France). Ce projet porte sur la spécification, la conception et la réalisation d’un serveur permettant au niveau d’Internet de gérer de façon distribuée des ressources - en l’occurrence des bases de connaissances pour le pilotage de programmes – et les utilisateurs de ces ressources, tout en garantissant un niveau acceptable de sécurité. Les domaines abordés au cours de ce projet sont nombreux. Citons la sécurité, les systèmes distribués les bases de données distribuées orientées objet... Dans un premier temps, je présenterai mon environnement de travail, à savoir l’INRIA, ainsi que le projet Orion. Celui-ci comporte plusieurs axes de recherches, dont le pilotage de programmes. Ce thème étant à la base de mon travail, je le présenterai dans un deuxième temps. Un état de l’art sera esquissé et je montrerai ce qu’apporte la littérature à mon problème. Suivront alors une description des spécifications et de la conception du serveur, puis les développements réalisés seront détaillés. Ecole Nationale des Sciences de l’Informatique de Tunisie 7 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 4 Présentation générale 4.1 L’INRIA. 4.1.1 L’INRIA – Présentation générale. Créé en 1967 à Rocquencourt près de Paris, l'INRIA (Institut national de recherche en informatique et en automatique) est un établissement public à caractère scientifique et technologique (EPST) placé sous la double tutelle du ministère de l'éducation nationale, de la recherche et de la technologie et du ministère de l'économie, des finances et de l'industrie. Les principales missions de l'INRIA sont (selon le décret du 2 août 1985 portant sur l'organisation et le fonctionnement de l'institut) : - entreprendre des recherches fondamentales et appliquées ; - réaliser des systèmes expérimentaux ; - organiser des échanges scientifiques internationaux ; - assurer le transfert et la diffusion des connaissances et du savoir-faire ; - contribuer à la valorisation des résultats de la recherche ; - contribuer, notamment par la formation, à des programmes de coopération pour le développement ; - effectuer des expertises scientifiques ; - contribuer à la normalisation. 4.1.2 L’INRIA – Historique. 1967-1972 : les premiers pas de l'IRIA Sur l’initiative de la Direction générale de la recherche scientifique et technique (DGRST), un groupe de dix personnalités indépendantes, choisies pour leur compétence scientifique ou économique, se réunissait, à la fin de l'année 1964 et courant 1965, sous la présidence du professeur Lelong pour conduire une réflexion sur l'importance des nouvelles techniques du traitement de l'information. Le mot informatique n'avait pas encore cours ; il devait être proposé à quelque temps de là, mais le rapport que le groupe adressait en février 1966 au Comité consultatif de la recherche scientifique et technique (CCRST) mettait en lumière tous les concepts de base de cette nouvelle science et attirait l'attention sur l'influence décisive qu'elle allait jouer dans tous les domaines d'activités humaines. Un peu plus tard, les instances politiques intéressées mettaient en œuvre l'ensemble des mesures connues sous le terme de « Plan Calcul ». L'Institut de recherche d'informatique et d'automatique, IRIA, créé par le décret 67-722 du 25 août 1967, constituait l'un des organes principaux d'exécution de ce Plan Calcul. Ecole Nationale des Sciences de l’Informatique de Tunisie 8 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA L'étendue de ses missions faisait participer l'IRIA à tous les aspects de l'opération. L'institut jouait, en effet, le rôle majeur, aussi bien pour la recherche que pour la formation des hommes et pour la diffusion de la connaissance scientifique et technique. 1972-1980 : de l'IRIA à l'INRIA Le 25 février 1972, un conseil interministériel, sur proposition du Comité consultatif de la recherche scientifique et technique (CCRST), confirmait l'IRIA dans ses vocations et arrêtait une série de décisions propres à en amplifier les actions, notamment dans le domaine de la synthèse et orientation de la recherche française en informatique et dans le domaine de l'assistance technique donnée à la pénétration de l'informatique dans toutes les activités d'intérêt national : regroupement de la recherche au sein d'un « Laboratoire de recherche d'informatique et d'automatique », le Laboria ; développement des interventions ayant la nature d'une assistance technique à des applications exemplaires de l'informatique dans les différents secteurs d'activités d'intérêt national ; rattachement direct à l'institut, qui en devient ordonnateur, des crédits d'irrigation de la recherche. Les statuts de l'IRIA ont été partiellement modifiés suivant ces dispositions par le décret 73-338 du 13 mars 1973. La réforme de structure s'appuyait sur une pièce maîtresse, la création d'un Comité consultatif de la recherche en informatique, le CCRI, chargé d'élaborer les propositions d'une politique nationale de la recherche dans les domaines de l'informatique et de l'automatique. Le décret portant création du CCRI est le 73-130 du 12 février 1973. Parmi les missions auxiliaires de l'IRIA, intimement liées aux missions principales, on trouvait l'animation et la conduite de projets pilotes ; le premier étant la réalisation d'un réseau permettant l'interconnexion de plusieurs grands centres de calcul (Projet Cyclades). Dans son action, l'IRIA se souciait non seulement d'accroître le potentiel en chercheurs, mais aussi d'orienter l'implantation des équipes, selon les préoccupations de la Délégation à l'aménagement du territoire (DATAR). Il mettait ainsi à la disposition d'équipes de province, des postes budgétaires de chercheurs, notamment à Rennes. Ces équipes portaient le nom d'équipes associées de l'IRIA. En 1975, à partir des équipes de Rennes, était créé l'Irisa, laboratoire de recherche associé à l'université de Rennes 1 et au CNRS. Fin 1979, l'institut se recentre sur sa mission de recherche et de transfert et devient par décret du 27 décembre 1979, l'INRIA (Institut national de recherche en informatique et en automatique), établissement public à caractère administratif sous la tutelle du ministre de l'industrie. Parallèlement est créée, par décret du 27 septembre 1979, l'Agence pour le développement de l'informatique qui est chargée, pour ce qui concerne les applications de l'informatique, de mener des expérimentations, des actions de sensibilisation, de formation et de prospection de nouveaux secteurs d'activité concernés. Elle est Ecole Nationale des Sciences de l’Informatique de Tunisie 9 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA également chargée d'une mission d'animation et de développement de la recherche publique et privée sur les applications de l'informatique, sur les techniques susceptibles de favoriser leur développement. Cette agence sera supprimée en 1986. Après 1980 : l'essor de l'INRIA Depuis les années 80, l'INRIA n'a cessé de se développer. En 1980, l'unité de recherche de Rennes voit le jour en tant qu'une des composantes de l'Irisa. En 1982, est créée l'unité de recherche de Sophia Antipolis. En 1983, Alain Bensoussan devient président directeur général de l'INRIA. En 1984, est créée l'unité de recherche de Lorraine, conjointement avec l'université de Nancy et le Centre de recherche en informatique de Nancy (Crin) du CNRS. En 1984, Simulog voit le jour. Il s'agit de la première filiale industrielle de l'INRIA, dans le domaine de l'ingénierie assistée par ordinateur. C'est la première d'une série qui conduira à la création de 19 autres sociétés de technologie issues de l'INRIA. En 1985, l'INRIA devient établissement public à caractère scientifique et technologique (EPST) placé sous la double tutelle du ministère chargé de la recherche et du ministère chargé de l'industrie. Le décret 85-831 du 2 août 1985, portant sur l'organisation et le fonctionnement de l'institut, rappelle ses principales missions : - entreprendre des recherches fondamentales et appliquées ; - réaliser des systèmes expérimentaux ; - organiser des échanges scientifiques internationaux ; - assurer le transfert et la diffusion des connaissances et du savoir-faire ; - contribuer à la valorisation des résultats des recherches ; - contribuer, notamment par la formation, à des programmes de coopération pour le développement ; - effectuer des expertises scientifiques ; - contribuer à la normalisation. En 1987, l'INRIA célèbre son 20e anniversaire : Alain Bensoussan déclare que la plus grande spécificité de l'institut consiste à obtenir que les résultats de la recherche soient transférés aussi vite que possible dans le secteur économique. En 1987, la deuxième filiale de l'INRIA, Ilog, chargée de l'industrialisation de produits INRIA en intelligence logicielle, voit le jour. En 1989, l'INRIA est un des fondateurs du consortium européen Ercim qui regroupe actuellement quatorze organismes de recherche. En 1990, la troisième filiale industrielle de l'INRIA, O2 Technology, est créée dans le domaine des systèmes de gestion de bases de données orientées objet. En 1992, l'unité de recherche de Rhône-Alpes voit le jour. En mars 1994, l'INRIA adopte un plan stratégique visant à définir les principaux axes de la politique générale menée par l'institut. Le 31 janvier 1995, l'INRIA est le premier organisme de recherche à signer avec le ministère de l'enseignement supérieur et de la recherche un contrat d'objectifs. Ce Ecole Nationale des Sciences de l’Informatique de Tunisie 10 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA contrat associe également le ministère de l'industrie, des postes et des télécommunications, autre tutelle de l'institut. En 1995, l'INRIA est choisi comme pilote européen du consortium W3C, créé en 1994, aux côtés du MIT pour les Etats-Unis. En 1996, Bernard Larrouturou devient président directeur général de l'INRIA. En décembre, il fait adopter par le Conseil d'administration les principales orientations de la politique de l'institut pour les prochaines années. En décembre 1997, un essai prospectif rédigé par Bernard Larrouturou en juillet 1997 et intitulé « Inria 2007, l’INRIA dans dix ans » est diffusé aux partenaires de l'institut. 4.1.3 Les chiffres-clés. L'INRIA, c'est : 2 100 personnes, dont 1 700 scientifiques : 715 postes permanents 550 doctorants 200 chercheurs d'autres organismes 40 post-doc 70 ingénieurs-experts 100 stagiaires 650 visiteurs étrangers 200 collaborateurs extérieurs universitaires ou industriels 5 unités de recherche réparties sur toute la France un budget de 495 MF (hors taxes) en 1997 300 contrats actifs 20 sociétés de technologie. 4.2 L'unité de recherche INRIA Sophia Antipolis. Au cœur de la plus grande technopole européenne, l'unité de recherche INRIA Sophia Antipolis représente un potentiel de 400 personnes, dont 140 sur poste budgétaire. Cette unité entretient de nombreuses collaborations avec les laboratoires de la région ainsi qu'avec le milieu industriel comme peuvent en témoigner les sociétés de technologie créées par d'anciens chercheurs du site. 4.2.1 Les équipes de l’unité Thème 1 : Réseaux et systèmes MEIJE - Parallélisme, synchronisation et temps réel MISTRAL - Modélisation en informatique et systèmes de télécommunication : recherche et applications logicielles RODEO - Réseaux à hauts débits, réseaux ouverts SLOOP - Simulation, langages à objets et parallélisme Ecole Nationale des Sciences de l’Informatique de Tunisie 11 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA TROPICS - TRansformations et Outils Informatiques Pour le Calcul Scientifique (PLANETE - Protocoles et applications pour l'Internet) Thème 2 : Génie logiciel et calcul symbolique CAFE - Calcul Formel et équations LEMME - Logiciels et Mathématiques OASIS - Objets Actifs, Sémantique, Internet et Sécurité PRISME - Géométrie, algorithmes et robotique SAGA - Systèmes algébriques, géométrie et applications (CERTILAB- Spécifications formelles, certification de logiciel) (LETOOL - Environnements de programmation orientés objets et interfaces visuelles) Thème 3 : Interaction homme-machine, images, données, connaissances ACACIA - Acquisition des connaissances pour l'assistance à la conception par interaction entre agents ARIANA - Problèmes inverses en observation de la Terre EPIDAURE - Imagerie et robotique médicale ORION - Environnements intelligents de résolution de problèmes pour des systèmes autonomes ROBOTVIS - Vision par ordinateur et robotique (AID - Gestion des connaissances pour l'aide à la conception coopérative) Thème 4 : Simulation et optimisation de systèmes complexes CAIMAN - Calcul scientifique, modélisation et analyse numérique COMORE - Contrôle et modélisation de ressources renouvelables ICARE - Instrumentation, commande et architecture des robots évolués MIAOU - Mathématiques et informatique de l'automatique et de l'optimisation pour l'utilisateur OMEGA - Méthodes numériques probabilistes SINUS - Simulation numérique dans les sciences de l'ingénieur SYSDYS - Systèmes dynamiques stochastiques (CHIR - Chirurgie, Informatique et Robotique) 4.2.2 Thème 3 : Interaction données, connaissances. homme-machine, images, Les travaux dans ce domaine tendent à améliorer l'interaction entre l'homme et la machine. La psychologie cognitive et l'ergonomie permettent de mieux adapter les systèmes informatiques à leurs utilisateurs (aide à l'apprentissage, assistance à la conduite d'installations, postes de pilotage). L'intelligence artificielle joue un rôle central, d'une part sur le plan du dialogue (parole, langage naturel, graphismes et vision, Ecole Nationale des Sciences de l’Informatique de Tunisie 12 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA données multilingues), d'autre part pour la conception d'outils avancés (raisonnements, représentation des connaissances, architectures multi-experts). La modélisation d'objets tridimensionnels et la reconnaissance de scènes, en prenant éventuellement en compte le mouvement, fournissent des techniques de vision par ordinateur nécessaires au pilotage de robots (robots mobiles, véhicules routiers autonomes, robotique médicale) et interagissent avec la synthèse d'images (simulateurs, illumination artificielle, production audiovisuelle). À l'aide en particulier de ces mêmes techniques, des algorithmes de compression d'images ou de séquences d'images sont développés. La géométrie et les statistiques sont à la base de ces travaux. 4.3 ORION - Environnements intelligents de résolution de problèmes pour des systèmes autonomes. 4.3.1 Présentation et objectifs généraux. Sous la responsabilité scientifique de Mme Monique Thonnat, L’objectif d’ORION est de concevoir et de développer des techniques et des logiciels pour, d'une part, le pilotage automatique de programmes et, d'autre part, l'interprétation automatique d'images. ORION focalise ses travaux sur l'étude des connaissances qui interviennent dans ces deux types de problèmes : connaissances sur les programmes et leur utilisation pour le pilotage automatique de programmes, et connaissances sur les objets et les scénarios à reconnaître pour l'interprétation automatique d'images. Thématiquement, Orion est une équipe pluridisciplinaire, à la frontière des domaines de la vision par ordinateur, des systèmes à base de connaissances et du génie logiciel. Les techniques utilisées relèvent donc de ces trois disciplines. Les applications qui intéressent ORION sont principalement du domaine de la vision par ordinateur. Plus précisément, l’objectif est de faciliter la construction de systèmes intelligents automatiques et adaptatifs, c'est-à-dire des systèmes incorporant explicitement une expertise (intelligents), fonctionnant sans intervention humaine pour les prises de décisions (automatiques) et ayant des capacités de réaction vis-à-vis des changements de leur environnement (adaptatifs). Parmi les applications qui nécessitent un fort degré d'autonomie, ORION a identifié, d'une part, les problèmes d'automatisation de l'utilisation de programmes, et, d'autre part, les problèmes d'interprétation automatique d'images. L'automatisation de l'utilisation de programmes nécessite de planifier les traitements et de contrôler l'exécution de codes de calcul. On utilisera le terme pilotage automatique de programmes pour désigner ce type de problèmes. Dans de nombreuses applications, Ecole Nationale des Sciences de l’Informatique de Tunisie 13 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA l'utilisateur ne peut pas interpréter les résultats des logiciels de traitements de données, soit parce qu'il n'en est pas capable (manque de compétence), soit parce qu'il n'en a pas le temps (saturation de ses capacités), soit enfin parce qu'il n'est pas présent (systèmes embarqués). Ceci correspond à un sous-problème de la perception, celui de l'interprétation des résultats des traitements d'images. On utilisera le terme d'interprétation automatique d'images pour désigner ce type de problèmes. 4.3.2 Relations internationales et industrielles. Participation au projet européen Climat et Environnement ASTHMA pour la reconnaissance automatique d'images de pollens avec Zambon (Italie), ACRI (France), les universités de Barcelone (Espagne), de Cordoba (Espagne), de Clermont (France), le CHU de Nice (France), le FISBAT (Italie) et le PAMOC (France). Coopération avec Bull dans le cadre de l'action de développement Dyade Télescope pour le développement d'un système intelligent de vidéo-surveillance. Participation à l'action coopérative LIRE regroupant les projets SYCO et OMEGA de Nancy, le projet SHERPA de Grenoble et le projet ORION sur le thème de la résolution de problèmes avec limitation de ressources. Collaborations avec l'Inserm/La Pitié Salpétrière U494, les universités d'Amsterdam et de Maryland. Ecole Nationale des Sciences de l’Informatique de Tunisie 14 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 4.4 Le pilotage de programmes 4.4.1 Présentation L’objectif du pilotage de programmes est de pouvoir utiliser de façon optimale un ensemble de programmes préexistants, indépendamment d’un domaine applicatif particulier. Pour cela, les systèmes de pilotage automatisent - partiellement ou totalement - les étapes nécessaires à la construction d’un certain séquencement de programmes de traitement qui résout l’objectif d’un utilisateur. Il est toutefois à noter que le but du pilotage n’est pas d’optimiser les programmes euxmêmes, mais leur utilisation, qui peut être délicate pour l’utilisateur non-spécialiste. En effet, les programmes ne s’appliquent que sous certaines conditions qui dépendent de la nature ou du contenu de leurs données en entrée. Leur syntaxe d’appel peut être complexe et leur exécution nécessite souvent la détermination préalable de valeurs de paramètres d’entrée ou le formatage de certaines données. Dans un système de pilotage de programmes, on distingue deux types d’intervenants. D’abord, l’expert. Son rôle est de construire une base de connaissances sur l’utilisation et les caractéristiques des programmes. Ensuite, l’utilisateur final (ou applicatif). Il utilise le système pour une application donnée en spécifiant un problème. Requête utilisateur Système de pilotage de programmes Données I/O programmes Moteur Base de connaissances I/O Fig 1: système de pilotage 4.4.2 Structure des connaissances Les connaissances intervenant dans le raisonnement (moteur) en pilotage de programmes sont variées, et peuvent se présenter de diverses façons. Elles décrivent en fait, l’enchaînement des tâches exécutées par le moteur. Ces tâches peuvent être primitives (liées à un programme concret) ou composites regroupant plusieurs autres sous-tâches suivant un certain opérateur : séquence, choix, spécialisation, itération, optionnalité, etc. Ecole Nationale des Sciences de l’Informatique de Tunisie 15 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Par ailleurs, pour la sélection de la (ou les) sous-tâche, au niveau d’un opérateur (de choix par exemple), se fait moyennant des critères de sélection sous forme de règles dans une base de règles. Composite séquence séquence choix itération primitif programmes programmes programmes Fig 2: les tâches dans une base de pilotage de programmes Au niveau du groupe Orion, une base de connaissances est un ensemble de fichiers (essentiellement des fichiers YAKL qui est un langage semi-formel pour la description des bases de connaissances en pilotage). Ecole Nationale des Sciences de l’Informatique de Tunisie 16 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 5 Problématique Les ressources de la communauté scientifique sont très souvent éparpillées. C’est le cas des bibliothèques de programmes. En fait, de part le monde, plusieurs équipes de recherches développent leurs propres outils très souvent indépendamment les uns des autres, au risque de refaire ce qui a déjà été fait. Cela est essentiellement dû : - aux différents engagements des scientifiques : - engagement temporaire : difficulté de trouver quand se réunir. - engagement géographique : difficulté de trouver où se réunir. - et à la difficulté de retrouver avec précision les informations requises. Par exemple, si pour un tel problème une solution a déjà été développée. Il y a donc un manque d’outils de coopération qui pourraient permettre aux scientifiques de mettre en commun leurs ressources. Par ailleurs, Internet possède de nombreux avantages: - simplicité d’utilisation car ne demandant ni des connaissances pointues en un quelconque domaine, ni des ressources logicielles (seulement un navigateur) encore moins matérielles (une station de travail suffit). - accessibilité : désormais Internet est à la portée du citoyen moyen dans la majorité des pays : dans les écoles, dans des lieux publics (publinet, cybercafés…), dans les locaux administratifs, etc. - et surtout une expansion phénoménale : en effet, le nombre de techniciens, de développeurs et sponsors ne cesse de croître. Il en va de même quant aux ressources informatiques logicielles et matérielles : des serveurs superpuissants, des logiciels et des API très développées, etc. C’est ainsi que les Applets Java, par exemple, combinent toute la puissance d’un programme avec la portabilité proposée par le navigateur totalement indépendant de la plateforme (système d’exploitation, matériel utilisé…) Internet est donc un excellent candidat pour tout outil de coopération et de partage des ressources. Cependant, au niveau de l’utilisateur, il est clair que la distribution des ressources sur plusieurs sites pose un certain nombre de problèmes. En effet cela requiert : - la connaissance de l’emplacement (URL) des différents sites. Ecole Nationale des Sciences de l’Informatique de Tunisie 17 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA - la connaissance des différentes façons de présenter les produits spécifiques à chaque site (IHM pas forcément la même) - une perte de temps pour passer de l’un à l’autre - l’impossibilité de combiner les ressources et les produits (exemple : moteur d’inférence sur un site X et base de connaissance sur un autre site Y). Il a donc été décidé de développer un outil permettant à des scientifiques (du monde entier), via Internet, de bénéficier à travers un seul point d’entrée (un seul site) des outils développés par l’équipe de recherche Orion et tout particulièrement l’équipe de pilotage de programmes, mais aussi, toute autre équipe désirant apporter son expérience et ses ressources et coopérer avec les autres. C’est ainsi que, les groupes Orion (INRIA France) et GRIFT (ENSI Tunisie) pourront se partager un même espace de travail (quoi que virtuel) permettant à l’un et à l’autre d’avoir une vision globale des apports des deux groupes à la fois au sens des bases de connaissances, moteurs d’inférences, etc. Néanmoins, comme pour tout système distribué, cela soulève essentiellement quatre problèmes : - d’abord de sécurité, en effet, la sécurité et un facteur décisif dès que plusieurs utilisateurs évoluent dans un même système et aient droit aux mêmes ressources. - ensuite de performance, effectivement, même si la distribution est assez souvent un bonus favorisant la performance de quelques systèmes (essentiellement lorsqu’il s’agit d’une distribution de tâches et non de ressources), elle demeure cependant le goulot d’étranglement de bien d’autres ; surtout s’il s’agit d’un réseau de caractéristiques médiocres au plan des qualités de services comme c’est le cas d’Internet. - puis d’interopérabilité, c’est le problème lié au fait que les ressources distribuées ne sont pas nécessairement sur des plates-formes compatibles (systèmes d’exploitations différents). Le plus souvent, on convient, cependant, d’homogénéiser le système en ne choisissant par exemple que des machines Unix. - enfin de disponibilité et de cohérence, en fait, cela est dû à des limitations purement techniques : une ressource n’est jamais partout à la fois ; pourtant, elle doit le paraître uniformément (identiquement) au niveau de chaque utilisateur d’un sous-système du système distribué. Mon travail consistera donc à essayer de trouver des solutions admissibles (dans la mesure du possible et du temps du stage qui dure moins de 4 mois) pour les problèmes Ecole Nationale des Sciences de l’Informatique de Tunisie 18 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA cités ci-dessus. Mais, dans un tout premier temps, on va d’abord prendre connaissance de ce qui a déjà été fait au niveau de l’équipe de pilotage de programmes d’Orion pour survoler ensuite ce que propose la littérature en relation plus ou moins directe avec ce projet. 5.1 L’existant L’équipe de pilotage de programmes, coordonnée par Mme Sabine Moisan, a déjà développé un moteur d’inférence (PEGASE), des bases de connaissances ainsi qu’une application Java (réalisée par Mr Francis Avnaim) capable de visualiser ces bases sous forme de graphes et permettant par-là même de les modifier de façon interactive. L’intérêt de cette application est qu’elle propose de manipuler des données complexes de façon très intuitive (glisser - déposer…) et de mieux comprendre le mécanisme de résolutions de problèmes effectués par le moteur d’inférence grâce au graphe des tâches qui schématise le séquencement des différentes tâches (programmes) appliquées aux données pour retrouver le résultat attendu. Pour rendre cette application accessible à d’autres chercheurs, il a été décidé de la transformer en Applet Java disponible, via Internet, à partir d’un serveur dédié. Une première version de l’Applet était déjà en cours de développement lorsque je suis arrivé. Celle-ci ne permettait que la visualisation de bases déjà existantes et nullement de les modifier ou d’en créer des nouvelles. Il a donc été décidé d’étendre les possibilités de l’Applet en ce sens, ce qui pose le problème de la gestion des utilisateurs (organisation, droits d’accès…) et des ressources qui doivent être modifiables à distance. Fig 3 : l’application de pilotage de programmes Ecole Nationale des Sciences de l’Informatique de Tunisie 19 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 6 Etat de l’art Comme dans la plupart des cas, une solution parfaitement adaptée à notre besoin n’est pas citée dans la littérature. Ce sont plutôt des solutions pour des problèmes semblables et/ou plus spécifiques que l’on retrouve le plus souvent. En effet, la gestion des utilisateurs ou celle des ressources, les mécanismes de sécurité, ou encore la distribution sur le WEB, sont très communs et ont fait couler beaucoup d’encre. En ce qui concerne les deux premiers points, on essayera de comparer et discuter les approches des systèmes d’exploitations les plus répandus essentiellement Unix, et Windows NT. En ce qui concerne la sécurité, on se penchera toujours sur les mêmes systèmes mais également sur le modèle de sécurité proposé par Java. Au niveau de la distribution, plusieurs techniques seront présentées et discutées 6.1 Gestion des utilisateurs Parce qu’un utilisateur effectif (humain) ne peut être authentifié au niveau d’une machine, il a toujours été question d’attribuer un « compte utilisateur » à chacun de ces utilisateurs. Ce compte permettra de définir entièrement les ressources et les droits relatifs à telle ou telle personne. Dans Unix, les utilisateurs sont gérés par les notions d’utilisateur (user) et de groupe (group). En fait, tout utilisateur effectif est représenté par : D’abord un login (userName) : c'est une chaîne de caractère de longueur limitée qui identifie logiquement l'utilisateur (ex. : tbensala). Ensuite, un mot de passe qui est également une chaîne de caractères. Celle-ci ne doit être connue que par son utilisateur. Il garantit son authentification vis-à-vis du système. Puis, un identifiant (UID) : comme la manipulation des entiers est de loin plus simple et plus performante que celle des chaînes de caractères, les implémentations d'UNIX ont toujours utilisé un entier pour définir de façon unique l'utilisateur. Cependant, ce dernier reste quand même manipulable à un niveau plus élevé : le login et l'UID sont équivalents et très souvent interchangeables. Enfin, un identifiant de groupe GID: la notion de groupe a été introduite essentiellement pour des raisons de simplification de l'administration. En effet, un administrateur a souvent besoin de manipuler un ensemble de comptes à la fois. Par exemple, donner le droit en écriture sur un fichier à plusieurs utilisateurs. Pour cela, la notion de groupe permet alors d'identifier les droits d'un utilisateur non seulement par son UID, mais aussi par le ou les groupes auxquels il appartient. En fait, les droits de l'utilisateur sont équivalents à l'union des droits alloués à l'UID et à l'ensemble des groupes auxquels il est inscrit. Ecole Nationale des Sciences de l’Informatique de Tunisie 20 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Toutefois, il est intéressant de préciser qu'avant la version SVR4, un utilisateur ne pouvait appartenir qu'à un seul groupe à la fois. Alors que dans les versions récentes, le système calcule au login de l'utilisateur l'ensemble des droits qui lui sont allouées en énumérant tous les groupes auxquels il appartient (sachant que la correspondance entre utilisateurs et groupes est précisée dans un seul fichier). Par ailleurs, Unix définit par défaut 3 utilisateurs: - root : c'est le super-utilisateur qui peut créer les comptes et réaliser les fonctions systèmes de bas niveau. - uucp : pour la gestion du système UUCP - deamon : pour la gestion des aspects réseaux (spooler de l'imprimante réseau, etc.) Quant à Windows, la notion de multi-utilisateurs n'est apparue qu'avec Windows NT. En effet, même si au niveau de Windows 95 et 98 on gérait déjà la notion de profile pour définir différents comptes sur la même machine, cette gestion ne dépassait pas la possibilité d'avoir différents espaces de travail pour chacun, sans se préoccuper - de quelque façon que ce soit - de tout ce qui est sécurité : tout le monde a tous les droits. Avec l’avènement de la technologie NT, Windows permet désormais de gérer les utilisateurs et la sécurité grâce à trois notions : utilisateur (user), groupe (group) et domaine (domain). Un utilisateur est alors défini avec son login, son mot de passe mais aussi son domaine. Un domaine est un ensemble d'utilisateurs et de groupes de ces utilisateurs. Le système gère un ensemble de domaines totalement indépendants les un des autres et ne possédant, chacun, aucune connaissance des autres domaines sauf si explicitement précisé. Les modèles de domaines peuvent être influencés par de nombreux paramètres (géographiques, limitation matérielle, sécurité ou toute autre politique de gestion). Ainsi, un domaine est une autre façon de regrouper les utilisateurs plus générale que les groupes car un domaine peut aussi contenir des groupes à la manière d’Unix. De plus, Windows NT propose deux types d’interactions entre domaines : - one-way Trust-Relationship : dans cette relation (non symétrique) les utilisateurs d’un domaine A peuvent également être reconnus par un domaine B mais pas le contraire. - two-way Trust-Relationship : dans ce cas, c’est une relation symétrique qui permet à l’un ou l’autre des deux domaines, de reconnaître les utilisateurs de son homologue. Ajoutons à cela que, tout domaine contient par défaut deux utilisateurs et un groupe: Ecole Nationale des Sciences de l’Informatique de Tunisie 21 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA - Adm account: le compte de l'administrateur. C’est celui qui se charge de la création et maintenance des comptes utilisateurs et groupes du domaine en question, tout en se voyant accorder tous les privilèges (sur ce domaine). - guest: le compte de l’utilisateur externe qui n'a donc pas à s'identifier par un mot de passe. - Domain Users Group: le groupe qui contient tous les utilisateurs du domaine. Ce groupe est par ailleurs considéré comme le groupe par défaut ou groupe primaire de tout utilisateur du domaine. Cette nouvelle notion est requise pour l’interopérabilité avec les utilisateurs Macintosh ou toute application POSIX. 6.2 Organisation des ressources (Fichiers…) Bien qu’on puisse imaginer plusieurs modèles de présentation, d’organisation et de gestion des ressources (modèle plan : pas de répertoires, modèle hiérarchique : répertoires et sous répertoires, modèle graphe…), le modèle hiérarchique c’est très souvent imposé pour sa simplicité et sa souplesse à la fois. Ainsi, aussi bien Unix que Windows gèrent leurs ressources comme une arborescence dont les nœuds sont des conteneurs (répertoires, directory) - créés pour des besoins d’organisation - et les feuilles sont des fichiers encapsulant les informations réelles de l’utilisateur. De plus, la notion de lien symbolique a été introduite dans l’un et l’autre pour permettre une plus grande extensibilité et généralité. Cela rapproche évidemment le modèle hiérarchique du modèle graphe. 6.3 Modèles de sécurité Un utilisateur chez lui, muni d’un PC ne se pose même pas la question «c’est quoi un utilisateur ? » et «comment protéger mes documents confidentiels ? » puisqu’il connaît très bien les personnes éventuelles qui pourrait avoir accès à ses documents. Mais malheureusement, cela ne peut être aussi simple dans un réseau regroupant plus de 10 personnes, parfois même des milliers. La sécurisation des ressources a donc été traitée par plusieurs systèmes d’exploitations dont Unix et Windows NT. Par ailleurs, toutes les techniques citées dans la littérature et traitant de la sécurité et de la protection des ressources font une claire distinction entre la politique suivie (protéger quoi et de qui?) et les mécanismes (comment le système applique-t-il cette politique). On s’intéressera essentiellement au deuxième point. Mais, tout d’abord, présentons quelques types de sécurité. Ecole Nationale des Sciences de l’Informatique de Tunisie 22 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes 6.3.1 INRIA Types de sécurité On définit plusieurs types de sécurité : confidentialité : protéger l’information de peur qu’elle ne soit lue par une personne n’ayant pas été explicitement autorisée par le propriétaire. Cela inclut également les informations non importantes en soit mais qui peuvent servir à déchiffrer d’autres documents plus confidentiels. intégrité : ne pas permettre toute altération (modification et/ou destruction) de toute information tant qu’on n’en a pas le droit. disponibilité : toute information doit toujours être disponible à l’utilisateur qui a le droit d’en avoir usage. Il est souvent plus contraignant d’avoir des informations non accessibles que de ne pas en avoir du tout. consistance : veiller à ce que le système réagisse comme prévu, aussi bien pour les utilisateurs autorisés que pour les autres. isolation : régulation de l’accès au système. Il s’agit de rendre compte de qui quand et comment un accès frauduleux a pu avoir lieu. audit : se rendre compte des erreurs ou actes malsains commis par les utilisateurs. [6] 6.3.2 Mécanismes de protections Dans certains systèmes, la protection se fait grâce à un programme appelé reference monitor. A chaque fois qu’on tente d’accéder à une ressource potentielle protégée, c’est à ce moniteur que le système s’adresse pour vérifier la légitimité d’une telle opération. En fait, de façon abstraite, ce moniteur gère ce qu’on appelle des domaines de protections dont chacun est un ensemble de couples (objet, droit) ; chaque couple définissant un objet (une ressource) et un sous-ensemble d’opérations permises. Dans ce contexte, un objet (qui ne doit pas être interprété au sens de la programmation objet) peut être matériel (CPU, segment de mémoire, imprimante…) ou logiciel (processus, fichier, sémaphore…) alors que les droits représentent les permissions sur cet objet. Domaine1 Fichier 1 [R] Fichier 2[RW] Fichier 3[W] Domaine2 Fichier 3[R] Fichier 4[RWX] Fichier 5[RW] Domaine3 Imprimante[W] Fichier6[RWX] Imprimante 2[W] Fig 4 : Domaines de protections Ecole Nationale des Sciences de l’Informatique de Tunisie 23 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Il existe différentes approches pour gérer une telle notion. L’information pourrait par exemple être stockée sous forme de matrice dont les lignes sont les domaines et les colonnes sont les ressources. Domaine 1 2 3 Fichier1 R Fichier2 RW Fichier3 Fichier4 Fichier5 R RWX RW Fichier6 Imprimante1 Imp2 RWX W W W Matrice des permissions Mais, pratiquement, utiliser une telle matrice est coûteux en mémoire d’autant plus que la plupart de ses cases seront vides. On a alors pensé à découper la matrice en lignes ou en colonnes. Découpage en lignes : Capabilities ou C-List Dans un pareil cas, on associe à chaque processus (ou objet) la liste des objets qu’il peut accéder, tout en indiquant les permissions qui lui sont permises sur chacun d’eux. 0 1 2 3 Type Fichier Fichier Fichier Pointeur Droits Objets R Pointeur vers Fichier3 RWX Pointeur vers Fichier4 RW Pointeur vers Fichier5 W Pointeur vers l’imprimante C-List du domaine 2 Découpages en colonne : Access Control List ou ACL Dans ce second cas, on associe à chaque objet, et de façon ordonnée, une liste de tous les domaines qui peuvent l’accéder et les permissions qui leur sont accordées. Ainsi, en supposant qu’on a 4 utilisateurs Ali, Selim, Wassim et Razi, appartenant, respectivement, aux groupes system, staff, student et student, on pourrait alors imaginer une structure des ACL comme : - Fichier0 : (Ali,*,RWX) Fichier1 : (Ali,system,RWX) Fichier2 : (Ali,*,RW-),(Selim,staff,RW-),(Razi,*,RW-) Fichier3 : (*,student,R--) Fichier4 : (Wassim,*,---),(*,student,R--) Chaque entrée ACL est notée entre parenthèses en spécifiant, dans l’ordre, l’utilisateur, le groupe et les droits qui leurs sont accordés. Par exemple, pour Fichier4 on indique que l’utilisateur nommé Wassim n’a aucun droit, les autres utilisateurs du groupe student ayant le droit de lire ce fichier. Ecole Nationale des Sciences de l’Informatique de Tunisie 24 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Par ailleurs, il est intéressant de remarque qu’Unix et Windows NT ont opté pour ce type de protections alors que Java (les spécifications de la sécurité) gère des C-lists. 6.3.3 Les ACL Unix Pour des raisons de simplification, de performances et de stockage, l’implémentation des ACL dans Unix est sous forme de 9 bits au niveau du descripteur de chaque fichier : 3 pour le propriétaire, 3 pour le groupe et le reste pour tous les autres utilisateurs. Chaque 3 bits correspondent aux fameux RWX : R étant pour la lecture (Read), W pour l’écriture (Write) et X pour l’exécution. Ces mêmes bits sont également utilisés au niveau des répertoires pour donner les droits pour lister le contenu (R), changer ce contenu (W) et y accéder (X). R Propriétaire W X Groupe du propriétaire R W X R Tous les autres X X Bien que ce soit beaucoup plus restrictif que le concept général des ACL, on a souvent trouvé cela suffisant. 6.3.4 Les ACL Windows NT Windows NT, gère, pour chaque ressource, un descripteur : le Security Descriptor. Security Descriptor Owner (propriétaire) Primary Group (groupe primaire) Discretionary ACL (pour le propriétaire) ACE (Access Control Entry) ACE ACE System ACL (pour les autres) ACE ACE ACE Fig 5 : Structure du Security Descriptor (Win NT) Ce descripteur gère une ACL pour le propriétaire lui-même (qui voudrait par exemple s’interdire de détruire un fichier dans une fausse manœuvre) et une ACL pour les autres utilisateurs. Ecole Nationale des Sciences de l’Informatique de Tunisie 25 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Un utilisateur pourra avoir accès à la ressource si et seulement s’il vérifie les deux conditions : - l’utilisateur ou l’un des groupes auxquels il appartient à la permission de le faire par la System ACL. - ni l’utilisateur ni aucun des groupes auxquels il appartient n’ont interdiction de le faire par la System ACL. 6.3.5 Les C-lists Java La machine virtuelle Java utilise un objet nomme AccessController (équivalant au reference monitor) pour gérer la protection de l’accès à des ressources critiques (essentiellement les ressources systèmes comme les fichiers, ou les ports des Sockets…). Cet objet réalise la vérification à partir d’une suite de C-lists décrites le plus souvent dans un fichier du répertoire principal de l’utilisateur (HOME DIRECTORY). Ce fichier porte le nom par défaut de « .java.policy ». grant { Permission java.io.FilePermission(«*.dat », « read ») ; }; grant codeBase « http://www.ensi.edu.tn» signedBy « Ali»{ Permission java.net.SocketPermission («localHost :1024- », « listen») ; Permission java.io.FilePermission(«- », « read,write ») ; }; Fig 6 : Exemple de fichier .java.policy Chaque C-list est donnée par un «grant…{…} ; ». On y définit alors - le codeBase (« codeBase ») qui désigne la localisation (la machine ou le soussystème de fichiers) du code source (les fichiers.class) concerné par ces permissions. - le signataire («signedBy») qui est celui qui certifie l’authenticité de ce code. - et les permissions elles-mêmes («permission … ; »). Chaque permission est donnée par la classe Java correspondante et deux paramètres qui sont la cible (sur laquelle on définit les permissions) et les actions sur cette cible (ce qu’elle peut faire). Ainsi, la première C-list de la figure 6 correspond au premier « grant » qui accorde anonymement le droit à toutes les classes Java exécutées sur la machine locale de lire les fichiers d’extension « .dat » La seconde C-list, un peu plus riche, accorde à toute classe Java provenant de l’URL «http://www.ensi.edu.tn» et qui a été signée par «Ali» de lire et d’écrire sur toute l’arborescence du système de fichiers (ce qui est précisé par «-») et de pouvoir utiliser des Sockets en écoute du port 1024 de la machine locale. Ecole Nationale des Sciences de l’Informatique de Tunisie 26 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA En fait, l’AccessController construit à partir de ce fichier une liste de ces C-lists en regroupant, au niveau de chaque entrée, les permissions par classes Java. Au niveau de l’implémentation, une Permission prévoit une méthode dont la signature est : public boolean implies(Permission otherPermission) ; qui retourne un booléen VRAI lorsque cette permission implique celle passée en paramètre. De façon simplifiée, « la permission p1 implique la permission p2 » signifie que tout utilisateur qui se voit allouer p1 se voit par la même allouer p2, mais pas nécessairement le contraire. » Par exemple la permission FilePermission(« *.dat », « read ») implique FilePermission(« monfichier.dat », « read ») mais n’implique FilePermission(« monFichier.dat », «write»). bien pas C’est sur cette méthode que repose tout le mécanisme de la vérification des protections. En fait, lorsqu’un utilisateur U veut, par exemple, lire un fichier F, le système construit un objet permission Preq décrivant les permissions requises par cet utilisateur et le passe à AccessController qui vérifie alors si les permissions déclarées Pdec (éventuellement dans le fichier.java.policy) impliquent bien la première. L’opération se déroulera avec succès si et seulement si Pdec.implies(Preq)==VRAI. Dans le cas contraire une Exception Java sera générée. Dans la suite, nous abordons le problème de la distribution des ressources sur Internet. 6.4 Distribution sur Internet Quand on parle de distribution, on ne doit pas perdre de vue deux points essentiels : - d’abord, le système (au sens des serveurs à développer, Applets, pages HTML…) devra évoluer sur Internet. - ensuite, tout le développement doit se faire à un niveau très indépendant de la ou les plates-formes d’exécution (en Java). C’est la raison pour laquelle on ne peut pas compter sur NIS (les pages jaunes pour la distribution de la gestion des utilisateurs), NFS ou NTFS (pour la distribution des systèmes de fichiers) ou encore POSIX qui sont purement liés à leurs systèmes d’exploitation (Unix, Windows…). Inévitablement, le modèle Client/Serveur s’impose avec 6 techniques concurrentes : 6.4.1 Les Sockets Le bas niveau des Sockets leur confère, ipso facto, l’avantage de la performance. Ecole Nationale des Sciences de l’Informatique de Tunisie 27 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 6.4.2 HTTP/CGI Commun Gateway Interface - ou plus couramment CGI - est le modèle pris en charge par la quasi-totalité des serveurs WEB permettant de répondre au niveau du serveur à des requêtes introduites au niveau du client (dans des formulaires HTML par exemple). Ce sont en fait des programmes qui seront exécutés sur ce serveur, pour chaque nouvelle requête d’un client, qui peut être n’importe où sur le WEB. 6.4.3 Les Servlets Java Comme les CGI, Les Servlets Java permettent de répondre à des requêtes d’un client sur le WEB en générant dynamiquement les pages HTML (au niveau du serveur) qui prennent en considération les informations précisées par le client (éventuellement dans un formulaire). La seule différence consiste en le fait qu’une Servlet est un objet Java qui peut très bien coexister avec d’autres objets Java (éventuellement d’autres Servlets) au sein de la même machine virtuelle et donc du même processus, améliorant alors nettement les performances. 6.4.4 DCOM Distributed Component Object Model (DCOM) est la solution proposée par Microsoft pour gérer de façon distribuée des Objets. Ainsi, Windows NT utilise exclusivement DCOM pour gérer la distribution des informations sur le réseau et entre les applications (ActiveX est DCOM). 6.4.5 CORBA Commun Object Request Broker Architecture (CORBA) est sans doute, le projet middleware le plus important et le plus ambitieux permettant de faire interagir des objets issus de différents langages de programmation, indépendamment des outils utilisés et des systèmes d’exploitation et des réseaux. CORBA utilise en fait un langage déclaratif : IDL pour la spécification de chaque objet (indépendamment de son implémentation). Java propose une API incluse dans la version standard du SDK 1.2 pour le support de CORBA. 6.4.6 RMI Sun Micro Systems propose RMI (Remote Method Invocation) comme mécanisme purement Java pour distribuer des objets (Java) entre plusieurs machines virtuelles éventuellement distribuées physiquement sur un réseau. Dans son concept de base, RMI est plus proche du RPC (Remote Procedure Call) que de CORBA ou DCOM. La différence essentielle (qui n’est pas négligeable) est que l’appel distant des procédures (les méthodes de l’objet) ne se fait pas sur du code statique mais sur des instances d’objets. En fait, ces instances sont maintenues accessibles grâce à un mécanisme d’enregistrement sur un serveur d’enregistrement et de deux autres instances crées Ecole Nationale des Sciences de l’Informatique de Tunisie 28 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA automatiquement par ce serveur : l’une à l’emplacement même de l’objet distant qu’on veut accéder, notée SKELETON ; l’autre au niveau du client appelant et notée STUB. Il est à remarquer que le STUB possède toutes les méthodes de l’objet en question. Pour utiliser cet objet distant, celui ci doit au préalable être inscrit au serveur d’enregistrement sous un identificateur (nom) que le client doit connaître. Moyennant cet identificateur, le client récupère le STUB correspondant qu’il manipule exactement comme si c’était l’objet lui-même(car le STUB et l’objet ont les mêmes méthodes). Par ailleurs, le RMI standard ne gère pas la persistance des objets. Ce manque dégrade considérablement les performances et les capacités du serveur d’enregistrement qui ne peut pas gérer beaucoup d’objets à la fois car ils doivent tous être en mémoire. Pour combler ce manque, Java, dès le JDK 1.2, propose le RMI Activation. Son principe est d’enregistrer non plus les objets eux-mêmes, mais des objets beaucoup plus légers (des descripteurs) capables de charger la version persistante de l’objet correspondant lorsqu’un client demande explicitement l’utilisation de cet objet. 6.4.7 Comparaison entre les différentes techniques Le tableau qui suit récapitule succinctement un comparatif entre les techniques citées cidessus [7]: CORBA Aspect/technique **** Niveau d’abstraction **** Intégration de Java **** Indépendance du Sys. Exp. **** Implémentation 100% Java **** Support des paramètres typés *** Simplicité de configuration **** Invocation de méthodes distrib. **** Mémorisation des appels Support des métadata et **** découverte dynamique **** Appel dynamique Performance (remote pings) en ms ***(3,5) **** Sécurité réseau **** Transactions réseau **** Référence persistantes d’objets **** Nomenclature en URL Invocation d’objets par plusieurs **** langages de programmation Protocole réseau indépendant du **** Langage de programmation **** Standard ouvert DCOM RMI HTTP/CGI Servlet Sockets **** **** ** * **** *** *** *** **** **** **** **** **** *** *** *** ** ** **** ** * *** ** ** **** **** * *** * ** **** **** * *** ** ** *** ** **** ***(3,8) **** *** * ** * ***(3,3) *** (827,9) *** *(55,6) *** ****(2,1) *** **** ** **** **** *** Ecole Nationale des Sciences de l’Informatique de Tunisie * **** *** **** **** **** **** ** ** ** **** **** 29 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA On remarque, alors, que CORBA est bien celui qui est le moins spécifique et le plus complet. DCOM demeure également un concurrent redoutable mais il garde l’inconvénient d’être lié à Windows. Quant à RMI, il présente plusieurs avantages tant qu’on reste purement Java. Les CGI, de leurs coté, présentent un handicap très net au niveau des performances. Par contre, les Sockets sont très performantes mais trop bas niveau. Enfin, Les Servlets donnent des résultats convainquant mais restent liées au domaine particulier de répondre aux requêtes HTTP(tout comme les CGI d’ailleurs). Ecole Nationale des Sciences de l’Informatique de Tunisie 30 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 7 Spécifications 7.1 Modélisation du problème : La problématique citée au paragraphe 5 peut être modélisée par : Soit le système but à atteindre (ou solution). Soit l’ensemble ={ 1, 2 … n } des différents sites géographiquement distants et qui proposent de servir les ressources de . Chaque site i propose un ensemble de ressources i={ i1, i2,…. iri } (des bases de connaissances, des moteurs d’inférences….). On note = i l’ensemble de toutes les ressources. Soit l’ensemble ={1,… m }des utilisateurs de (éventuellement sur aucun des sites de ). Chaque utilisateur veut et / ou peut accéder à un sous ensemble des toutes les ressources pour réaliser un ensemble d’opérations parmi: - créer une nouvelle ressource (base de connaissances) visualiser (lire) une ressource modifier une ressource détruire une ressource appliquer des opérations plus complexes sur une ressource (exécuter un moteur d’inférence sur une base de connaissance de pilotage de programmes) Pour tout ij correspond au moins un utilisateur qui est son propriétaire ou plus généralement qui le supervise. L’ensemble des propriétaires p est un sous-ensemble de . 7.2 Spécification des besoins Compte tenu de cette modélisation, notre travail revient à : Concevoir un modèle de gestion des utilisateurs : Il s'agit de définir le contexte dans lequel un utilisateur réel peut utiliser le système. Pour cela, il est essentiel de préciser non seulement la façon dont il est perçu par ce système, mais aussi les étapes et les mécanismes requis pour que ce dernier puisse le reconnaître. Ecole Nationale des Sciences de l’Informatique de Tunisie 31 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Il va sans dire qu'il faut également préciser toute interaction de cet utilisateur avec les différents composants évoluant dans le système comme par exemples les autres utilisateurs et surtout les ressources (donc définir p). Concevoir un modèle de gestion des ressources : Nous devons, pour cela, proposer une architecture virtuelle permettant d'avoir accès à toute ressource de . Cette architecture devra prendre en considération deux points essentiels : - l'accès à toute ressource doit se faire de façon identique indépendamment de la localisation physique de cette ressource, en l’occurrence indépendamment du site i qui la sert. - l'ajout des ressources relatives à un nouveau site voulant s’intégrer au système doit être le plus simple possible. Ainsi, on ne tolère aucun arrêt ni aucun "redémarrage" du système sous prétexte qu'on désire intégrer un nouveau site ou retrancher un site déjà existant. Concevoir un modèle de Sécurité : Cela est d'autant plus essentiel car Internet n'est pas sécurisé. Nous devons alors proposer un modèle qui possède les caractéristiques suivantes : - efficacité : il doit permettre de sécuriser les ressources à un niveau de granularité le plus fin possible. Ainsi, il ne faut pas se contenter de définir des protections uniquement au niveau de la ressource comme entité mais, permettre par exemple de protéger des sous-parties de la ressources de façon indépendante les unes des autres. - flexibilité : il doit permettre de s'appliquer à toute ressource de n'importe quel type. - fiabilité : il doit être conforme à ses spécifications. - évolutivité et maintenabilié: il est essentiel de prévoir des mécanismes simples permettant de faire évoluer le système sans trop de changements. En se basant sur les trois modèles cités ci-dessus, développer le système qui permet à un utilisateur, à travers Internet d'accéder et de manipuler toutes les ressources abstraction faite du nombre et de la localisation physique des différents sites. Ecole Nationale des Sciences de l’Informatique de Tunisie 32 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Navigateur Ou autre application Gestion de la sécurité Gestion des ressources Site 1 Gestion des utilisateurs Site N Fig 5 : Architecture générale du système à développer 7.3 Contraintes logicielles/matérielles: 7.3.1 Langages et environnements de programmations: Tout le développement devra se faire en Java. Cela assure cohérence et portabilité. De plus c’est le langage parfaitement adapté à Internet. 7.3.2 Environnent de développement : Le développement se déroulera sous Solaris 2.5 muni de GNU xemacs (éditeur & environnement de programmation), Java (JDK 1.2.2) et Netscape 4.73. 7.3.3 Environnement d'exécution : Tous les programmes à développer s’exécuteront sur une machine (CARINAE) localisée à Sophia sous Solaris 2.5. Ecole Nationale des Sciences de l’Informatique de Tunisie 33 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 8 Conception Avec un langage purement objet, comme Java, la conception est, elle aussi, naturellement objet. A chacune des notions introduites correspond une interface (au sens Java) qui la matérialise et une ou plusieurs implémentations de ces interfaces. Au niveau de la conception c’est toujours des interfaces dont on parlera (indépendamment de l’implémentation). Ces interfaces seront précisées sous le format « (LeNomDeLInterface) » pour chaque notion nouvellement introduite. Dans les paragraphes suivants, je présenterai d’abord l’architecture générale de la solution proposée et préciserai la répartition des tâches entres les différents composants du système. Ensuite, j’aborderai plus en détail le modèle de gestion des utilisateurs et celui des ressources pour lesquels j’ai opté. Puis, je m’intéresserai à la façon d’identifier les objets du système, pour pouvoir les utiliser. Le paragraphe suivant traitera de la sécurité et du modèle de protection retenu, avant d’entamer le problème de la distribution des différents objets du système. Un avant dernier paragraphe fera le point sur la migration de ces objets. Finalement le modèle objet général sera explicité. 8.1 Architecture Générale L’architecture générale proposée est explicitée dans la figure suivante : Ecole Nationale des Sciences de l’Informatique de Tunisie 34 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes Navigateur (Pages HTML) INRIA Application Java Navigateur (Applets) Serveur HTTP Client sur Servlet Client sur Applet Client sur Application Maître Gestion des utilisateurs, gestion (empirique) des ressources Esclave 1 (sur le Site 1) Gestion des ressources locales Esclave 2 (sur le Site 2) Gestion des ressources locales Esclave N (sur le Site N) Gestion des ressources locales Une ressource R Protections informations Fig 7 : Architecture générale On peut alors remarquer que : 1. Cette architecture permet l’utilisation du système, via Internet, que l’on soit sur navigateur ou simplement à travers une application Java. Dans le cas d’un navigateur, il a été prévu aussi bien l’accès par utilisation d’Applets que celui par des pages HTML : la communication avec le système se fera alors, essentiellement, moyennant les Servlets Java. Ecole Nationale des Sciences de l’Informatique de Tunisie 35 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 2. Cette architecture est une architecture Multi-niveaux (3-4 niveaux) : On dégage 3 niveaux principaux correspondants aux trois composants de base de : Esclave, Maître et Client: - les Esclaves : Un Esclave est la partie du système responsable de gérer toutes les ressources servies par un des différents sites composants ce système. Il s’en suit alors qu’à chaque site i correspond un Esclave. Tous les Esclaves sont intimement liés à un seul Maître. - le Maître : Celui-ci est sans doute le composant le plus important du système car il propose une vue globale de toutes les ressources (de tous les Esclaves) réunies. Il a également pour mission de gérer les utilisateurs. En ce sens, Toute requête pour une utilisation d’un quelconque objet du système (ressources ou utilisateurs) doit essentiellement passer par le Maître qui se charge toujours de retrouver l’information et de répondre à la requête. De plus, le choix de charger le Maître de la gestion de tous les utilisateurs et non pas, par exemple, de définir au niveau de chaque Esclave un ensemble d’utilisateurs, découle du fait qu’un utilisateur est susceptible d’avoir accès à toute ressource du système et par suite c’est une notion totalement indépendante de la localisation des ressources. - le Client : C’est le système vu localement par un utilisateur distant. Ce niveau d’abstraction a été ajouté pour que l’utilisateur agisse identiquement sur une application ou sur un navigateur sans tenir compte du fait que les objets (ressources) qu’il va utiliser sont distants. Les fonctions principales de ce composant reviennent donc à : - se charger de la communication avec le Maître rendant transparente l’utilisation des objets distants. - masquer les particularités de l’environnement de l’utilisateur. Il est à remarquer qu’un Client n’a même pas à connaître l’existence des Esclaves : il ne communique qu’avec le Maître. 3. Pour une utilisation du système à partir de simples pages HTML, un quatrième niveau est rajouté : celui des Servlets sur le Serveur HTTP. En fait, partant d’une requête (grâce à un formulaire HTML par exemple), les Servlets – au niveau de ce serveur – utilisent un Client pour communiquer avec le système et répondre à la requête en générant, dynamiquement, la page HTML résultat. 4. Les protections (sécurité) se font au niveau de la ressource de façon décentralisée. Ecole Nationale des Sciences de l’Informatique de Tunisie 36 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 8.2 Gestion des utilisateurs Un système distribué étant inévitablement plus complexe à administrer pour des raisons géographiques (le système est géographiquement distribué), de compétences (nécessitant plusieurs compétences à la fois), de sécurité (il est plus sûr de partager les privilèges), le choix de concevoir un modèle hiérarchique pour la gestion des utilisateurs m’a semblé le plus adapté. Ainsi, toute administration peut à tout moment être subdivisées entre plusieurs administrateurs à chacun sera affectée la sous tâche de gérer une sous arborescence de la hiérarchie. Pour cela, le système gère des domaines (DdomainInterface) dont chacun peut très bien se subdiviser en sous-domaines (d’où la notion de hiérarchie). Chacun de ces domaines regroupe, outre ses sous-domaines, un ensemble d’utilisateurs (DuserInterface) et un ensemble de groupes (DgroupInterface) d’utilisateurs (non forcément de ce domaine). 8.2.1 Les Domaines La notion de domaine permet, entre autre, de diminuer la charge d’un administrateur en limitant son champ d’action. En effet, parmi les utilisateurs directs d’un domaine (c’est à dire n’appartenant pas à ses sous-domaines), on définit un utilisateur particulier appelé superviseur qui aura pour tâche de l’administrer et par conséquent bénéficiera de tous les droits sur ce domaine et seulement ce domaine (ces sous-domaines inclus). En particulier, le superviseur est responsable de l’ouverture et de la fermeture de comptes clients c’est à dire de l’ajout ou du retrait d’utilisateurs à ce domaine. Il est également responsable de la création et de la destruction des groupes du domaine et surtout de celles des sous-domaines éventuels et de l’attribution de leurs superviseurs. De ce même fait, un domaine contient zéro ou plusieurs sous-domaines mais encore, un ou plusieurs utilisateurs (dont le superviseur) et zéro ou plusieurs groupes. Domaine Utilisateurs dont le superviseur Groupes d’utilisateurs Sous domaines Sous Domaine Groupes d’utilisateurs Utilisateurs dont le superviseur Sous domaines Sous Domaine Groupes d’utilisateurs Utilisateurs dont le superviseur Sous domaines Fig 8 : structure et hiérarchie des domaines Ecole Nationale des Sciences de l’Informatique de Tunisie 37 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 8.2.2 Les utilisateurs Pour des besoins d’authentification, à chaque utilisateur réel on associe un compte utilisateur (théoriquement, on peut associer plus d’un compte utilisateur à un seul utilisateur physique mais on remarquera que grâce à la notion de groupes in n’en aura nullement besoin). On parlera dans toute la suite d’« utilisateur » pour signifier le compte utilisateur relatif à un utilisateur physique. Un utilisateur est propre à un et un seul domaine. Il est alors défini non seulement par son nom (login) et son mot de passe, mais aussi par le domaine auquel il appartient. Ainsi l’existence même de l’utilisateur se fonde sur l’existence du domaine correspondant. Conceptuellement, un utilisateur n’existe plus dès que son domaine parent est supprimé par l’administrateur. Mais pour des raisons de convenances, cet utilisateur migrera vers le domaine parent de l’un de ses autres groupes (tant qu’il est inscrit à un groupe) lors de la destruction de son domaine parent. Il faut tout de même préciser qu’au niveau du système c’est d’un nouvel utilisateur qu’il s’agit (il est forcement différent de l’ancien vu qu’ils n’appartiennent nécessairement pas au même domaine). 8.2.3 Les groupes La notion de groupe a été introduite principalement pour répondre à deux besoins : D’une part, appliquer les mécanismes de protection des ressources sur tout un ensemble d’utilisateurs à la fois suivant un certain critère qui ne dépend forcément pas de l’appartenance physique à un des domaines existants. C’est le cas, par exemple, si on veut protéger momentanément une ressource en inhibant sa modification de la part des utilisateurs qui y ont toujours eu droit. D’autre part, trouver un mécanisme pour l’interaction entres les différents domaines (un peu comme les one-way Trust-Relationship et two-way Trust-Relationship de Windows NT). Dans ce contexte, un groupe est présenté comme étant un ensemble d’utilisateurs de tout le système (et pas seulement ceux du domaine parent à ce groupe) définissant un profil de sécurité pour certaines ressources du domaine (i.e. des utilisateurs du domaine). Ainsi, un domaine est un groupement d’ordre logique sur les utilisateurs alors qu’un groupe est un groupement d’ordre logique sur les droits des utilisateurs. Exemples : le domaine ProgramSupervison est un domaine qui regroupe tous les utilisateurs qui s’intéressent au pilotage de programme. les domaines FranceDomain et TunisaDomain sont deux domaines qui regroupent chacun les utilisateurs du pays en question. Ecole Nationale des Sciences de l’Informatique de Tunisie 38 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA par contre, le groupe ProgramSupervison.readers est le groupe de tous les utilisateurs (qui n’appartiennent pas forcement à ProgramSupervison) qui ont le droit de lire les ressources relatives au domaine ProgramSupervison (donc relatives aux utilisateurs de ce domaine). et le groupe FranceDomain.previlegiedUsers est le groupe de tous les utilisateurs (qui n’appartiennent pas forcement à FranceDomain) qui sont privilégiés au niveau du domaine FranceDomain et peuvent alors avoir accès à des ressources non publiques. Notons enfin, que pour donner encore plus de souplesse au niveau de l’administration, le superviseur du domaine parent à un groupe peut déléguer la tâche d’inscrire ou de retirer les utilisateurs de ce groupe à l’un des autres utilisateurs directs du même domaine membre (nécessairement) du groupe. Cet utilisateur sera baptisé le superviseur du groupe. 8.2.4 Les domaines, utilisateurs et groupes spéciaux Le système comprend également quelques domaines, utilisateurs et groupes spéciaux pour permettre une utilisation plus souple. Ainsi, la notion de super utilisateur a été introduite pour caractériser un utilisateur qui aura tous les droits sur tout et qui sera le dernier recours pour les tâches délicates où nécessitant plusieurs qualités (permissions) à la fois. Et pour rester cohérent, cet utilisateur appartient à un domaine spécial appelé super domaine qui englobe tous les autres domaines. ainsi, le fait que le super utilisateur ait tous les droits devient légitime (grâce à la récursion au sein du graphe des domaines). Par ailleurs, le super domaine contient également un autre utilisateur et deux groupes qui sont : l’invité (guest): c’est l’utilisateur par défaut . Il est équivalent au ANONYMOUS du FTP. Son mot de passe est anonymous. Il n’a aucun droit sur aucune ressource sauf si explicitement précisé par le propriétaire de la ressource. Il faut donc être très vigilant en attribuant un quelconque privilège à cet utilisateur. Pour des raisons de sécurité, les privilèges donnés au guest ne sont pas cumulés avec les privilèges attribués à un autre utilisateur. Ainsi, si un droit X est donné à l’invité, ce droit n’est pas attribué ipso facto à tous les utilisateurs. Le super groupe: c’est le groupe de tous les superviseurs des domaines du système. Il a été créé pour des besoins de simplification de l’administration. Le groupe par défaut (nogroup): c’est le groupe de tous les utilisateurs inscrit aux systèmes, l’invité n’en faisant pas partie. Il a également été créé pour des besoins de simplification de l’administration. Ecole Nationale des Sciences de l’Informatique de Tunisie 39 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA La structure globale du système de gestion des utilisateurs devient donc la suivante : superdomain Groupes dont supergroup & nogroup Utilisateurs dont superuser & guest Sous domaines Sous Domaine Utilisateurs dont le superviseur Groupes d’utilisateurs Sous Domaine Utilisateurs dont le superviseur Groupes d’utilisateurs Sous domaines Sous domaines Fig 9 : modèle de gestion des utilisateurs 8.2.5 Comparaison avec le modèle d’Unix Le modèle qu’on propose est une généralisation du modèle d’Unix : chaque domaine est pratiquement un système de gestion d’utilisateurs Unix en gardant la notion de superviseur (root) et de groupes. A noter également que, comme les versions ultérieures à V5R4, il est possible à un utilisateur d’appartenir à zéro ou plusieurs groupes à la fois. En outre, grâce à la notion de hiérarchie des domaines, de nouvelles fonctionnalités sont possibles, comme par exemple créer des groupes contenant des utilisateurs hétérogènes (de plusieurs domaines) . Cela permet également de ne plus avoir à définir un utilisateur plus d’une fois ni avoir à ajouter une couche supplémentaire (comme NIS par exemple) pour faire interagir plusieurs systèmes et gérer de façon centralisée les comptes utilisateurs. Ecole Nationale des Sciences de l’Informatique de Tunisie 40 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 8.2.6 Comparaison avec le modèle de Windows NT Ce modèle est également une généralisation du modèle présenté par Windows NT en gardant (avec quelques modifications) les notions de domaines, d’utilisateurs et de groupes. De plus, et puisque qu’ici un groupe définit un profil de sécurité qui peut correspondre à n’importe quel utilisateur de n’importe quel domaine et donc peut regrouper des utilisateurs de tout domaine, l’interaction entre domaines est encore plus amplifiée tout en permettant de réaliser plus souplement des one-way Trust-Relationship ou two-way Trust-Relationship. 8.3 Organisation des ressources Comme la plupart des systèmes de fichiers qui sont cités dans la littérature sont hiérarchiques, et comme le modèle hiérarchique nous permet de rester cohérent avec le modèle de gestion des utilisateurs cité ci-dessus, et vu la simplicité et la souplesse qu’apporte ce modèle, on a encore une fois opté pour un modèle hiérarchique pour l’organisation des ressources. Mais, étant dans un environnement purement objet, il faut quand même définir ce qu’est une ressource et quels sont les différents types de ressources. Nous définirons une ressource comme étant tout objet (en tant qu’entité informationnelle) susceptible d’être requis par un utilisateur du système . A la limite, tout objet du système (i.e. que le système peut gérer de façon distribuée) même un utilisateur, domaine, ou groupe est considéré comme ressource. Ce choix confère une grande évolutivité. Notons que la définition d’une ressource comme étant toute information persistante n’a pas été retenue car, par essence, toutes les informations (objets) gérées par sont persistantes. Donc une ressource peut très bien être un ensemble de fichiers physiques (un seul éventuellement) que l’utilisateur manipule de façon totalement transparente (sans avoir à connaître l’existence même de ces fichiers). Une ressource peut également être un conteneur qu’on appelle aussi un répertoire. Ce qui correspond au nœud de l’arbre hiérarchique du système des ressources. 8.4 Localisation, identification des objets Un même modèle, aussi bien pour les utilisateurs, domaines et groupes que pour n’importe quelle autre ressource, a été choisi pour identifier un objet de . Cet identificateur, appelé DobjectLocator, abstraction faite de son implémentation, peut être considéré comme une chaîne de caractères caractérisant, de contenant à contenu, le chemin complet (dans l'arbre hiérarchique de tous les objets) de l'objet en question. Ecole Nationale des Sciences de l’Informatique de Tunisie 41 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Ainsi, l’identificateur de l'utilisateur Ali du domaine Sousse qui est un sous-domaine direct de superdomain est « superdomain.Sousse.Ali » et l’identificateur du fichier monFichier du répertoire monRep sur l’Esclave nomme slave1 (dont le répertoire principal est par convention nommé slave1 aussi) est « root.slave1.monRep.Ali » De façon plus pragmatique, le DobjectLocator de tous les utilisateurs, domaines et groupes commence par superdomain, alors que pour toutes les autres ressources, il commence par root suivi du nom du serveur Esclave qui les héberge. De plus, pour gérer les conflits (un groupe et un domaine ayant même nom par exemple), au niveau de chaque élément de la liste donnée par cet identificateur (un élément est limité par les points), des propriétés peuvent être rajoutées entres parenthèses comme le montrent les exemples ci-dessous : - superdomain.(group)orion superdomain.(domain)orion En effet l’identificateur superdomain.orion est dans ce cas ambigu, on doit alors spécifier une propriété permettant de discriminer l‘objet dont on parle. Pour cela, nous avons juste spécifié le type qui pour l’un est group et pour l’autre est domain. Les objets peuvent en fait être indexés sur plusieurs propriétés qui devront être au niveau de cet identificateur ; ce qui permettra au système d’optimiser les accès disques et de savoir - n'ayant en main que cet identificateur - si cet objet est bien celui qu'on cherche ou pas. Ces propriétés ne sont utilisées qu'en cas de conflit et doivent figurer comme suit : (property1Key1=property1Value1, property1Key2=property1Value2, ...)name1. (property2Key1=property2Value1, …)name2… Ex : superdomain.(domain)myDomain.([email protected], type=user)Ali Dans cet exemple, on indexe l'utilisateur Ali suivant son adresse électronique. Noter que "user" n'est pas sous la forme propertyKey1=propertyValue1, en fait, pour des raisons de simplifications d’écriture, on peut mentionner - exceptionnellement - le type directement. Cela est équivalent à type=user. Ecole Nationale des Sciences de l’Informatique de Tunisie 42 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 8.5 Modèle de sécurité Le modèle de sécurité qui à été retenu pour le système se base essentiellement sur : 8.5.1 L’authentification Le cycle d’authentification pour l’utilisation de se compose de 5 étapes: 1- Inscription (sign up) : toute personne voulant utiliser le système (c’est à dire un ou plusieurs objets du système) doit être déclarée comme utilisateur défini par son domaine, son nom, et son mot de passe. Pour cela, elle doit contacter le superviseur du domaine qui correspond à son intérêt (par exemple Pilotage de programme, traitement d’image…) et lui donner toutes les informations nécessaires à l’ouverture de son compte. 2- Ouverture d’une session : pour chaque utilisation du système, l’utilisateur doit ouvrir une session. Elle se fait en s’identifiant par son domaine, son nom et son mot de passe. Après avoir été reconnu par ce système, il se verra alors attribuer un objet temporaire valable uniquement durant cette session. Cet objet, noté Dconnection, lui permettra de bénéficier des privilèges qui lui ont été accordés en encapsulant toutes les informations nécessaires pour valider ou inhiber tout accès à toute ressource comme par exemple l’heure exacte de l’ouverture de la session, l’adresse IP à partir de laquelle le client s’est connecté au système…etc. 3- Utilisation du système : il s’agit de la manipulation des objets distribués du système. Cela se fait toujours moyennant l’objet Dconnection obtenu pendant l’ouverture de la cession. 4- Fermeture de la session : il s’agit de libérer l’objet Dconnection pour qu’il ne soit plus utilisé par d’autres personnes. 5- Désinscription (sign out) : rejeter l’inscription de cet utilisateur du système : il n’aura plus le droit de se connecter. inscription Ouverture d’une session Utilisation du système Fermeture de la session désinscription Fig 10 : les 5 étapes d’authentification Ecole Nationale des Sciences de l’Informatique de Tunisie 43 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes 8.5.2 Contrôle ressources de l’accès et de la manipulation INRIA des Le modèle proposé ressemble plus ou moins à celui fourni par la machine virtuelle Java. Néanmoins, c’est le modèle des ACL qui a été retenu. En effet, chaque objet du système gère une liste (ACL) de permissions accordées par un signataire à une cible. De plus, il n’y a pas de contrôleur de permission (AccessController) qui gère de façon centralisée la manipulation des ressources. Cette gestion décentralisée permet surtout d’augmenter les performances et l’évolution du système. Effectivement, dans un pareil cas, seules les permissions propres aux objets en cours d’utilisation sont en mémoire. De plus chaque objet peut définir des permissions qui lui sont propres et les gérer à sa manière (éventuellement avec des optimisations). Par ailleurs, un autre point de divergence avec le modèle de sécurité de Java consiste en le fait que, désormais, toutes les opérations élémentaires sont critiques. Donc, les permissions sont vérifiées pour toutes les actions sans exception. Ce choix a été retenu en considérant que, dans un environnement distribué, il nécessaire de sécuriser toutes les actions à un niveau de granularité le plus fin possible. Quant aux mécanismes de vérification des permissions, ils restent - à un certain niveau – identique à ceux déployés par Java VM : il s’agit de valider les permissions requises par l’utilisateur pour chaque opération critique. Pour cela on vérifie si ces permissions sont bien impliquées par celles qui leur ont été accordées (cf. 6.3.5). Ainsi, l’opération de modification d’un fichier requiert les permissions read et write. Cette opération est donc réalisable si et seulement si l’ACL le permet, par exemple dans le cas où le superviseur donnerait le droit à cette personne sur ce fichier en lecture (read), et que son propriétaire lui accorde le droit write. Dans la suite, la structure des permissions est abordée plus profondément. 8.5.3 La structure d’une permission: Une permission peut être représentée par un triplet (signataire, cible, contraintes): - Signataire: c’est celui qui a donné la permission : il peut être aussi bien l’objet lui-même (si l’objet est un utilisateur), tout superviseur de cet utilisateur, le propriétaire de l’objet (si c’est une ressource comme fichier...) ou tout superviseur de ce propriétaire. - Cible: c’est l’utilisateur, le groupe ou le domaine à qui on veut spécifier les droits. - Contraintes: c’est les permissions proprement dites, c’est-à-dire les droits qu’on donne ou qu’on retire à la cible. Toutefois, il est très important de signaler qu’une permission n’est pas ce qu’on donne comme droit à un utilisateur, mais ce qu’on veut lui donner comme droit. Ecole Nationale des Sciences de l’Informatique de Tunisie 44 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Ainsi, si l’utilisateur Wassim donne à l’utilisateur Ali les droits read et write sur un fichier et que Wassim n’a que le droit read sur ce fichier, Ali n’aura que le droit de lire le fichier. En fait, une façon de résoudre ce problème est d’interdire déjà à Wassim de donner les droits read et write lors de la création de ces permissions. Mais, imaginons le scénario suivant : si, un autre utilisateur Selim, avait donné les droits en lecture et en écriture sur ce même fichier à Wassim. Ce dernier, ayant le droit de le faire, a fait alors passer ces mêmes doits à Ali. Imaginons ensuite que Selim décide de retirer à Wassim le privilège d’écriture toujours sur ce même fichier. On aboutit alors à une incohérence puisque Ali possède toujours la permission d’écriture. La solution qui a été adoptée pour pallier un pareil problème est de vérifier, récursivement, toutes les permissions et de ne permettre une action que si cette action a été accordée par un utilisateur qui possède bien ce privilège. Dans ce qui suit, je vais aborder comment définir le signataire, la cible et les contraintes : les 3 entités définissant une permission. 8.5.4 Le signataire C’est ce qui est le plus facile à faire car, par essence, le mécanisme d’authentification permet d’identifier les utilisateurs voulant signer une permission grâce au Dconnection : le client n’a rien à préciser de particulier. 8.5.5 La cible Afin de rester cohérent avec ce qui a déjà été précisé au niveau de l’identification des objets distribués, ce même identifiant (DobjectLocator) sera utilisé pour définir le ou les utilisateurs cibles. Ainsi, pour définir de nouvelles permissions pour l’utilisateur Ali du domaine superdomain.inria, il suffit d’introduire la chaîne de caractères ‘superdomain.inria.Ali’ au niveau de la cible. De plus, quelques caractères spéciaux permettent de définir des cibles génériques (un peu comme les * du shell Unix ou Dos). Ces caractères sont : * (étoile) : pour remplacer 0 ou plusieurs caractères partout où un label est requit (nom de domaine, type, propriété…) exemples : superdomain.(group)*grp tous les groupes du domaine superdomain dont le nom se termine par grp. superdomain.(profession =*student*, user)* tous les utilisateurs du domaine superdomain dont la profession contient student Ecole Nationale des Sciences de l’Informatique de Tunisie 45 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA ? (point d’interrogation) : pour remplacer exactement un caractère exemple : superdomain.(group)??? tous les groupes du domaine superdomain dont le nom a une longueur de 3 caractères. - (tiret) : pour remplacer 0 ou plusieurs parties du chemin (plusieurs noms de domaines ou de répertoires…) exemples : -.(group)*grp tous les groupes dont le nom se termine par grp. superdomain.inria.-.(user)* tous les utilisateurs de la sous arborescence superdomain.inria dont par exemple superdomain.inria.Ali et superdomain.inria.orion.selim mais pas superdomain.wassim. Bien évidemment, on peut les combiner ensemble pour générer des cibles du genre superdomain.*.-.(profession=student,user)???* tous les utilisateurs dont le nom est d’au moins 3 caractères et dont la profession est student et qui appartiennent à un domaine du deuxième niveau de hiérarchie au moins. dont par exemple : superdomain.inria.(profession=student)Ali et superdoamin.inria.orion.(profession=student)Ali mais pas superdomain.(profession=student,Ali) Par ailleurs, pour éliminer toute ambiguïté, au niveau d’une ACL d’un même objet, on ne permet pas l’introduction de plus d’une permission ayant les mêmes signataire et cible. C’est à dire que l’utilisateur Wassim ne peut pas donner deux permissions différentes à la même cible Ali. Par contre, il peut très bien entrer plusieurs permissions du genre : Signer= superdomain.Wassim, target=superdomain.inria.Ali, constraints= write Signer= superdomain.Wassim, target=superdomain.iniria.*, constraints=read Signer=superdomain.Wassim, target=superdomain.inria.(group)orion, constraints= write,read Signer= superdomain.Wassim, target=superdomain.inria, constraints= write Dans un pareil cas, Ali correspond bien aux quatre cibles des quatre permissions mais seule la première sera prise en compte car, lorsqu’il y a un conflit entre permissions et qu’un utilisateur dont on veut connaître les droits (éventuellement pour lui permettre ou pas une opération) correspond à la cible de plus d’une permission, seule une unique permission parmi celles en conflit reste en vigueur : la plus spécifique. Ecole Nationale des Sciences de l’Informatique de Tunisie 46 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Une permission P1 est plus spécifique qu’une permission P2 lorsque la cible C1 de P1 est plus spécifique que la cible C2 de P2. Une cible C1 est dite plus spécifique qu’une autre C2 si elle est plus faible suivant l’ordre (USER, GROUP, DOMAIN), puis suivant l’ordre d’implication c’est-à-dire C2 implique C1. Donc si deux cibles C1 et C2 sont en conflit et si, par exemple, l’une d’elles est un utilisateur (ex. C1: superdomain.inria.(user)Ali) et que l’autre est un groupe (ex. C2 : superdomain.inria.(group)groupeDeAli) alors c’est C1 qui est la plus spécifique. Si par contre C2 est aussi du type USER (ex. C2 : superdomain.inria.(user)*) dans ce cas la plus spécifique est celle qui est impliquée par l’autre (dans l’exemple superdomain.inria.(user)* superdomain.inria.(user)Ali donc c’est toujours C1 la plus spécifique). Cette règle permet (entre autres) de résoudre le problème explicité par l’exemple suivant : on veut donner les permissions en lecture et écriture à tout le groupe Orion sauf à Ali à qui on ne donne que le droit en lecture. Cela est d’autant plus souple à utiliser lorsqu’il est question d’attribution momentanée de permissions. En effet, si on veut momentanément retirer les droits donnés à un utilisateur il suffit alors d’ajouter une entrée qui spécifie qu’il n’a plus ce droit. Cette période dépassée, pour réattribuer les mêmes droits à cette personne, il suffit de supprimer la permission dernièrement introduite. 8.5.6 Les contraintes Le troisième champ du vecteur des permissions constitue les permissions proprement dites (les droits) que le signataire attribue à la cible. De ce même fait, cela rend cette entité très importante à plusieurs niveaux : - au niveau de l’utilisateur final : il faut que ce soit simple à utiliser mais puissant et maniable. - au niveau du programmeur, cette entité doit être flexible. En terme de programmation Java, la classe qui spécifie ces contraintes doit être simple mais évolutive. Au niveau de l’utilisateur final Comme le DobjectLocator, une contrainte peut être considérée (abstraction faite de son implémentation) comme une chaîne de caractères. Cette chaîne peut aussi bien être simplement une énumération des droits comme : read, write Ecole Nationale des Sciences de l’Informatique de Tunisie 47 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA ou plus élaborée avec les opérateurs or et and et les fonctions prédéfinies comme property, method, content, DateIntervalle…etc. Ex: or(and(property(firstName),read),and(method(add),exec,DateIntervalle(12/05/2000,13/05/2000)) Ce qui veut dire (en supposant que l’objet contenant cette permission est un répertoire) qu’on accorde à la cible les droits en lecture seulement et à n’importe quel moment pour la propriété (property) firstName Par contre, on lui donne le droit d’ajouter des entrées (fichiers ou sous-répertoires) mais uniquement entre les dates 12/05/2000 et 13/05/2000. La liste complète des fonctions - que j’ai implémenté - est la suivante : always : accorder TOUS les droits never : retirer tous les droits not(a,b,c…) : retirer les droits a,b,c … or(a,b,c,…) ou a,b,c… ou (a,b,c…) : l’union des droits a,b,c… and(a,b,c…) : l’intersection des droits a,b,c… first(a,b,c…) : les droits a,b,c… sont vérifiés dans l’ordre, le premier droit qui accorde explicitement ou qui rejette explicitement la requête du client est considéré comme le résultat final. property(propertyName) : spécifie que l’on est en train de définir les contraintes relatives à la propriété propertyName. Elle est souvent utilisée conjointement avec and(…). Les droits qui vont alors avec sont read, write et see. method(methodName) : spécifie que l’on est en train de définir les contraintes relatives à la méthode methodName de l’objet en question. Elle est souvent utilisée conjointement avec and(…). les droits qui vont alors avec sont exec. Son utilisation n’est pas courante mais elle peut servir pour spécifier une permission d’un niveau de granularité très pointu : la méthode. Pour cela il est essentiel de connaître le nom (et éventuellement les paramètres) de la méthode en question. content(contentName) : spécifie qu’on est en train de définir les contraintes relatives à l’accès du contenu contentName de cet objet. Dans le cas d’un répertoire d’un domaine ou d’un groupe, cela permet de préciser si telle ou telle personne peu savoir que contentName appartient bien à ce conteneur. Elle est souvent utilise conjointement avec and(…). les droits qui vont alors avec sont see. dateIntervalle(date1,date2) : spécifie que ces droits ne sont valables qu’entre les dates date1 et date2. Une étoile (*) voudrait dire que la limite n’est pas spécifiée (ex : dateIntervalle(*,1/1/2000)). Du point de vue du développeur (pour la maintenance et l’évolutivité) Ecole Nationale des Sciences de l’Informatique de Tunisie 48 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Au niveau du programmeur, une contrainte est spécifiée par l’une des deux interfaces Deductive ou ReverseDeductive. La première définit une unique méthode : int implies(Deductive other) pendant que ReverseDeductive définit deux méthodes dont la première est héritée de Deductive int implies(Deductive other) int impliedBy(Deductive other) D’où l’aspect simple et évolutif des contraintes : à tout moment on peut ajouter un nouveau genre de contraintes rien qu’en implémentant l’une ou l’autre de ces interfaces ce qui n’est pas coûteux du moment qu’il n’y a - au pire des cas - que deux méthodes à définir. Par ailleurs, il est très important de remarquer que ces deux méthodes sont différentes de celles proposées par le modèle de sécurité Java : la variable résultat étant du type int et non plus boolean. En fait, ce résultat entier a la valeur de l’une des constantes : - YES pour dire que « oui cette contrainte implique bien la contrainte other ». - NO pour dire que « cette contrainte n’implique pas other » . - et NO_MATCH pour dire que les deux objets ne sont pas comparables et donc on ne peut pas trancher. Cela se produit par exemple lorsqu’on veut savoir si la contrainte dateIntervalle(…) implique une contrainte comme property(…). Donc essentiellement si other n’est pas du même type que ces contraintes. Cela ne doit pas être interprété en « Classes d’Objets » car deux contraintes de classes Java différentes peuvent rester comparables. Ainsi, on peut savoir si une collection de plusieurs contraintes (and(…) ou or(…)) implique une contrainte simple (property(…) par exemple). En réalité, l’inconvénient majeur avec le modèle proposé par Java est que nous ne pouvons pas réaliser l’union ou l’intersection de différentes permissions : les permissions sont automatiquement regroupées suivant leurs classes : l’implication se fait entre classes identiques. Ecole Nationale des Sciences de l’Informatique de Tunisie 49 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Par contre, ici, nous pouvons définir notre propre collection des contraintes. Chose qui a été faite à trois reprises : pour la fonction or (Collection_OR), la fonction and (Collection_AND) et la fonction first (Collection_FIRST). Le principe de la vérification des droits d’accès est le suivant : toutes les méthodes des objets gérés par le système ont (par convention) comme premier paramètre l’identificateur Dconnection de l’utilisateur désirant effectuer l’opération. Par exemple la signature de la méthode permettant de lister le contenu d’un répertoire est : public Collection list(Dconnection caller, DobjectFilter filter, boolean recurse) ; où le premier paramètre (caller) désigne l’utilisateur qui a appelé la méthode. Chaque objet, peut alors effectuer le test sur la légitimité de cette action en créant – compte tenu de ‘caller’ – un objet contrainte (implémentant Deductive ou ReverseDeductive) qui décrit l’intention de cet utilisateur, puis essayer de démontrer cette contrainte à partir de celles des permissions qui ont été accordées par le propriétaire de la ressource ou un de ses administrateurs. Le fonctionnement des deux interfaces, citées ci-dessus, permet de réaliser cette démonstration par un chaînage avant (Deductive) et/ou un chaînage arrière (ReverseDeductive). Pour mieux saisir l’importance du chaînage arrière, prenons l’exemple de deux contraintes X et Y. Supposons que Y est une collection (union, intersection ou toute autre) d’autres contraintes y1,y2,… yn. Cherchons à démontrer que XY autrement écrit X.implies(Y)=? Comme X ne sait pas que Y est une collection, on ne peut donc pas démonter dans le sens direct. Par contre, Y sait très bien qu’il en est une, il prend alors l’initiative de démontrer dans l’autre sens, c’est à dire que pour chacun de ses yi, yi X autrement écrit yi.impliedBy(X)= ? Ecole Nationale des Sciences de l’Informatique de Tunisie 50 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 8.6 Distribution des objets Au niveau de la distribution des objets, j’ai préféré la technologie RMI standard aux technologies RMI activation et CORBA pour les raisons qui suivent : - RMI est purement Java (à l’inverse de CORBA): rester dans un environnement 100% Java facilite la phase de tests et de debuggage du système et augmente la lisibilité et la compréhensibilité du code. Ajoutons à cela que CORBA est à un niveau d’abstraction tellement élevé qu’il requiert un effort non négligeable rien que pour comprendre les mécanismes de base avant même de penser à utiliser son implémentation sous Java. - RMI standard est beaucoup plus simple, et moins spécifique que RMI activation qui, en dépit du fait qu’il offre la persistance des objets Remote (distant) et leur exportation sur demande, reste quand même très complexe à utiliser (introduction de 14 nouvelles classes) sans résoudre parfaitement le problème crucial de la gestion de la mémoire. En effet, la technologie Activation propose d’exporter des objets de faible taille (des descripteurs) au lieu des objets eux-mêmes. Cela peut être très avantageux lorsque, les objets sont de taille considérables par rapport à leur descripteurs. Néanmoins, dans le cas contraire, son utilisation n’est pas justifiée. En outre, pour ce qui est de la communication avec les pages HTML d’un navigateur du coté d’un client, les Servlets Java sont les favoris, par soucis de cohérence (solution 100% Java) et en raison de leur performances. Pour ce qui est de la communication entre les différentes entités (Maître, Esclave, Client sur Applet ou Application), la solution proposée se base purement sur du RMI standard pour réellement exporter et désexporter un objet sur demande. Mieux encore, au niveau de l’utilisateur, il n’a même pas besoin de le savoir : le sous-système Client se charge de retrouver cet objet et de lui en donner directement une référence. En fait, tout ce que permet le RMI c’est de récupérer sur le Client, moyennant un identifiant qui est une chaîne de caractères, une référence à un objet distant sur le Maître qui a déjà été enregistré (donc exporté) au niveau du Maître. A ce stade, trois problèmes se posent : - Comment savoir quel est l’identifiant de l’objet dont on veut avoir une référence ? - Comment faire si l’objet n’est pas encore exporté par la machine distante ? - Comment et quand est-ce que l’objet est désexporté ? Ecole Nationale des Sciences de l’Informatique de Tunisie 51 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Pour le premier point, deux solutions existent : soit que de part et d’autre on applique une même fonction de correspondance entre objet et identificateur. L’un (Maître) pour exporter et l’autre (Client) pour importer. L’inconvénient avec cette façon de faire est la difficulté de trouver une surjection d’un ensemble vaste (les objets) vers un ensemble moins vaste (une chaîne doit forcément être limitée en longueur). Mais surtout pour des raisons de sécurité : si on connaît la fonction on peut parfaitement savoir quels sont les objets exportés. Une deuxième méthode (qui a été retenue) consiste à laisser le système distant (Maître) décider de la valeur de l’identifiant (qui pourrait par exemple être aléatoire), passer cette valeur au système local (Client) qui utilisera alors le RMI pour récupérer la référence. Quant aux deux derniers points, c’est sur demande du système Client (et non pas explicitement de l’utilisateur lui-même) que le système distant (Maître) doit exporter ou désexporter un objet. Par ailleurs, comme tout objet du système peut en utiliser un autre (c’est le principe même de la programmation objet), il aura nécessairement à demander au système qui l’héberge (que ce soit Client, Maître ou Esclave) de lui procurer l’objet désiré. Mais un système ne peut pas se comporter identiquement face à une demande locale (par un de ses objets) et une demande distante (par un système distant). C’est pour cela que deux nouvelles notions ont été introduites: - le sous-système local (LocalSystemManagerInterface) - le sous-système exporté (ExportedSystemInterface) Ce sont en fait deux vues du même système : une vue pour les objets locaux une autre pour les systèmes distants. LocalSystemManager ExportedSystemManager B ExportedSystemManager LocalSystemManager A Fig 11 : interaction entre les vues des différents systèmes Ecole Nationale des Sciences de l’Informatique de Tunisie 52 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 8.6.1 Fonctionnement du sous-système local L’utilisateur ne voit que le sous-système local. C’est à lui qu’il s’adresse pour récupérer n’importe quel objet de .Ce sous-système ira d’abord vérifier si l’objet est local. Dans un pareil cas, il n’y a nullement besoin de la technologie RMI : si l’objet est en mémoire, il est directement passé à l’utilisateur, sinon, il est chargé du disque pour en créer une instance en mémoire, laquelle instance sera passée toujours à l’utilisateur. Si par contre l’objet n’est pas local, il vérifie quand même s’il a déjà une référence RMI de cet objet (créée lors d’une précédente demande), sinon, il retrouve le système distant qui est capable de lui passer une référence RMI (éventuellement la créer) de cet objet qu’il passe alors à l’utilisateur. Quand l’utilisateur n’a plus besoin de cette référence, il l’indique explicitement au soussystème qui appellera (si nécessaire) le système distant pour désexporter l’objet. Les deux schémas ci-après explicitent ce scénario. Utilisateur demande l’objet Obj au sous-système local Retourner L’instance À l’utilisateur oui oui Obj est en Memoire ? Obj est local ? non non oui Obj a déjà été importé ? Créer une nouvelle instance en chargeant Obj non Importer l’objet (du serveur d’enregistrement RMI) Système local Retrouver le système distant qui sert cet objet Système distant Retourner l’dentificateur RMI de Obj au système local oui Obj est déjà exporté ? Exporter Obj sur le serveur d’enregistrement RMI oui Obj est en Mémoire ? Créer une nouvelle instance en chargeant Obj Fig 12 : Demande d’un objet Ecole Nationale des Sciences de l’Informatique de Tunisie 53 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes Utilisateur libère l’objet Obj Système local Système distant sauvegarder l’instance d’Obj sur le disque. Obj est encore utilisé par d’autres utilisateurs (locaux ou distants)? non non INRIA Désexporter Obj du serveur d’enregistrement RMI oui Obj est local ? sauvegarder l’instance d’Obj sur le disque. Retrouver le système distant qui sert cet objet non Obj est encore utilisé par d’autres utilisateurs (locaux ou distants)? Fig 13 : Libération d’un objet Pour des raisons de performances le sous-système local gère 4 listes : - LiveObjects : c’est la liste des objets locaux « en vie ». Ce sont les objets en mémoire et en cours d’utilisation soit localement soit en distant. En fait pour résoudre le problème de l’incohérence des objets (deux instances différentes du même objet), le système crée une seule instance qui sera utilisée par tout le monde aussi bien localement qu’en distant. Cependant, des copies de cette instance peuvent également exister mais ne pourront jamais altérer la valeur de cette instance .Cette dernière (qui peut être un utilisateur, un groupe, un domaine, ou toute ressource…) est dite «en vie » car c’est la seule qui reflète l’état courant de l’objet et c’est la seule qui sera persistante (sauvée sur le disque). - CachedObjects : c’est la liste des copies des objets locaux et non locaux qui ont dernièrement été utilisés par les utilisateurs de ce système. Ces instances ne sont que des copies donc peuvent contenir une information qui n’est pas à jour. - ImportedObjects : c’est la liste d’objets non locaux et déjà importés. Cela évite d’importer plus d’une fois le même objet. Ce dernier sera libéré lorsque tous les utilisateurs locaux l’auront libéré. Ecole Nationale des Sciences de l’Informatique de Tunisie 54 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA - ExportedObjects : c’est la liste des objets locaux et déjà exportés .A chacun correspond donc un identificateur RMI. Cela évite d’exporter plus d’une fois le même objet. Ce dernier sera libéré lorsque tous les utilisateurs distant l’auront libéré. Il est toutefois à noter que le fonctionnement du sous-système local est également dépendant du fait qu’il soit sur un système Maître, Esclave ou Client. En effet, ces 4 listes ne sont pas utilisées en totalité pour tous les systèmes : un système Client par exemple ne possède ni d’objets Live ni d’objets exportés puisqu’il n’a aucune ressource locale. 8.6.2 Fonctionnement du sous-système exporté Il correspond à un système (du système distribué ) vu par un autre système distant. En fait, son fonctionnement dépend fortement du fait qu’il soit sur un Maître ou Esclave (en effet un Client n’est jamais exporté !). Lorsqu’un système distant lui demande un objet, le sous-système exporté, sur un esclave, vérifie que l’objet requit est bien local. Cela provient du fait qu’un esclave ne doit être qu’un serveur de ressources locales. Par contre, un Maître doit répondre à toutes les requêtes et doit servir l’objet requit où qu’il soit. C’est ainsi alors, qu’un Maître sert de pont entre l’utilisateur et le système Esclave. Imaginons le scénario suivant : Un utilisateur U sur un Client requiert deux ressources R1 et R2. R1 est un domaine. Elle est donc sur le Maître. R2 est un fichier. Elle est donc sur un Esclave. L’utilisateur demande au Client R1 puis R2. Pour R1, le Client demande au Maître ce domaine. Maître reconnaît que R1 est local donc exporte directement cet objet au serveur d’enregistrements RMI et passe l’identificateur (la chaîne de caractères) au Client qui se servira de la technologie RMI pour récupérer l’instance et la passer à U. Pour R2, idem au niveau du Client, sauf que le Maître reconnaît que R2 n’est pas local. Il récupère alors une référence RMI de cet objet de son système local (un des Esclaves), réexporte cet objet en le réenregistrant au niveau du serveur RMI local au Maître. Le reste se passe exactement comme pour R1 c’est-à-dire qu’il passe la référence au Client grâce à l’identificateur. Ecole Nationale des Sciences de l’Informatique de Tunisie 55 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes R. locales Fichiers, répertoires … Ressources Locale Utilisateurs, domaines, groupes… LocalSystemManager ExportedSystemManager Esclave B ExportedSystemManager Maître LocalSystemManager ExportedSystemManager LocalSystemManager Esclave A INRIA R. locales Fichiers, répertoires… LocalSystemManager NON EXPORTE Client Utilisateur Pas de R. Locales Fig 14 : communication entre Client, Maître et Esclaves 8.6.3 Migration des objets Il est clair qu’il est très important de pouvoir manipuler des instances d’objets à distance sans avoir à se préoccuper de leurs emplacements physiques. Il n’en demeure pas moins vrai que très souvent on besoin de faire migrer un objet vers un emplacement précis, éventuellement pour y travailler localement. C’est essentiellement le cas lorsque, par exemple, on veut avoir une copie de l’objet car on ne va pas le modifier. Ou encore, pour déplacer carrément l’objet d’un système A vers un système B (déplacement de fichiers…). Ecole Nationale des Sciences de l’Informatique de Tunisie 56 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Pratiquement, l’unique façon permettant cette migration est de faire migrer des copies des objets et non les objets eux-mêmes parce qu’un objet est un pointeur et qu’un pointeur n’a de sens que sur la machine où il a été créé. Cependant, cela soulève tout particulièrement deux problèmes : l’un au niveau de la sécurité, l’autre au niveau du fonctionnement de la technologie RMI. 8.6.3.1 Problème de sécurité Pour ce qui est de la sécurité, l’exemple suivant peut mieux présenter la problématique : supposons qu’une ressource R utilise un fichier F sur un Esclave A et un tableau T (en mémoire). Supposons encore qu’à une date D1, l’utilisateur Selim avait le droit en lecture et en écriture sur cette ressource mais qu’a la date D2 il ne bénéficie plus de ces privilèges. En imaginant que Selim est arrivé à avoir une copie de la ressource R entre D1 et D2 (ce qui est absolument légal), ce serait une faille que de laisser cet utilisateur utiliser cette copie pour changer le contenu du fichier F après la date D2. Remarquez cependant que même s’il changeait le tableau T de la copie cela n’affecterait que cette copie (car c’est en mémoire et donc non persistant). Donc les copies d’objets ne doivent aucunement altérer les informations originales : elles ne doivent être utilisées qu’en lecture et jamais en écriture. La solution adoptée pour pallier cette faille est d’interdire à toute copie d’avoir accès au disque. Comme tout utilisateur n’est jamais local ni à un Maître ni à un Esclave car il n’est local qu’au système Client qu’il utilise, il suffit d’interdire à tout objet d’avoir accès au disque tant qu’il n’est pas local. Ainsi, lorsque Selim voudra utiliser la copie R’ de R pour changer F, le système Client est capable de savoir que R n’est pas local et donc d’interdire cette opération. 8.6.3.2 Problème au niveau du RMI Par ailleurs, l’utilisation du RMI nous contraint à avoir des objets immobiles car un objet Remote utilise les Sockets pour répondre aux requêtes des utilisateurs distants. Or, comme les pointeurs, une Socket n’a aucun sens sur une autre machine. C’est dans ce sens que la notion du Handler a été introduite. Un Handler est un objet Remote (accessible à distance) qui encapsule un objet nonRemote. Ainsi, tous les objets gérés par le système distribué seront des objets non-Remote (donc non accessibles á distance) par contre, ils seront persistants et migrateurs. Le système se chargera, à chaque fois qu’un objet Remote est requis (évidemment lors de l’exportation d’un objet vers un autre système), de créer un Handler qui encapsulera cet objet. Ecole Nationale des Sciences de l’Informatique de Tunisie 57 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Cela permet au niveau de l’utilisateur de manipuler les objets de façon totalement transparente sans se soucier de quelque façon que ce soit de tout ce qui est en relation avec Remote, Handler…etc. En effet un Handler est une classe qui adopte toutes les méthodes de la classe qu’elle encapsule en ajoutant les méthodes nécessaires au fonctionnement RMI (à la manière de l’héritage multiple qui est banni par Java), de telle sorte que l’utilisateur en appelant une méthode M d’un objet O n’a pas à se soucier si c’est un Handler ou non. Pour rendre le développement plus aisé un outil Java a été créé (Handler_Generator) dans le but d’automatiser la génération de ces Handlers. 8.7 Application au pilotage de programme Le pilotage de programme traite essentiellement de quatre entités : - (1) les bases de connaissances encapsulant formellement l’expérience d’un ou de plusieurs experts dans un certain domaine. - (2) Les programmes permettant de réaliser des tâches élémentaires - (3) Le moteur d’inférence réalisant le raisonnement nécessaire pour retrouver un enchaînement acceptables des différents programmes afin d’aboutir au but précisé par l’utilisateur final. - (4) Les informations à traiter, qui sont entrées par cet utilisateur final. La dernière entité (4) est une simple donnée ponctuelle, donnée par le client au cours d’une utilisation du système de pilotage de programmes. Elle est considérée comme information simple qui peut être représentée par les objets Java standard (des chaînes de caractères, des entiers…) Les trois premières, par contre, sont considérées comme des ressources au niveau du système . En effet, à chacune d’entre elles, on fait correspondre un objet (persistant) du système. Pour les bases de connaissance (1), par exemple, on associe la classe Java KnowledgeBase qui manipule toutes les informations de celle-ci. Cette dernière prévoit des méthodes permettant de gérer tous les fichiers physiques formant la base comme une seule entité et de les lire ou de les modifier à distance. Dans un premier temps, l’objet qui a été développé gère uniquement l’aspect « utilisation à distance » pour permettre, à partir de l’Applet de pilotage de programme (développée par F. Avnaim) de lire et de modifier la base, ainsi que l’accès concurrent grâce à la notion de verrou. Ecole Nationale des Sciences de l’Informatique de Tunisie 58 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA En fait, cet objet ne gère pas les traitements spécifiques à la base (création d’un nouvel opérateur, modification de l’enchaînement des programmes…) car cette partie a déjà été réalisée au niveau d’autres classes Java (du même développeur). Ainsi, pour des raisons de réutilisabilité, cette partie a été gardée sans altération. On pourrait prévoir que dans une version ultérieure, KnowledgeBase se chargera totalement des aspects liés à la base. Plus précisément, KnowledgeBase permet, à distance, de lire et de modifier les fichiers composant la base de connaissance, mais ne précise pas comment cette modification doit s’effectuer. En ce qui concerne le moteur d’inférence (3) (écrit en C, C++), la solution la plus raisonnable est de créer un objet Java qui, grâce à JNI (Java Native Interface) propose les services de ce moteur sous forme de méthodes Java. Cet objet, également considéré comme ressource, reste local au programme « Moteur d’inférence » correspondant (sur la même machine), mais permet grâce aux mécanismes apportés par de manipuler de façon transparente toute base de connaissances (1) et tout programme (2) du système. Les programmes (qu’ils soient des binaires ou des bibliothèques en C, C++), sont également des ressources et peuvent être exécutés à distance moyennant la même procédure énoncée pour le moteur d’inférence i.e. grâce au JNI. Notons toutefois que les objets modélisant les moteurs d’inférence et les programmes n’ont pas été développés car l’Applet ne permet pas encore de lancer un moteur d’inférence sur les données. Ecole Nationale des Sciences de l’Informatique de Tunisie 59 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 8.8 Modèle Objet Il est à souligner que tout a été développé en utilisant les interfaces. Cette notion procure un plus haut niveau d'abstraction se rapprochant de la programmation par composants. Elle permet par exemple, à tout moment, de remplacer tout objet par tout autre proposant les mêmes services (les mêmes méthodes). Elle permet également, de faire coexister différentes implémentations pour la même notion mais tenant compte de la particularité de l'objet qu'elle caractérise. Ainsi, deux ressources telles que Image et Texte, bien que prévoyant un même service AFFICHER_CONTENU, doivent agir différemment. 8.8.1 Tout est DobjectInterface : Toute ressource (au sens de fichier, utilisateur, domaine ou groupe,…) doit être : - persistante - accessible à distance (un objet groupe est toujours sur le Maître) - protégée par le même mécanisme de sécurité déjà énoncé. De plus, un même mécanisme d'identification a été choisi pour la localisation de tous ces objets. C'est pour cela qu’ils héritent tous d'une même interface appelée DobjectInterface (autrement dit, l'interface pour un objet du système Distribué). DobjectInterface prévoit plusieurs méthodes pour identifier l'objet (getLocation), gérer des propriétés(get/setProperties et listPropertiesNames), gérer des permissions (set/unset/listPermissions), gérer l’accès au disque (load/unloadContent) et interagir avec les autres composants (add/removeOperationListener, operationPerformed). Dans ce sens, tout objet est parfaitement maître de sa décision en ce qui concerne tous ces aspects. Ainsi, une ressource File peut très bien être stockée sous forme d’un ou de plusieurs fichiers et même tout un répertoire. Cependant, une implémentation par défaut a été réalisée : Dobject. Ainsi, lorsqu’on veut redéfinir cet objet, on a le choix entre dériver le nouvel objet de Dobject et redéfinir les méthodes en question avec un faible coût de développement, ou implémenter directement DobjectInterface et définir un fonctionnement tout autre. A titre indicatif, les schémas UML des interface DobjectLocator et LocalSystemInteface seront explicités dans la suite, avant de présenter la hiérarchie des différentes interfaces et implémentations concernant, d’abord, les objets du systèmes qui sont les ressources et les authentificateurs (domaines, groupes et utilisateurs), ensuite, celle relative aux interfaces et implémentations du système luimême. Ecole Nationale des Sciences de l’Informatique de Tunisie 60 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes 8.8.2 INRIA UML de LocalSystemManagerInterface Interface LocalSystemManagerInterface void start() throws DoovosGeneralFailureException; void stop() throws DoovosGeneralFailureException; String getName(); DdomainInterface superdomain() ; DuserInterface superuser(); DuserInterface guest(); DgroupInterface supergroup(); DgroupInterface nogroup(); DdirectoryInterface root(); DdirectoryInterface localroot() ; Dconnection connect(DobjectLocator userLocation, String password); void disconnect(Dconnection connection); boolean isConnected(Dconnection connection); String getProperty(String propertyName); DobjectInterface getObjectCopy(DobjectLocator ol); DobjectInterface getObjectCopy(DobjectLocator ol,boolean forceReload); DobjectInterface getObject(DobjectLocator ol); void freeObject(DobjectInterface location); boolean exists(DobjectLocator locator); boolean isLocal(DobjectLocator locator); 8.8.3 UML de DobjectInterface Interface DobjectInterface DobjectInterface THIS() throws RemoteException; String getName(Dconnection caller) throws RemoteException; String getType(Dconnection caller) throws RemoteException; DobjectLocator getLocation(Dconnection caller) throws RemoteException; DuserInterface getCreator(Dconnection caller) throws RemoteException; void setPermission(Dconnection caller,DobjectLocator target,Deductive constraints,boolean override) throws RemoteException; boolean unsetPermission(Dconnection caller,DobjectLocator target) throws RemoteException; Permissions.Entry getPermission(Dconnection caller,DobjectLocator target) throws RemoteException; Collection listPermissions(Dconnection caller) throws RemoteException; Object getProperty(Dconnection caller, String property) throws RemoteException; void setProperty(Dconnection caller,String property,Object Value,boolean override,boolean isIndexed) throws RemoteException; boolean unsetProperty(Dconnection caller,String property) throws RemoteException; Collection listPropertiesNames(Dconnection caller) throws RemoteException; void addOperationListener(DobjectInterface listener,String operationsFilter) throws RemoteException; void removeOperationListener(DobjectInterface listener,String operationsFilter) throws RemoteException; Ecole Nationale des Sciences de l’Informatique de Tunisie 61 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA void operationPerformed(OperationEvent oEvent) throws RemoteException; void wakeUp() throws RemoteException; void sleep() throws RemoteException; void dispose() throws RemoteException; Component getComponent(Object parameters,boolean isSelected) throws RemoteException; DobjectInterface loadContent (DobjectLocator childLocation) throws IOException, ClassNotFoundException, RemoteException; Void unloadContent(DobjectInterface child) throws IOException,RemoteException; 8.8.4 Hiérarchie des objets DobjectInterface DauthentificatorInterface DgroupInteface DresourceInterface DuserInteface DdomainInteface Duser Ddomain Dgroup DEFAULT_NOGROUP DEFAULT_GUEST DEFAULT_SUPER_GROUP Dresource DdirectoryInterface Dfile Ddirectory ByteFileInterface DEFAULT_SUPER_DOMAIN ObjectFileInterface DEFAULT_ROOT DEFAULT_SUPER_USER DFileInterface KnowledgeBaseInetface DEFAULT_LOCAL_ROOT KnowledgeBase Fig 15 : Hiérarchie des objets du système LocalSystemManagerInterface ImportedObjects ExportedObjects MasterSystemManager LiveObjects AbstractSystemManager GenericClientSystemManager MonoClientSystemManager AutoSaveThread CachedObjects SlaveSystemManager MultiClientSystemManager Fig 16 : Hiérarchie des classes et interfaces du Système local. Héritage Classe Légende Interface Ecole Nationale des Sciences de l’Informatique de Tunisie Agrégation 62 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 9 Réalisation Le travail qui a été effectué peut se résumer en le développement : - d’une API (ensemble de classes Java) appelée Doovos permettant par la programmation Java, d’utiliser le système pour manipuler des objets répartis sur les différents Esclaves et de les faire coopérer, ou encore de définir de nouveaux objets (nouveau types de ressources). Elle permet également de faire évoluer le système (par une réimplémentation des interfaces définissant ce dernier). - d’un serveur Maître et d’un serveur Esclave piliers de l’architecture présentée. - de plusieurs outils de développement facilitant et automatisant la création de certaines classe Java. - d’une Servlet permettant, via Internet et de façon interactive, l’administration du système à partir d’une simple page HTML sur un navigateur. - des objets dédiés au pilotage de programmes et leur intégration dans l’Applet. 9.1 L’API Doovos L’API doovos (Distributed Object Oriented Virtual Operating System) est composée de 41 interfaces implémentées par 93 classes (outre celles générées automatiquement) répartis dans 7 paquetages. Ces paquetages sont : - vpc.www.html.servlet : comprend une interface pour la définition des SubServlet qui sont des classes déléguées par une Servlet pour réaliser un certaine tâche particulière. - vpc.www.html : comprend une classe (EasyTable) permettant de générer des Tableaux Html. - vpc.doovos : comprend toutes les interfaces définissant les objets du système. Entre autres, nous retrouvons DuserInterface, DdomainInterface, etc. De plus, on y trouve également les classes de base que sont DobjectLocator et Permissions. - vpc.doovos.object : contient toutes les implémentations par défaut des interfaces de vpc.doovos. - vpc.doovos.system : contient les interfaces et implémentations du système luimême, telle que LocalSystemManagerInterface, ExportedMaster, etc. - vpc.doovos.tool : contient des applications utilitaires Java (comme le lanceur des serveurs Maître et Esclave). - vpc.doovos.util : contient des classes et interfaces à utilité générale comme par exemple Grep qui permet de vérifier si une chaîne de caractère (modèle pouvant contenir des * et de ?) correspond à une autre. Ecole Nationale des Sciences de l’Informatique de Tunisie 63 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 9.2 La Servlet ProgramSupervisionServlet La Servlet ProgramSupervisionServlet a été développée pour permettre une administration interactive du système. En effet, via des pages HTML dynamiques, un superviseur peut créer ou supprimer des domaines, utilisateurs ou groupes, ou encore définir les permissions relatives au différentes ressources, etc. Fig 17 : Administration du système via Internet Ecole Nationale des Sciences de l’Informatique de Tunisie 64 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Cette Servlet permet, pour chaque objet du système, d’exécuter ses propres méthodes à partir d’un simple formulaire. Ainsi, pour un objet du type Domaine, un administrateur peut ajouter un nouvel utilisateur, lister son contenu, etc. Fig 18 : Ajout d’un utilisateur à un domaine Fig 19 : Lister le contenu d’un domaine Ecole Nationale des Sciences de l’Informatique de Tunisie 65 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 9.3 Les outils complémentaires Le développement m’a amené à produire également quelques outils facilitant et automatisant certaines tâches. Tous ces outils sont des applications Java dans le paquetage vpc.doovos.util . 9.3.1 Handler_Generator Handler_Generator permet de générer automatiquement des classes Handler énoncées au niveau du paragraphe 8.6.3.2. A cette application, on doit spécifier juste le nom des classes Java pour lesquels on veut créer les Handlers (l’option –verbose permet de suivre le processus de génération pas à pas). Exemple : Java vpc.doovos.tool.Handler_Generator my.package.firstClass my.package.secondClass deux nouvelles classes seront alors générées automatiquement : my.package.firstClass_Handler et my.package.secondClass_Handler. Ces classes seront utilisées par le système pour servir à distance les objets qu’il gère. 9.3.2 TemplateGenerator Les pages HTML n’ont aucune interaction avec les classes Java qu’on peut écrire. Seulement, on pourrait cependant avoir besoin d’intégrer par exemple des constantes Java dans ces pages. Pour remédier à cela deux solutions existent : Une solution très rudimentaire consiste à copier manuellement la valeur de cette constante dans la page HTML et pour chaque occurrence, sous le risque de se tromper bien sur, mais aussi, d’être obligé de refaire la même chose chaque fois que la valeur de la constante change au cours de la période de développement. Une solution beaucoup plus «propre » est d’utiliser les Servlets pour remplacer la constante par sa valeur pendant l’exécution même de cette Servlet (au Runtime). Néanmoins, par essence, les pages HTML dynamiques n’ont de raison d’être que si on ne connaît pas l’information à l’avance. Or dans notre cas la valeur de la constante ne change pas au cours du Runtime. De plus, pour des raisons de performances, il est plus intéressant de minimiser la génération dynamique de ces pages. TemplateGenerator a été créé pour résoudre efficacement ce problème. Il permet de remplacer dans les pages HTML toutes les occurrences des constantes Java avec leurs valeurs. Cette opération se fait à chaque fois que l’on fait une modification dans le fichier et non plus à chaque fois que ce fichier est appelé par le serveur http. Ecole Nationale des Sciences de l’Informatique de Tunisie 66 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA Mieux encore, TemplateGenerator permet même de construire un fichier à partir d’un ensemble d’autres fichiers de telle sorte que si par exemple, toutes les pages d’un site utilisent le même entête et les mêmes styles, (couleurs et polices…) cette partie commune peut être mise dans un fichier a part qui sera inclus automatiquement dans tous les fichiers du site. C’est donc une façon de factoriser le code pour ne pas avoir changer dans chacun des fichiers composant le site si on a besoin, par exemple, de modifier quelque chose au niveau de l’entête. 9.3.3 JHTML_Generator Pour générer des pages HTML dynamiques avec les Servlets, il y a deux façons de faire : soit intégrer du code HTML dans du code Java, soit le contraire. Le premier cas donne un code qui ressemble à : String Variable = « bonjour» out.println(« <FONT SIZE=’10’> »+Variable) ; Le second cas donne un code qui ressemble à <HTML><BODY> <JAVA> for (int i=0 ; i<20 ; ++i) out.println(i) ; </JAVA> </BODY></HTML> En réalité, chaque solution a ses avantages et ses inconvénients. La première est meilleure si on a peu de code HTML d’affilé. La seconde se montre beaucoup plus raisonnable dans le cas où on a des blocs séparés de codes JAVA et de code HTML. Le cas de la Servlet ProgramSupervisionServlet, correspond clairement au deuxième cas : un traitement purement JAVA pour questionner le Serveur des objets et répondre à la requête du client puis un formatage de cette information en HTML. JHTML_Generator permet de générer une classe JAVA à partir d’un fichier HTML qui contient du code JAVA. 9.3.4 Doovos Launcher Doovos Launcher est une application qui permet de lancer et stopper les serveurs d’objets Maître et Esclave ainsi que de gérer la synchronisation entre eux car l’Esclave ne doit pas se lancer avant que le Maître ait fini sa phase d’initialisation (l’Esclave doit s’enregistrer auprès du Maître). Son principe est de créer un fichier verrou temporaire quand le Maître est lancé et de le supprimer quand ce dernier aura terminé sa phase d’initialisation. D’un autre coté l’Esclave ne se lancera que si ce fichier n’existe plus. Ecole Nationale des Sciences de l’Informatique de Tunisie 67 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA De plus, cette application permet de configurer les serveurs Maître et Esclaves grâce au options données au niveau de la ligne de commande : -start=master : lancer le serveur Maître -stop=master : stopper le serveur Maître -start=slave : lancer le serveur Esclave -stop=slave : stopper le serveur Esclave -config=configFileName : spécifier le nom du fichier de configuration (voir annexe D) -wait=mmm : spécifier qu’il faut lancer le serveur après mmm milli-secondes -temp=lockFileName : spécifier le nom du fichier VERROU qui permettra de savoir si le Maître a fini de se lancer ou pas -period=mmm : spécifier la fréquence de vérification si le fichier verrou existe ou pas -help : afficher de l’aide -showWarning : spécifier que le serveur doit afficher les messages de type avertissement. -showError : spécifier que le serveur doit afficher les messages d’erreurs -showTrace : spécifier que le serveur doit afficher les messages de trace (pour debuggage) -showMethod : spécifier que le serveur doit afficher le nom et le paramètres de toutes les méthodes exécutées. -show : spécifier que le serveur peut prendre en considération les options showXXX. Pour les inhiber utiliser -!showXXX. -throwRT et -throwRemote : afficher les exceptions localement (avant de les passer au client) Voici alors le résultat du lancement du Maître (nommé master)suivi de celui de l'Esclave (nommé base) avec les options –showWarning et –showMessage ************************************************************** * * * MASTER master Starting...(Tue Jun 20 10:06:08 CEST 2000) * * * ************************************************************** master:0 MESSAGE: loading superdomain... master:1 WARNING: not found... Creating new Instance of DEFAULT_SUPER_DOMAIN... master:2 MESSAGE: loading superuser... master:3 WARNING: not found... Creating new Instance of DEFAULT_SUPER_USER... master:4 MESSAGE: loading guest... master:5 WARNING: not found... Creating new Instance of DEFAULT_GUEST... master:6 MESSAGE: loading supergroup... master:7 WARNING: not found... Creating new Instance of DEFAULT_SUPER_GROUP... master:8 MESSAGE: loading noGroup... master:9 WARNING: not found... Creating new Instance of DEFAULT_NO_GROUP... master:10 MESSAGE: Creating new instance of DEFAULT_ROOT... master:11 MESSAGE: configurating CachedObjects... master:12 MESSAGE: configurating ImportedObjects... master:13 MESSAGE: configurating ExportedObjects... master:14 MESSAGE: configurating LiveObjects... master:15 MESSAGE: starting autoSaveThread... master:16 MESSAGE: Launching the ExportedMaster master:17 MESSAGE: Master is ready! Ecole Nationale des Sciences de l’Informatique de Tunisie 68 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA *********************************************************** * * * SLAVE base Starting...(Tue Jun 20 10:06:20 CEST 2000) * * * *********************************************************** base:0 MESSAGE: loading localroot... base:1 WARNING: not found... Creating new Instance of DEFAULT_LOCAL_ROOT... base:2 MESSAGE: configurating CachedObjects... base:3 MESSAGE: configurating ImportedObjects... base:4 MESSAGE: configurating ExportedObjects... base:5 MESSAGE: configurating LiveObjects... base:6 MESSAGE: starting autoSaveThread... base:7 MESSAGE: Launching the ExportedSlave base:8 MESSAGE: localRoot exported ! master:18 MESSAGE: registrating rmi://carinae.inria.fr:7799/slave ... base:9 MESSAGE: registration was successful ! base:10 MESSAGE: slave base ready! 9.3.5 Ddebugger Ddebugger a été développé dans un pur besoin d’implémentation, de test et de debuggage des serveurs Maître et Esclave. Il permet d’avoir une idée sur leur objets importés, exportée, live et caches ainsi que les objets RMI qui ont été enregistrés. Ddebugger (version 1.0) Type !help for help >!help ! exit : exit from Ddebugger ! help : get this help ! connect RMI_LOCATION : connects to the Exported System at the specified location ! disconnects : disconnects from the Exported System ! list RMI_LOCATION : list rmi bound IDs at the specified location. Nota bene : Commands begenning with (!) are interpreted locally by the debugger, While others are dispatched to the Exported System. >!list rmi://carinae.inria.fr master superuser superdomain supergroup nogroup guest oneSlave oneSlaveLocalroot >! Connect master >cachedObjects max 30 >cachedObjects size 2 >cachedObjects list CACHED OBJECTS ON master{ Superdomain.inria.Ali Root.oneSlave.AliFile } >!exit exiting doovos Ecole Nationale des Sciences de l’Informatique de Tunisie 69 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 9.4 Intégration dans l’Applet Au niveau de l’Applet, une base de connaissance est désormais vue et manipulée comme un objet du système . Elle est représentée par un objet appelé KnowledgeBase. Les informations peuvent alors être manipulées si et seulement si, l’utilisateur (défini par son nom, son mot de passe et son domaine parent pendant la phase d’initialisation de l‘Applet) a le droit de le faire. 9.5 Performances du Système Au niveau logiciel, j’ai choisi, compte tenu de publications sur Internet concernant les moteurs de Servlets, un serveur HTTP 100 % Java (Jetty) permettant d’optimiser nettement les performances du système. En effet utiliser des Servlets Java sur un Serveur HTTP en code natif (C ou C++) comme un serveur Apache par exemple, rajoute un certain handicap au serveur à cause de la nécessité du passage du code Java au code natif et réciproquement (via la Java Native Interface JNI). On trouvera au niveau de l’annexe une comparaison entre quelques serveurs HTTP du marché, dont Jetty. En ce qui concerne le développement, j’ai essayé d’optimiser les performances à chaque fois que le temps et l’occasion le permettaient. Ainsi, pour la vérification d’une permission par exemple, un cache a été utilisé ce qui accélère énormément ce processus. En effet, la vérification des permissions est récursive car si on trouve qu’il y a bien un signataire qui a accordé des droits à un utilisateur, il faut aussi vérifier que ces mêmes droits ont bien été accordées à ce signataire. Sans cache cela peut alourdir considérablement le système, surtout que la vérification des permissions se fait pour toute opération sur tout objet du système. Ce cache se construit au fur et à mesure qu’on vérifie les permissions et est ré-initialisé (à la liste vide) à chaque altération de ces permissions (ajout, retrait, modification de permissions). Le cache a également été utilisé au niveau de LocalSystemManagerInterface (implémentée par AbstractSystemManager) pour ne pas avoir à réimporter, réexporter ou recharger du disque les mêmes objets avec les listes cahedObjects, LiveObjects, ImportedObjects et exportedObjects. En outre, vu que DobjectLocator est l’objet le plus utilisé au niveau du système puis qu’il est l’identifiant de tout objet, le plus grand soin a alors été pris - au niveau de son implémentation – pour optimiser son code en utilisant par exemple la notion de code de hachage et de tri des attributs pour que la comparaison entre deux DobjectLocator soit suffisamment rapide. De plus la gestion des Handlers a également été optimisée aussi bien au niveau du code qu’au niveau de l’exécution : on n’a pas besoin de créer un Handler pour chaque classe, Ecole Nationale des Sciences de l’Informatique de Tunisie 70 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA il suffit de créer un Handler par interface (ce qui n’est pas le cas avec le rmic, le compilateur du RMI) . De plus, le système en cours d’exécution est capable de reconnaître quel est le meilleur Handler pour un objet donné et d’en créer automatiquement une nouvelle instance. Ecole Nationale des Sciences de l’Informatique de Tunisie 71 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 10 Conclusion En conclusion, le système (des serveurs suivant une certaine architecture) qui a été développé: permet à plusieurs groupes de scientifiques de partager leurs ressources. propose la protection de ces ressources via des mécanismes d’authentifications et d’attribution de permissions. permet une administration partagée entre plusieurs administrateurs. est parfaitement portable sur tout environnement et plate-forme reconnaissant Java. se base sur une conception par composants (grâce au interfaces Java). Simplement paramétrable et configurable (avec un fichier externe de configuration). simplifie un futur développement avec plusieurs paquetages riches en classes et interfaces réutilisables ainsi que plusieurs outils pour la génération automatiques de certaines classes. Le projet est très ambitieux et perfectible, des améliorations pourraient être réalisées en ce qui concerne: l’optimisation - encore - des performances. l’amélioration de l’interface Homme-Machine pour l’administration du système (ProgramSupervisionServlet) éventuellement, remplacement de la partie RMI avec CORBA pour encore plus d’interopérabilité. définition de la politique de sécurité (seuls les mécanismes de protection ont été définit). Enfin, je tiens à exprimer mon réel plaisir d’avoir travaillé dans un établissement tel que l’INRIA avec ces capacités intellectuelle (des scientifiques de très haut niveaux) et matérielles (des machines très performantes). En effet, cela m’a permis, sur le plan scientifique d’améliorer nettement mes connaissances (surtout en Unix) mais aussi sur le plan social, en travaillant avec de grands spécialistes et de véritables scientifiques acharnés (toujours des projets et des conférences). Ecole Nationale des Sciences de l’Informatique de Tunisie 72 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 11 Bibliographie 11.1 Articles Résolution de problèmes en pilotage de programmes S. Moisan & D. Ziéblin (RFIA 2000) Experience in Integerating Image Processing Programs M. Thonnat, S. Moisan & M. Crubézy (1st international Conference on ICVS’99), 1997 Knowledge-based control of vision systems C. Shechar, S.Moisan, R. Vincent, P. Burlina & R. Chellapa (Image and vision computing), 1998 Une plate-forme pour une programmation par composants de systèmes à base de connaissances S. Moisan (Habilitation à diriger les recherches, Université de Nice), 1998 Program Supervision under Resource Constraints S. Moisan & M. Thonnat (3rd Europeen Conference on Artificial Intelligence ECAI98. Workshop on Monitoring and Control of Real-Time Intelligent Systems), 1998 11.2 Ouvrages [1] Open Systems Gary J. Nutt, Prentice Hall, Englewood Cliffs, 1992 [2] Java threads Scott Oaks & Henry Wong, … [3] Windows NT User Administration Ashley J.Meggih & Timothy D.Ritchey, O’Reilly, 1997 [4] Practical File System : Design for the Be File System Dominic Giampaolo, …, … [5] Password Security : A Case History Robert Morris & Ken Thompson Ecole Nationale des Sciences de l’Informatique de Tunisie 73 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA [6] Practical Unix Security Simpson Grafinkel & Gene Spafford, O’Reilly & Associates Inc., 1991 [7] Client/Server Programming with Java and Corba Robert Orfali & Dan Harkey [8] The Java language Spécifications James Gosling, Bill Joy & Guy Steele, Addison-Wesley 1996 [9] Windows NT in a nutShell Eric Pearce, O’Reilly 1997 11.3 Adresses Internet Java http://java.sun.com/products/jdk/1.2/docs/index.html http://java.sun.com/products/jdk/1.1/docs/tooldocs/win32/java.html http://java.sun.com/products/jdk/1.1/docs/ http://www.javasoft.com/products/jdk/1.1/docs/guide/serialization/spec/serialTOC.d oc.html http://java.sun.com/docs/books/tutorial/essential/ RMI spécifications http://java.sun.com/products/jdk/1.1/docs/guide/rmi/spec/rmiTOC.doc.html Servlets Java - spécifications http://java.sun.com/products/servlet/2.1/api/packages.html - serveurs http://www.mortbay.com/software/Jetty.html http://www.tapsellferrier.co.uk/gnupaperclips/index.html - tutorial http://www.desertwind.com/Abbey/mm/jserv/jservBasics01/httpServlet.htm http://www.e-oasis.com/rmiug-jobs/ http://nt-server-0.npu.edu/advjava/servlet/index_servlet.html -comparatif http://www.mortbay.com/software/iX.html html http://labrocca.com/htmlementary/ http://java.sun.com/docs/books/jls/html/index.html http://alumni.chihlee.edu.tw/htmltag/tagsix.htm Ecole Nationale des Sciences de l’Informatique de Tunisie 74 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA http://www.cafe.edu/www-tags/ http://scitsc.wlv.ac.uk/encyc/th.html - spécifications http://www.w3.org/TR/REC-CSS1 java script http://developer.netscape.com/docs/manuals/js/client/index.html applets, tag EMBED (pour Java 1.2) http://java.sun.com/docs/books/tutorial/uiswing/start/AppletDemo.html http://java.sun.com/products/jfc/tsc/articles/plugin/ http://java.sun.com/docs/books/tutorial/uiswing/start/swingApplet.html http://java.sun.com/products/plugin/1.3/docs/intranet.html http://java.sun.com/docs/codeconv/html/ Systèmes d’exploitations orientés objets http://web-sites.co.uk/jules/moscow/ Ecole Nationale des Sciences de l’Informatique de Tunisie 75 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 12 Annexe A : la hiérarchie des classes et des interfaces développées Notations : Les notations qui suivent sont applicables aussi bien aux classes qu’aux interfaces : Les niveaux de hiérarchie sont à interpréter suivant l’indentation : une indentation a droite signifie que la classe en question dérive (au sens de l’héritage objet) de la classe qui la précède. Les classes développées dans le cadre de ce stage sont précédées du mot clé class (ou interface pour les interfaces) en gras. Les autres (de la bibliothèque standard Java ou d’autres bibliothèques comme ce) sont sans le gras. Elles ont été rajoutées à titre indicatif. La nomenclature des classes sera en absolu, c’est-à-dire précédée par le nom de paquetage auquel appartient cette classe. Le nom effectif de la classe sera en gras. Exemple : dans « vpc.doovos.system.AbstractSystemManager », vpc.doovos.system est le paquetage et AbstractSystemManager est le nom de la classe. Pour chaque classe on spécifiera entre parenthèses, le cas échéant, les interfaces qu’elle implémente. Et pour chaque interface, on spécifiera entre parenthèses, le cas échéant, les interfaces qu’elle étend. Hiérarchie des classes class java.lang.Object class vpc.doovos.system.AbstractSystemManager (implements vpc.doovos.Dconstants, vpc.doovos.system.LocalSystemManagerInterface, java.io.Serializable) class vpc.doovos.system.GenericClientSystemManager class vpc.doovos.system.MonoClientSystemManager class vpc.doovos.system.MultiClientSystemManager class vpc.doovos.system.MasterSystemManager (implements java.io.Serializable) class vpc.doovos.system.SlaveSystemManager (implements java.io.Serializable) class vpc.doovos.system.AbstractSystemManager.AbstractTable (implements java.io.Serializable) class vpc.doovos.system.AbstractSystemManager.CachedObjects class vpc.doovos.system.AbstractSystemManager.ExportedObjects class vpc.doovos.system.AbstractSystemManager.ImportedObjects class vpc.doovos.system.AbstractSystemManager.LiveObjects class vpc.doovos.util.ArraysComparator (implements java.util.Comparator) class vpc.doovos.util.ArrayTable class vpc.doovos.util.CommandLineArguments class vpc.doovos.Dconnection (implements java.lang.Comparable, java.io.Serializable) class vpc.doovos.tool.Ddebugger class vpc.doovos.system.DdebuggerHandler (implements java.io.Serializable) Ecole Nationale des Sciences de l’Informatique de Tunisie 76 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA class vpc.doovos.util.DeductiveFactory class vpc.doovos.util.DeductiveFactory.AbstractCollection (implements vpc.doovos.util.DeductiveFactory.CollectionInterface, vpc.doovos.util.ReverseDeductive) class vpc.doovos.util.DeductiveFactory.Collection_AND class vpc.doovos.util.DeductiveFactory.Collection_FIRST class vpc.doovos.util.DeductiveFactory.SortedCollection_FIRST class vpc.doovos.util.DeductiveFactory.Collection_OR class vpc.doovos.util.DeductiveFactory.Always (implements vpc.doovos.util.Deductive) class vpc.doovos.util.DeductiveFactory.Collection_CANONIC (implements vpc.doovos.util.DeductiveFactory.CollectionInterface, vpc.doovos.util.ReverseDeductive) class vpc.doovos.util.DeductiveFactory.Criteria (implements vpc.doovos.util.Deductive) class vpc.doovos.util.DeductiveFactory.DateIntervalle (implements vpc.doovos.util.Deductive) class vpc.doovos.util.DeductiveFactory.MultipleCriteria (implements vpc.doovos.util.Deductive) class vpc.doovos.util.DeductiveFactory.Mute (implements vpc.doovos.util.Deductive) class vpc.doovos.util.DeductiveFactory.Never (implements vpc.doovos.util.Deductive) class vpc.doovos.util.DeductiveFactory.Not (implements vpc.doovos.util.ReverseDeductive) class vpc.doovos.object.Dobject (implements java.lang.Comparable, vpc.doovos.Dconstants, vpc.doovos.DobjectInterface, java.io.Serializable) class vpc.doovos.object.AbstractContainer (implements vpc.doovos.DcontainerInterface) class vpc.doovos.object.Ddirectory (implements vpc.doovos.DdirectoryInterface) class vpc.doovos.system.DEFAULT_LOCAL_ROOT class vpc.doovos.system.DEFAULT_ROOT (implements vpc.doovos.DdirectoryInterface) class vpc.doovos.object.Ddomain (implements java.lang.Comparable, vpc.doovos.DdomainInterface) class vpc.doovos.system.DEFAULT_SUPER_DOMAIN (implements vpc.doovos.DdomainInterface) class vpc.doovos.object.Dresource (implements vpc.doovos.DresourceInterface) class vpc.doovos.object.Dfile (implements vpc.doovos.DfileInterface) class vpc.doovos.object.KnowledgeBase (implements vpc.doovos.KnowledgeBaseInterface) class vpc.doovos.object.Dgroup (implements vpc.doovos.DgroupInterface) class vpc.doovos.system.DEFAULT_NO_GROUP (implements vpc.doovos.DgroupInterface) class vpc.doovos.system.DEFAULT_SUPER_GROUP (implements vpc.doovos.DgroupInterface) class vpc.doovos.object.Duser (implements vpc.doovos.DuserInterface) class vpc.doovos.system.DEFAULT_GUEST (implements vpc.doovos.DuserInterface) class vpc.doovos.system.DEFAULT_SUPER_USER (implements vpc.doovos.DuserInterface) class vpc.doovos.DobjectLocator (implements java.lang.Comparable, vpc.doovos.Dconstants, vpc.doovos.util.Deductive, java.io.Serializable) class vpc.doovos.DobjectLocator.Tokenizer class vpc.doovos.util.DobjectLocatorFactory class vpc.doovos.util.DobjectLocatorFactory.Double_Matcher (implements vpc.doovos.util.Matcher) class vpc.doovos.util.DobjectLocatorFactory.Reverse_Matcher (implements vpc.doovos.util.Matcher) class vpc.doovos.util.DobjectLocatorFactory.Simple_Matcher (implements vpc.doovos.util.Matcher) class vpc.doovos.tool.Doovos class vpc.doovos.Dsystem (implements vpc.doovos.Dconstants) class com.mortbay.HTML.Element class com.mortbay.HTML.Composite class com.mortbay.HTML.Block class com.mortbay.HTML.Table class vpc.www.html.EasyTable class vpc.doovos.util.FileFactory class vpc.doovos.util.FileFactory.ByName (implements java.io.FilenameFilter) class vpc.doovos.util.FilterFactory class vpc.doovos.util.FilterFactory.ByClass (implements vpc.doovos.DobjectFilter) class vpc.doovos.util.FilterFactory.ByLocation (implements vpc.doovos.DobjectFilter) class vpc.doovos.util.FilterFactory.Collection_AND (implements vpc.doovos.DobjectFilter) class vpc.doovos.util.FilterFactory.Collection_OR (implements vpc.doovos.DobjectFilter) class vpc.doovos.util.FilterFactory.NoFilter (implements vpc.doovos.DobjectFilter) class vpc.doovos.util.FilterFactory.SupervisedBy (implements vpc.doovos.DobjectFilter) class vpc.doovos.util.FilterFactory.Supervisor (implements vpc.doovos.DobjectFilter) class vpc.doovos.util.Grep class vpc.doovos.tool.Handler_Generator class vpc.doovos.util.Lock class vpc.doovos.OperationEvent (implements java.io.Serializable) Ecole Nationale des Sciences de l’Informatique de Tunisie 77 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA class vpc.doovos.util.OUT class vpc.doovos.util.Parser class vpc.doovos.tool.JHTML_Generator class vpc.doovos.tool.TemplateGenerator class vpc.doovos.Permissions (implements vpc.doovos.Dconstants, java.io.Serializable) class vpc.doovos.Permissions.Entry (implements java.io.Serializable) class java.rmi.server.RemoteObject (implements java.rmi.Remote, java.io.Serializable) class java.rmi.server.RemoteServer class java.rmi.server.UnicastRemoteObject class vpc.doovos.system.ExportedMaster (implements vpc.doovos.Dconstants, vpc.doovos.system.ExportedMasterInterface, java.io.Serializable) class vpc.doovos.system.ExportedSlave (implements vpc.doovos.Dconstants, vpc.doovos.system.ExportedSystemInterface, java.io.Serializable) class vpc.doovos.util.RenderingManager class vpc.doovos.util.SimpleRenderer (implements javax.swing.Renderer) class vpc.doovos.util.StreamTranslator class vpc.doovos.util.StringComparator (implements java.util.Comparator) class java.lang.Thread (implements java.lang.Runnable) class vpc.doovos.system.AbstractSystemManager.AutoSaveThread class java.lang.Throwable (implements java.io.Serializable) class java.lang.Exception class vpc.doovos.util.AlreadyLockedException class vpc.doovos.DoovosGeneralFailureException class vpc.doovos.util.WClass class vpc.doovos.util.WDeductive class vpc.doovos.util.WException class vpc.doovos.util.Wizard (implements vpc.doovos.Dconstants) class vpc.doovos.util.WNumber class vpc.doovos.util.Wrmi class vpc.doovos.util.WString class vpc.doovos.util.WString.Formatter (implements vpc.doovos.util.WString.FormatterInterface) Hiérarchie des interfaces interface java.lang.Cloneable interface vpc.doovos.util.Deductive(also extends java.io.Serializable) interface vpc.doovos.util.DeductiveFactory.CollectionInterface interface vpc.doovos.util.ReverseDeductive interface vpc.doovos.Dconstants interface vpc.doovos.DcontainerInterface interface vpc.doovos.DdirectoryInterface(also extends vpc.doovos.DresourceInterface) interface vpc.doovos.DdomainInterface(also extends vpc.doovos.DauthentificatorInterface) interface vpc.doovos.system.LocalSystemManagerInterface interface vpc.doovos.util.Matcher interface vpc.doovos.util.ParsableAsStringInterface interface java.rmi.Remote interface vpc.doovos.DobjectInterface(also extends java.io.Serializable) interface vpc.doovos.DauthentificatorInterface interface vpc.doovos.DdomainInterface(also extends vpc.doovos.DcontainerInterface) interface vpc.doovos.DgroupInterface interface vpc.doovos.DuserInterface interface vpc.doovos.DresourceInterface interface vpc.doovos.DdirectoryInterface(also extends vpc.doovos.DcontainerInterface) interface vpc.doovos.DfileInterface interface vpc.doovos.BytesFileInterface interface vpc.doovos.KnowledgeBaseInterface interface vpc.doovos.ObjectFileInterface interface vpc.doovos.system.ExportedSystemInterface interface vpc.doovos.system.ExportedMasterInterface interface vpc.doovos.util.RenderedObjectInterface Ecole Nationale des Sciences de l’Informatique de Tunisie 78 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA interface java.io.Serializable interface vpc.doovos.util.Deductive(also extends java.lang.Cloneable) interface vpc.doovos.util.DeductiveFactory.CollectionInterface interface vpc.doovos.util.ReverseDeductive interface vpc.doovos.DobjectFilter interface vpc.doovos.DobjectInterface(also extends java.rmi.Remote) interface vpc.doovos.DauthentificatorInterface interface vpc.doovos.DdomainInterface(also extends vpc.doovos.DcontainerInterface) interface vpc.doovos.DgroupInterface interface vpc.doovos.DuserInterface interface vpc.doovos.DresourceInterface interface vpc.doovos.DdirectoryInterface(also extends vpc.doovos.DcontainerInterface) interface vpc.doovos.DfileInterface interface vpc.doovos.BytesFileInterface interface vpc.doovos.KnowledgeBaseInterface interface vpc.doovos.ObjectFileInterface interface vpc.www.servlet.SubServletInterface interface vpc.doovos.util.WString.FormatterInterface Ecole Nationale des Sciences de l’Informatique de Tunisie 79 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 13 Annexe B : Comparatif entre moteurs de Servlets Le magazine Allemand "iX Magazine" a réalisé un comparatif entre 6 moteurs de Servlet (servlet Engine) ServletExec 2.2 (sur Apache 1.3.9) Jetty 2.2.4 Java Webserver 2.0 Jserv 1.0 (sur Apache 1.3.6) Jigsaw 2.0.3 JRun Pro 2.3.2 (sur Apache 1.3.6) Les résultats sont à interpréter en nombre maximum atteint des requêtes par seconde indépendamment du protocole (FTP,HTTP…). Server Jetty 2.2.4 Jigsaw 2.0.3 Java Webserver 2.0 JSERV 1.0 JRUN PRO 2.3.2 Servlet Exec 2.2 FileServlet with FileServlet Contentwithout ContentLength set Length header 189 210 181 184 HelloWorld servlet APIMethodTe st Servlet 250 262 175 137 166 152 105 174 93 91 104 99 68 72 115 72 54 53 70 67 Discussion: On remarqu’alors que les serveur 100% java sont 2 fois plus rapides, Jetty étant (en somme) le plus rapide (quoi que Jigsaw soit arrivé à le surpasser avec "Hello world"). Ecole Nationale des Sciences de l’Informatique de Tunisie 80 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes 14 Annexe C : utilisation de l’API exemple INRIA doovos, Voici un exemple de l’utilisation de l’API developpée. Il permet de lister récursivement le contenu du repertoire root.esclave1.Kbrep et de changer les permissions de la ressource root.esclave1.Kbrep.kb1 Une numérotation des lignes a été ajoutée par soucis de clarté 1. Dsystem.setSystem(new MonoClientSystemManager()); 2. Dconnection moi = Dsystem.connect(‘superdomain.mondomaine.monNom’, ’monMot2Passe’); 3. DdirectoryInterface KBrep = Dsystem.getObjectCopy(‘root.esclave1.KBrep’); 4. Collection toutesLesBases = KBrep.list(moi,NO_FILTER,true); 5. KnowledgeBaseInterface kb1 = Dsystem.getObject(‘root.esclave1.Kbrep.kb1’); 6. kb1.setPermissions(moi, ‘-.(user)Ali’, ’read’, true); 7. Dsystem.freeObject(kb1); 8. Dsystem.disconnect(moi); 9. Dsystem.unsetSystem(); Le scénario est le suivant : D’abord, on se déclare comme étant un client en mono-utilisateur (donc au niveau de cette application on ne peut pas avoir deux utilisateurs qui ont accès au système en même temps) (1). Cela permet au système local de s’initialiser. En l’occurrence, contacter le Maître et réaliser la communication. Cette opération est réalisée une seule fois au niveau de l’application. Ensuite (2), pour ouvrir une session (pour accéder au ressources du système), on se logge en donnant l’identificateur complet de l’utilisateur ainsi que son mot de passe. On récupère alors un objet temporaire (moi) permettant de bénéficier des droits qui sont accordée à cet utilisateur. Puis, pour lister le contenu du répertoire KBrep(3), il suffit d’en demander une copie au système local (Attention : elle peut ne pas être à jour), puis d’appliquer la méthode list sur l’objet obtenu (4). Les paramètres de cette méthode indiquent, dans l’ordre, l’utilisateur qui désire réaliser l’action, le modèle que doit vérifier une ressource de KBrep pourqu’elle sot listée (ici toutes les entrées peuvent être listée à condition que les permissions le permette) et si le listing doit se faire récursivement (lister aussi le contenu des sous répertoires vérifiant le filtre). Au niveau de (5), on obtient une référence ‘live’ root.esclave1.Kbrep.kb1’ c’est à dire qui est forcément à jour et qu’on peut réellement modifier à distance. Ainsi, au niveau de Ecole Nationale des Sciences de l’Informatique de Tunisie 81 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA (7), les permissions pourraient être changée (s’il y a droit) pour accorder les permissions de lire cette ressource à tout utilisateur nommé Ali. Il est essentiel de noter que Kb1 doit être libéré explicitement (7). Ce qui n’est pas le cas de KBrep qui est juste une copie. Ensuite, on doit se déconnecter(8) pour éventuellement ouvrir une nouvelle session sous un autre nom. Avant de quitter l’application, il faut libérer le système(9) ce qui revient à l’interruption de toute communication avec le Maître. Ecole Nationale des Sciences de l’Informatique de Tunisie 82 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA 15 Annexe D : configuration des Serveurs, exemple Les serveurs Maître, et Esclaves peuvent être configurés grâce à plusieurs propriétés. Cela permet par exemple de limiter le nombre d’objets qu’on peut importer ou qu’on peut exporter par crainte que le processus Serveur utilise trop de ressources système (mémoire). Cela permet également de paramétrer les adresses réseau du serveur, les ports utilisées, etc., nécessaires à la communication. Ainsi, la propriété cachedObjects.maxObjects donne le nombre maximum des objets en cache. La configuration peut se faire au niveau du code, grâce à la méthode Dsystem.setProperties(…) ; Ou plus souplement dans un fichier sous forme d’une suite de nom=valeur Ce qui suit est un fichier de configuration du serveur Maître donné à titre d’exemple. Notons, seulement que plusieurs propriétés sont commentées. Elles indiquent les valeurs par défaut. ##### the name of the system ## it must correspond to the "rmi.master.name" entry of a Client ## and/or Slave configuration file ## name=master ##### the remote location in which all remote objects ## will be looked for. ## it must correspond to the "rmi.master" entry of a Client ## and/or Slave configuration file ## rmi=rmi://comete:7799 ##### the remote identifiers of the basic objects exported by the master ## it will be more secure if they are not significative! ## rmi.name=master rmi.superuser=superuser rmi.guest=guest rmi.supergroup=supergroup rmi.nogroup=nogroup rmi.superdomain=superdomain rmi.root=root ## other possible options ##### the root directory for all serialized objects ## #serialisation.root=. ##### name patterns for the serialized objects ## for example when serialisation.class.DdomainInterface=*.__D ## all DomainInterface objects will be serialized in files with ## extension .__D ## Ecole Nationale des Sciences de l’Informatique de Tunisie 83 Conception & réalisation d’un outil sécurisé pour la gestion des ressources distribuées sur Internet : Application au pilotage de programmes INRIA #serialisation.class.DdomainInterface=*.__D #serialisation.class.DuserInterface=*.__U #serialisation.class.DgroupInterface=*.__G ##### when an object is serialized as a directory, a file with ## the following pattern will contains the serialized form of ## that object. This file will be directly in the directory ## #serialisation.dirinfo=.__I ##### limits for the object tables ## -1 means there is no limit ## example cachedObjects.maxObjects=30 means that the cached object ## is limited to 30 ## #importedObjects.maxObjects=-1 #exportedObjects.maxObjects=-1 #liveObjects.maxObjects=-1 #cachedObjects.maxObjects=30 ##### the period for auto saving objects ## it is considered in milliseconds (a long) ## #autoSaveThread.sleepingPeriod=300000 Ecole Nationale des Sciences de l’Informatique de Tunisie 84