FSSB ist eine Sandbox für Ihr Dateisystem. Damit können Sie jedes Programm ausführen und sicher sein, dass keine Ihrer Dateien in irgendeiner Weise verändert wird. Das Programm wird dies jedoch nicht wissen – jede Änderung, die es vorzunehmen versucht, wird sicher in einer Sandbox vorgenommen, während es weiterhin bestehende Dateien lesen kann. Dazu gehört das Erstellen, Ändern, Umbenennen und Löschen von Dateien.
Die Anwendungen sind endlos:
Bitte beachten Sie, dass sich FSSB noch in der Alpha-Phase befindet. Schauen Sie sich den Abschnitt Contributing
an, wenn Sie einen Beitrag leisten möchten.
FSSB ist eine sehr leichte Anwendung. Es sind nicht allzu viele Abhängigkeiten erforderlich. Auf den meisten Systemen müssen Sie lediglich die openssl
-C-Bibliothek installieren. Und dann können Sie Folgendes ausführen:
$ make
um ein binäres fssb
zu generieren.
FSSB ist auf Einfachheit ausgelegt. Tun Sie einfach:
$ ./fssb -- < program > < args >
um das Programm in einer sicheren, zuverlässigen Sandbox-Umgebung auszuführen.
Angenommen, wir haben ein Python-Programm 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
Normalerweise würde die Ausführung python program.py
zu einer Datei führen:
$ python program.py
Hello world !
Dies hätte natürlich eine Datei erstellt:
$ cat new_file
Hello world!
Wenn Sie es jedoch um FSSB herum ausführen:
$ ./fssb -m -- python program.py
Hello world !
fssb: child exited with 0
fssb: sandbox directory: /tmp/fssb-1
+ 25fa8325e4e0eb8180445e42558e60bd = new_file
Sie werden sehen, dass keine Datei erstellt wurde:
$ cat new_file
cat: new_file: No such file or directory
Stattdessen wird die Datei tatsächlich in einer Sandbox erstellt:
$ cat /tmp/fssb-1/25fa8325e4e0eb8180445e42558e60bd
Hello world !
Und das Beste daran ist, dass das laufende Kinderprogramm nicht einmal davon weiß!
Sie können ./fssb -h
ausführen, um weitere Optionen anzuzeigen.
Unter Linux wird jede Operation jedes Programms (naja, nicht jede Operation; die meisten) tatsächlich über einen sogenannten Systemaufruf – oder kurz Syscall – ausgeführt. Der open
-Befehl in Python ist eigentlich ein fopen
-Befehl, der in einer Ebene darunter in C geschrieben ist und eigentlich ein Systemaufruf namens open
ist (dieser wird von glibc
umschlossen).
FSSB fängt diese Systemaufrufe ab, bevor sie tatsächlich ausgeführt werden. Beispielsweise wird das Programm kurz vor der Ausführung des open
Systemaufrufs gestoppt. Nun hat jeder dieser Systemaufrufe Argumente. Beispielsweise könnte ein fopen("new_file", "w")
in C tatsächlich so aussehen:
open("new_file", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
Das erste Argument ist der Dateiname, das zweite sind die Flags, das dritte ist der Modus. Um mehr darüber zu erfahren, führen Sie man -s 2 open
aus.
Jeder Systemaufruf kann höchstens 6 Argumente haben – diese sind sechs CPU-Registern zugeordnet, die jeweils einen Wert enthalten. Im obigen Beispiel enthält das erste Register unmittelbar vor der Ausführung des open
Systemaufrufs eine Speicheradresse, die auf eine Zeichenfolge "new_file"
zeigt.
Wie auch immer, kurz bevor der Systemaufruf ausgeführt wird, ändert FSSB die Zeichenfolge in etwas anderes – in einen Dateinamen in der Sandbox. Und dann geht der Systemaufruf weiter. Für die CPU müssen Sie grundsätzlich eine Datei in der Sandbox erstellen. So ist es.
Unmittelbar nach Abschluss des Systemaufrufs (nachdem die Datei erstellt wurde) setzt FSSB den Wert auf seinen ursprünglichen Wert. Jetzt sind Systemaufrufe ziemlich niedrig. Und wir arbeiten auf beiden Seiten eines Systemaufrufs – kurz vor und nach seiner Ausführung. Das Programm hat also keine Möglichkeit zu erkennen, dass die Datei tatsächlich in der Sandbox erstellt wurde. Jeder nachfolgende Vorgang wird tatsächlich an der Sandbox-Datei ausgeführt.
Dies befindet sich noch im Alpha-Stadium. Es gibt so viele Systemaufrufe – derzeit gibt es Unterstützung für Sandboxing von:
Es gibt noch viel zu tun. Und ich würde mich hier wirklich über Hilfe freuen. Ich habe versucht, den Code mit zahlreichen Kommentaren und Dokumentationen zu den einzelnen Funktionen gut lesbar zu machen.
Und natürlich habe ich das nur für mein x86_64-Linux-System implementiert. Ich würde mich über jede Hilfe sehr freuen, wenn jemand dies auf andere Arches portierbar machen könnte (sehen Sie sich dazu bitte die Datei syscalls.h
an).
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 .
Weitere Einzelheiten finden Sie in der LICENSE-Datei.