FSSB es un entorno limitado para su sistema de archivos. Con él, puedes ejecutar cualquier programa y estar seguro de que ninguno de tus archivos se modifica de ninguna manera. Sin embargo, el programa no lo sabrá: cada cambio que intente realizar se realizará de forma segura en una zona de pruebas y al mismo tiempo le permitirá leer los archivos existentes. Esto incluye crear, modificar, cambiar el nombre y eliminar archivos.
Las aplicaciones son infinitas:
Tenga en cuenta que FSSB todavía está en alfa. Consulte la sección Contributing
si desea contribuir.
FSSB es una aplicación muy ligera. No requiere demasiadas dependencias. En la mayoría de los sistemas, sólo necesita instalar la biblioteca C openssl
. Y luego, puedes ejecutar:
$ make
para generar un fssb
binario.
FSSB está diseñado pensando en la simplicidad. Solo haz:
$ ./fssb -- < program > < args >
para ejecutar el programa en un entorno seguro, confiable y protegido.
Por ejemplo, digamos que tenemos un programa 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
Normalmente, ejecutar python program.py
daría como resultado un archivo:
$ python program.py
Hello world !
Esto, por supuesto, habría creado un archivo:
$ cat new_file
Hello world!
Sin embargo, si lo ejecuta envuelto alrededor de FSSB:
$ ./fssb -m -- python program.py
Hello world !
fssb: child exited with 0
fssb: sandbox directory: /tmp/fssb-1
+ 25fa8325e4e0eb8180445e42558e60bd = new_file
Verás que no hay ningún archivo creado:
$ cat new_file
cat: new_file: No such file or directory
En cambio, el archivo se crea en un entorno limitado:
$ cat /tmp/fssb-1/25fa8325e4e0eb8180445e42558e60bd
Hello world !
¡Y la mejor parte es que el programa secundario en ejecución ni siquiera lo sabe!
Puede ejecutar ./fssb -h
para ver más opciones.
En Linux, cada operación de cada programa (bueno, no todas las operaciones; la mayoría) en realidad se realiza a través de algo llamado llamada al sistema, o syscall para abreviar. El comando open
en Python es en realidad un comando fopen
escrito en C una capa debajo, que en realidad es una llamada al sistema llamada open
(está envuelta por glibc
).
FSSB intercepta estas llamadas al sistema antes de que realmente se realicen. Por ejemplo, justo antes de realizar la llamada al sistema open
, el programa se detiene. Ahora, cada una de estas llamadas al sistema tiene argumentos. Por ejemplo, un fopen("new_file", "w")
en C puede verse así:
open("new_file", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
El primer argumento es el nombre del archivo, el segundo son las banderas y el tercero es el modo. Para obtener más información sobre estos, ejecute man -s 2 open
.
Cada llamada al sistema puede tener como máximo 6 argumentos; estos se asignan a seis registros de CPU, cada uno de los cuales contiene un valor. En el ejemplo anterior, justo antes de ejecutar la llamada al sistema open
, el primer registro contiene una dirección de memoria que apunta a una cadena "new_file"
.
De todos modos, justo antes de que se ejecute la llamada al sistema, FSSB cambia la cadena a otra cosa: a un nombre de archivo en la zona de pruebas. Y luego deja que continúe la llamada al sistema. A la CPU, básicamente le pidió que creara un archivo en la zona de pruebas. Así es.
Luego, justo después de que finaliza la llamada al sistema (después de crear el archivo), FSSB cambia el valor a su valor original. Ahora, las llamadas al sistema son de nivel bastante bajo. Y estamos operando en ambos lados de una llamada al sistema, justo antes y después de su ejecución. Por lo tanto, el programa no tiene forma de saber que el archivo realmente se creó en el entorno limitado. Cada operación posterior se realiza en realidad en el archivo sandbox.
Esto todavía se encuentra en su etapa alfa. Hay tantas llamadas al sistema; por el momento, hay soporte para sandboxing de:
Todavía hay muchas cosas por hacer. Y realmente agradecería la ayuda aquí. Intenté hacer que el código fuera muy legible con muchísimos comentarios y documentación sobre lo que hace cada cosa.
Y, por supuesto, solo implementé esto para mi sistema Linux x86_64. Agradecería mucho cualquier ayuda si alguien pudiera hacer esto portátil para otros arcos (eche un vistazo al archivo syscalls.h
para esto).
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 .
Consulte el archivo de LICENCIA para obtener más detalles.