|
@@ -0,0 +1,43 @@
|
|
|
+# Points à détailler pour la sandbox
|
|
|
+
|
|
|
+Le sandboxing consiste à isoler les différentes parties de l'application, de
|
|
|
+préférence par zone de privilèges et possibilité d'accès à des ressources, mais
|
|
|
+également à limiter l'accès à ces ressources. Deux fils d'exécutions qui ont
|
|
|
+chacun accès à un fichier en particulier doivent être isolés l'un de l'autre.
|
|
|
+
|
|
|
+Le code et projet réalisé ne correspond pas exactement à une sandbox elle-même
|
|
|
+mais à l'architecture mise en place afin de pouvoir l'implémenter. Même si Linux
|
|
|
+permet d'appliquer certaines règles de sandboxing à des threads, il faut garder
|
|
|
+en tête qu'un thread partage le même espace mémoire que les autres thread du
|
|
|
+processus, et qu'il n'est donc pas envisageable de baser l'isolation là dessus.
|
|
|
+
|
|
|
+Le projet a donc constitué à modifier l'architecture existante de façon à passer
|
|
|
+d'un modèle multithread à un modèle multiprocessus comprenant les besoins
|
|
|
+expliqués au dessus. Dans la suite du document, chaque choix d'architecture sera
|
|
|
+apprécié à travers ce cadre-là et comparé à des solutions existantes pour chacun
|
|
|
+des problèmes qui en est sorti.
|
|
|
+
|
|
|
++ Architecture broker vs architecture non broker
|
|
|
++ Zygote
|
|
|
++ Passage de descripteur de fichier entre processus
|
|
|
++ Gestion de messages asynchrones
|
|
|
++ Gestion de la boucle événementielle
|
|
|
+
|
|
|
+Pas pris en compte :
|
|
|
+
|
|
|
++ Le sandboxing lui-même
|
|
|
++ Les défaillances arrivant dans un programme distribué
|
|
|
+
|
|
|
+# Prérequis sandbox
|
|
|
+
|
|
|
+La première partie du document sera tournée vers Linux, même si le travail a été
|
|
|
+effectué en prenant en considération les limitations de Windows également. Il
|
|
|
+nous faut donc rappeler certains points de l'API Linux qui seront utilisés dans
|
|
|
+la suite, tout comme il faut décrire ce que VLC a besoin de faire dans
|
|
|
+l'architecture que je construis.
|
|
|
+
|
|
|
+Le principal de l'architecture actuelle de VLC est organisé autour de la notion
|
|
|
+de module. D'un côté, le core contrôle le chargement des fonctionnalités et joue
|
|
|
+un rôle d'orchestrateur. De l'autre côté chaque fonctionnalité est apportée par
|
|
|
+un module qui peut être chargé dynamiquement ou lié statiquement à
|
|
|
+l'application.
|