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 !
และส่วนที่ดีที่สุดคือโครงการ Running Child ไม่รู้ด้วยซ้ำ!
คุณสามารถเรียกใช้ ./fssb -h
เพื่อดูตัวเลือกเพิ่มเติม
ใน Linux ทุกการทำงานของโปรแกรม (ไม่ใช่ทุกการดำเนินการ ส่วนใหญ่) จริงๆ แล้วเกิดขึ้นผ่านสิ่งที่เรียกว่าการเรียกของระบบ - หรือเรียกสั้น ๆ ว่า syscall คำสั่ง open
ใน Python จริงๆ แล้วเป็นคำสั่ง fopen
ที่เขียนด้วย C ในเลเยอร์ด้านล่าง ซึ่งจริงๆ แล้วคือ syscall ที่เรียกว่า open
(ซึ่งห่อด้วย glibc
)
FSSB จะสกัดกั้น syscalls เหล่านี้ก่อนที่จะดำเนินการจริง ตัวอย่างเช่น ก่อนดำเนินการ syscall open
โปรแกรมจะหยุดทำงาน ตอนนี้ แต่ละ syscalls เหล่านี้มีข้อโต้แย้ง ตัวอย่างเช่น fopen("new_file", "w")
ในภาษา C อาจมีลักษณะดังนี้:
open("new_file", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
อาร์กิวเมนต์แรกคือชื่อไฟล์ อาร์กิวเมนต์ที่สองคือแฟล็ก อาร์กิวเมนต์ที่สามคือโหมด หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับสิ่งเหล่านี้ ให้รัน man -s 2 open
แต่ละ syscall สามารถมีอาร์กิวเมนต์ได้สูงสุด 6 อาร์กิวเมนต์ - เหล่านี้จะแมปกับรีจิสเตอร์ CPU หกตัว ซึ่งแต่ละอาร์กิวเมนต์เก็บค่าไว้ ในตัวอย่างข้างต้น ก่อนที่จะดำเนินการ syscall open
การลงทะเบียนครั้งแรกจะเก็บที่อยู่หน่วยความจำที่ชี้ไปที่สตริง "new_file"
อย่างไรก็ตาม ก่อนดำเนินการ syscall FSSB จะสลับ สตริงเป็นอย่างอื่น - เป็นชื่อไฟล์ในแซนด์บ็อกซ์ จากนั้นปล่อยให้ syscall ดำเนินต่อไป สำหรับ CPU โดยทั่วไปแล้ว คุณขอให้สร้างไฟล์ในแซนด์บ็อกซ์ มันก็เป็นเช่นนั้น
จากนั้นหลังจากที่ syscall เสร็จสิ้น (หลังจากสร้างไฟล์แล้ว) FSSB จะเปลี่ยนค่าเป็นค่าดั้งเดิม ตอนนี้ syscalls ค่อนข้างต่ำ และเรากำลังดำเนินการทั้งสองด้านของ syscall - ก่อนและหลังการดำเนินการ ดังนั้นโปรแกรมจึงไม่มีทางรู้ได้ว่าไฟล์นั้นถูกสร้างขึ้นในแซนด์บ็อกซ์จริงๆ การดำเนินการต่อมาทุกครั้งจะดำเนินการจริงในไฟล์แซนด์บ็อกซ์
นี่ยังอยู่ในช่วงอัลฟ่า มี syscall มากมาย - ในขณะนี้ มีการรองรับแซนด์บ็อกซ์ของ:
ยังมีอะไรให้ทำอีกมากมาย และฉันขอขอบคุณความช่วยเหลือที่นี่มาก ฉันพยายามทำให้โค้ดสามารถอ่านได้ง่ายมาก โดยมีความคิดเห็นและเอกสารประกอบมากมายเกี่ยวกับสิ่งที่แต่ละอย่างทำ
และแน่นอน ฉันปรับใช้สิ่งนี้กับระบบ x86_64 linux ของฉันเท่านั้น ฉันขอขอบคุณความช่วยเหลืออย่างมากหากมีคนสามารถทำให้สิ่งนี้พกพาไปยังส่วนโค้งอื่น ๆ ได้ (โปรดดูไฟล์ 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 .
ดูไฟล์ใบอนุญาตสำหรับรายละเอียดเพิ่มเติม