FSSB est un bac à sable pour votre système de fichiers. Avec lui, vous pouvez exécuter n'importe quel programme et être assuré qu'aucun de vos fichiers n'est modifié de quelque manière que ce soit. Cependant, le programme ne le saura pas : chaque modification qu'il tentera d'apporter sera effectuée en toute sécurité dans un bac à sable tout en lui permettant de lire les fichiers existants. Cela inclut la création, la modification, le renommage et la suppression de fichiers.
Les applications sont infinies :
Veuillez noter que FSSB est toujours en version alpha. Consultez la section Contributing
si vous souhaitez contribuer.
FSSB est une application très légère. Cela ne nécessite pas trop de dépendances. Sur la plupart des systèmes, il vous suffit d'installer la bibliothèque openssl
C. Et puis, vous pouvez exécuter :
$ make
pour générer un fssb
binaire.
FSSB est conçu dans un souci de simplicité. Faites simplement :
$ ./fssb -- < program > < args >
pour exécuter le programme dans un environnement sécurisé et fiable en mode bac à sable.
Par exemple, disons que nous avons un programme Python program.py
:
with open ( "new_file" , "w" ) as f : # create a new file in the current directory
f . write ( "Hello world!" ) # write something
with open ( "new_file" , "r" ) as f : # read the same file later on
print ( f . read ()) # print the contents to console
Normalement, l'exécution de python program.py
donnerait un fichier :
$ python program.py
Hello world !
Bien entendu, cela aurait créé un fichier :
$ cat new_file
Hello world!
Cependant, si vous l'exécutez autour de FSSB :
$ ./fssb -m -- python program.py
Hello world !
fssb: child exited with 0
fssb: sandbox directory: /tmp/fssb-1
+ 25fa8325e4e0eb8180445e42558e60bd = new_file
vous verrez qu'aucun fichier n'a été créé :
$ cat new_file
cat: new_file: No such file or directory
Au lieu de cela, le fichier est en fait créé dans un bac à sable :
$ cat /tmp/fssb-1/25fa8325e4e0eb8180445e42558e60bd
Hello world !
Et le meilleur, c'est que le programme pour enfants en cours d'exécution n'est même pas au courant !
Vous pouvez exécuter ./fssb -h
pour voir plus d'options.
Sous Linux, chaque opération de chaque programme (enfin, pas toutes les opérations ; la plupart) est en fait effectuée via ce qu'on appelle un appel système - ou syscall en abrégé. La commande open
en Python est en fait une commande fopen
écrite en C une couche ci-dessous, qui est en fait un appel système appelé open
(cela est enveloppé par glibc
).
FSSB intercepte ces appels système avant qu'ils ne soient réellement exécutés. Par exemple, juste avant l'exécution de l'appel système open
, le programme est arrêté. Désormais, chacun de ces appels système a des arguments. Par exemple, un fopen("new_file", "w")
en C peut ressembler à :
open("new_file", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
Le premier argument est le nom du fichier, le deuxième les drapeaux et le troisième le mode. Pour en savoir plus, exécutez man -s 2 open
.
Chaque appel système peut avoir au plus 6 arguments - ceux-ci correspondent à six registres CPU, chacun contenant une valeur. Dans l'exemple ci-dessus, juste avant l'exécution de l'appel système open
, le premier registre contient une adresse mémoire pointant vers une chaîne "new_file"
.
Quoi qu'il en soit, juste avant l'exécution de l'appel système, FSSB remplace la chaîne par autre chose - par un nom de fichier dans le bac à sable. Et puis laissez l'appel système continuer. Au processeur, vous avez essentiellement demandé de créer un fichier dans le bac à sable. C’est donc le cas.
Ensuite, juste après la fin de l'appel système (après la création du fichier), FSSB ramène la valeur à sa valeur d'origine. Désormais, les appels système sont de niveau assez bas. Et nous opérons des deux côtés d’un appel système – juste avant et après son exécution. Le programme n’a donc aucun moyen de savoir que le fichier a réellement été créé dans le bac à sable. Chaque opération ultérieure est réellement effectuée sur le fichier sandbox.
Celui-ci en est encore à sa phase alpha. Il y a tellement d'appels système - pour le moment, le sandboxing est pris en charge pour :
Il y a encore beaucoup de choses à faire. Et j'apprécierais vraiment de l'aide ici. J'ai essayé de rendre le code très lisible avec une multitude de commentaires et de documentation sur ce que fait chaque chose.
Et bien sûr, je n'ai implémenté cela que pour mon système Linux x86_64. J'apprécierais grandement toute aide si quelqu'un pouvait rendre cela portable sur d'autres arches (veuillez jeter un œil au fichier syscalls.h
pour cela).
FSSB - Filesystem Sandbox for Linux
Copyright (C) 2016 Adhityaa Chandrasekar
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
Voir le fichier LICENSE pour plus de détails.