FSSB adalah kotak pasir untuk sistem file Anda. Dengannya, Anda dapat menjalankan program apa pun dan yakinlah bahwa tidak ada file Anda yang diubah dengan cara apa pun. Namun, program tidak akan mengetahui hal ini - setiap perubahan yang dilakukannya akan dilakukan dengan aman di kotak pasir sambil tetap mengizinkannya membaca file yang ada. Ini termasuk membuat, memodifikasi, mengganti nama, dan menghapus file.
Aplikasinya tidak terbatas:
Perlu diketahui bahwa FSSB masih dalam tahap alpha. Lihat bagian Contributing
jika Anda ingin berkontribusi.
FSSB adalah aplikasi yang sangat ringan. Itu tidak memerlukan terlalu banyak ketergantungan. Pada sebagian besar sistem, Anda hanya perlu menginstal pustaka openssl
C. Dan kemudian, Anda dapat menjalankan:
$ make
untuk menghasilkan fssb
biner.
FSSB dirancang dengan mempertimbangkan kesederhanaan. Lakukan saja:
$ ./fssb -- < program > < args >
untuk menjalankan program di lingkungan sandbox yang aman, dapat diandalkan.
Misalnya, kita memiliki program 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
Biasanya, menjalankan python program.py
akan menghasilkan file:
$ python program.py
Hello world !
Ini, tentu saja, akan menghasilkan file:
$ cat new_file
Hello world!
Namun, jika Anda menjalankannya di sekitar FSSB:
$ ./fssb -m -- python program.py
Hello world !
fssb: child exited with 0
fssb: sandbox directory: /tmp/fssb-1
+ 25fa8325e4e0eb8180445e42558e60bd = new_file
Anda akan melihat bahwa tidak ada file yang dibuat:
$ cat new_file
cat: new_file: No such file or directory
Sebaliknya, file tersebut sebenarnya dibuat di kotak pasir:
$ cat /tmp/fssb-1/25fa8325e4e0eb8180445e42558e60bd
Hello world !
Dan bagian terbaiknya adalah, program anak yang sedang berjalan bahkan tidak mengetahuinya!
Anda dapat menjalankan ./fssb -h
untuk melihat opsi lainnya.
Di Linux, setiap operasi program (yah, tidak setiap operasi; sebagian besar) sebenarnya dilakukan melalui sesuatu yang disebut panggilan sistem - atau disingkat syscall. Perintah open
di Python sebenarnya adalah perintah fopen
yang ditulis dalam C pada lapisan di bawahnya, yang sebenarnya adalah syscall yang disebut open
(ini dibungkus dengan glibc
).
FSSB mencegat syscall ini sebelum benar-benar dijalankan. Misalnya sebelum syscall open
dilakukan, program dihentikan. Sekarang, masing-masing syscall memiliki argumen. Misalnya, fopen("new_file", "w")
di C mungkin terlihat seperti:
open("new_file", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
Argumen pertama adalah nama file, argumen kedua adalah flag, dan argumen ketiga adalah mode. Untuk mempelajari lebih lanjut tentang ini, jalankan man -s 2 open
.
Setiap syscall dapat memiliki paling banyak 6 argumen - argumen ini dipetakan ke enam register CPU, yang masing-masing memiliki nilai. Dalam contoh di atas, tepat sebelum syscall open
dijalankan, register pertama menyimpan alamat memori yang menunjuk ke string "new_file"
.
Lagi pula, sebelum syscall dijalankan, FSSB mengalihkan string ke sesuatu yang lain - ke nama file di kotak pasir. Dan kemudian biarkan syscall berjalan. Ke CPU, pada dasarnya Anda diminta untuk membuat file di kotak pasir. Jadi memang begitu.
Kemudian setelah syscall selesai (setelah file dibuat), FSSB mengalihkan nilainya ke nilai aslinya. Sekarang, syscall berada pada level yang cukup rendah. Dan kami beroperasi di kedua sisi syscall - sebelum dan sesudah eksekusinya. Jadi program tidak memiliki cara untuk mengetahui bahwa file tersebut sebenarnya dibuat di sandbox. Setiap operasi selanjutnya sebenarnya dilakukan pada file sandbox.
Ini masih dalam tahap alpha. Ada begitu banyak syscall - saat ini, ada dukungan untuk sandboxing:
Masih banyak hal yang harus dilakukan. Dan saya sangat menghargai bantuan di sini. Saya telah mencoba membuat kodenya sangat mudah dibaca dengan banyak komentar dan dokumentasi tentang fungsi setiap hal.
Dan tentu saja, saya hanya menerapkan ini untuk sistem linux x86_64 saya. Saya akan sangat menghargai bantuan apa pun jika seseorang dapat menjadikan ini portabel untuk arch lain (silakan lihat file syscalls.h
untuk ini).
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 <http://www.gnu.org/licenses/>.
Lihat file LISENSI untuk lebih jelasnya.