
अविश्वसनीय कोड को होस्ट तक सुरक्षित पहुँच के साथ सैंडबॉक्स करें।
अविश्वसनीय कोड को होस्ट तक सुरक्षित पहुँच के साथ सैंडबॉक्स करें।
Chimera एक यूज़रस्पेस सैंडबॉक्स है उस कोड के लिए जिस पर आप पूरी तरह भरोसा नहीं करते — यह कोडिंग एजेंटों के लिए स्वाभाविक रूप से उपयुक्त है जो आपके साथ साझा की गई मशीन पर मनमाने, उत्पन्न कमांड चलाते हैं। यह किसी प्रक्रिया की होस्ट तक पहुँच को सीमित करता है, जबकि उसे होस्ट की फ़ाइलों और टूल्स तक पहुँचने देता है, ताकि कोड उपयोगी बना रहे लेकिन सिस्टम को दूषित करने के लिए स्वतंत्र न हो। चूंकि यह एक सामान्य प्रोग्राम के रूप में चलता है, Chimera को किसी VM, कंटेनर, विशेष हार्डवेयर, कर्नेल सुविधाओं या विशेषाधिकारों की आवश्यकता नहीं है — यह वहाँ काम करता है जहाँ आपका कोड पहले से चलता है।
यह समान-ISA डायनेमिक बाइनरी अनुवाद के माध्यम से अपरिवर्तित बायनेरिज़ को चलाकर, प्रत्येक गेस्ट सिस्टम कॉल को इंटरसेप्ट करके, सैंडबॉक्स द्वारा यह निर्णय लेने के लिए करता है कि वह क्या करता है। Chimera दो भागों में आता है: शेल में किसी प्रक्रिया को लपेटने के लिए एक chimera कमांड-लाइन टूल, और अपने प्रोग्राम में उसी रनटाइम को एम्बेड करने के लिए एक Rust लाइब्रेरी। एम्बेडर एक सिस्टम-कॉल हैंडलर प्रदान करते हैं जो तय करता है कि प्रत्येक गेस्ट syscall क्या करता है — इसे होस्ट कर्नेल को अग्रेषित करें, लॉग करें, या वर्चुअलाइज़ करें।
Chimera वर्तमान में Linux/x86 लक्ष्य का समर्थन करता है, जिसमें Darwin/arm64 पर कार्य-प्रगति पर पोर्ट है।
GitHub से chimera कमांड-लाइन टूल इंस्टॉल करें:
cargo install --git https://github.com/penberg/chimera chimera-cli
फिर किसी भी कमांड को लपेटें:
chimera run /bin/echo hello
डिफ़ॉल्ट रूप से Chimera प्रत्येक system call को होस्ट कर्नेल को अग्रेषित करता है, इसलिए लपेटी गई प्रक्रिया मूल प्रक्रिया की तरह व्यवहार करती है।
चेकआउट से, इसके बजाय cargo install --path cli के साथ इंस्टॉल करें।
chimera क्रेट उस रनटाइम को उजागर करता है जिस पर CLI बनाया गया है।
यह तय करने के लिए कि प्रत्येक गेस्ट syscall को कैसे संभाला जाए, SystemCalls ट्रैट को लागू करें:
use chimera::{Sandbox, SystemCall, SystemCalls, host_syscall};
struct Tracer;
impl SystemCalls for Tracer {
fn handle(&mut self, call: &mut SystemCall) {
eprintln!("syscall {}", call.number);
call.set_result(host_syscall(call));
}
}
fn main() -> Result<(), chimera::Error> {
let mut sandbox = Sandbox::new("/bin/echo")?;
sandbox.args(["hello"]).system_calls(Tracer);
sandbox.run()?;
Ok(())
}
कार्यशील उदाहरण runtime/examples/ में रहते हैं:
sandbox — एक अनुमति-सूची-आधारित सिस्टम-कॉल सैंडबॉक्स।strace — उसी ट्रैट के ऊपर strace(1) को पुनः लागू करता है।देखें ARCHITECTURE.md।
यह प्रोजेक्ट MIT लाइसेंस के अंतर्गत लाइसेंस प्राप्त है।
जब तक आप स्पष्ट रूप से अन्यथा न कहें, Chimera में आपके द्वारा जानबूझकर प्रस्तुत किया गया कोई भी योगदान बिना किसी अतिरिक्त शर्तों या शर्तों के MIT के रूप में लाइसेंस प्राप्त होगा।