FSSB عبارة عن صندوق حماية لنظام الملفات الخاص بك. باستخدامه، يمكنك تشغيل أي برنامج والتأكد من عدم تعديل أي من ملفاتك بأي شكل من الأشكال. ومع ذلك، لن يعرف البرنامج ذلك - فكل تغيير يحاول إجراؤه سيتم إجراؤه بأمان في وضع الحماية مع السماح له بقراءة الملفات الموجودة. يتضمن ذلك إنشاء الملفات وتعديلها وإعادة تسميتها وحذفها.
التطبيقات لا حصر لها:
يرجى ملاحظة أن FSSB لا يزال في مرحلة ألفا. راجع قسم Contributing
إذا كنت ترغب في المساهمة.
FSSB هو تطبيق خفيف الوزن للغاية. لا يتطلب الكثير من التبعيات. في معظم الأنظمة، تحتاج فقط إلى تثبيت مكتبة openssl
C. وبعد ذلك يمكنك تشغيل:
$ make
لتوليد fssb
ثنائي.
تم تصميم FSSB مع وضع البساطة في الاعتبار. فقط افعل:
$ ./fssb -- < program > < args >
لتشغيل البرنامج في بيئة آمنة وموثوقة ومعزولة.
على سبيل المثال، لنفترض أن لدينا برنامج 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
عادةً، يؤدي تشغيل python program.py
إلى ملف:
$ python program.py
Hello world !
سيؤدي هذا بالطبع إلى إنشاء ملف:
$ cat new_file
Hello world!
ومع ذلك، إذا قمت بتشغيله ملفوفًا حول FSSB:
$ ./fssb -m -- python program.py
Hello world !
fssb: child exited with 0
fssb: sandbox directory: /tmp/fssb-1
+ 25fa8325e4e0eb8180445e42558e60bd = new_file
سترى أنه لم يتم إنشاء أي ملف:
$ cat new_file
cat: new_file: No such file or directory
بدلاً من ذلك، يتم إنشاء الملف فعليًا في وضع الحماية:
$ cat /tmp/fssb-1/25fa8325e4e0eb8180445e42558e60bd
Hello world !
وأفضل ما في الأمر هو أن البرنامج الفرعي قيد التشغيل لا يعرف حتى ذلك!
يمكنك تشغيل ./fssb -h
لرؤية المزيد من الخيارات.
في Linux، تتم كل عملية لكل برنامج (حسنًا، ليس كل عملية، معظمها) في الواقع من خلال ما يسمى استدعاء النظام - أو syscall للاختصار. الأمر open
في Python هو في الواقع أمر fopen
مكتوب بلغة C في طبقة أدناه، وهو في الواقع عبارة عن استدعاء نظام يسمى open
(يتم تغليفه بواسطة glibc
).
يعترض FSSB مكالمات النظام هذه قبل تنفيذها فعليًا. على سبيل المثال، قبل إجراء استدعاء النظام open
، يتم إيقاف البرنامج. الآن، كل من هذه syscalls لها الحجج. على سبيل المثال، قد يبدو fopen("new_file", "w")
في لغة C كما يلي:
open("new_file", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
الوسيطة الأولى هي اسم الملف، والثانية هي الأعلام، والثالثة هي الوضع. لمعرفة المزيد حول هذه الأمور، قم بتشغيل man -s 2 open
.
يمكن أن يحتوي كل استدعاء نظام على 6 وسيطات على الأكثر - يتم تعيين هذه الوسيطات لستة سجلات لوحدة المعالجة المركزية، كل منها يحمل قيمة. في المثال أعلاه، قبل تنفيذ استدعاء النظام open
، يحتفظ السجل الأول بعنوان ذاكرة يشير إلى سلسلة "new_file"
.
على أي حال، قبل تنفيذ استدعاء النظام مباشرة، يقوم FSSB بتبديل السلسلة إلى شيء آخر - إلى اسم ملف في وضع الحماية. ثم دع syscall يستمر. بالنسبة لوحدة المعالجة المركزية، لقد طلبت بشكل أساسي إنشاء ملف في وضع الحماية. هكذا يحدث.
ثم بعد انتهاء استدعاء النظام مباشرة (بعد إنشاء الملف)، يقوم FSSB بتبديل القيمة إلى قيمتها الأصلية. الآن، أصبحت مكالمات النظام منخفضة المستوى جدًا. ونحن نعمل على جانبي syscall - قبل وبعد تنفيذه مباشرة. لذا فإن البرنامج ليس لديه طريقة لمعرفة أن الملف قد تم إنشاؤه بالفعل في وضع الحماية. يتم تنفيذ كل عملية لاحقة فعليًا على ملف وضع الحماية.
وهذا لا يزال في مرحلته ألفا. هناك الكثير من طلبات النظام - في الوقت الحالي، يوجد دعم لوضع الحماية لما يلي:
لا يزال هناك الكثير من الأشياء للقيام بها. وأنا أقدر حقًا المساعدة هنا. لقد حاولت أن أجعل الكود سهل القراءة للغاية من خلال الكثير من التعليقات والوثائق لما يفعله كل شيء.
وبالطبع، قمت بتطبيق هذا فقط لنظام التشغيل x86_64 الخاص بي. سأكون ممتنًا جدًا لأي مساعدة إذا تمكن شخص ما من جعل هذا قابلاً للنقل إلى أقواس أخرى (يرجى إلقاء نظرة على ملف syscalls.h
لهذا الغرض).
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 .
راجع ملف الترخيص لمزيد من التفاصيل.