
صندوق رمل للكود غير الموثوق مع وصول آمن للمضيف.
عزل الكود غير الموثوق به مع وصول آمن إلى النظام المضيف.
Chimera هو صندوق رمل (sandbox) في مساحة المستخدم للكود الذي لا تثق به تمامًا — وهو مناسب بشكل طبيعي للعوامل البرمجية (coding agents) التي تنفذ أوامر عشوائية ومولدة على جهاز تشاركه معها. يقيد ما يمكن أن تفعله العملية (process) بالنظام المضيف مع السماح لها بالوصول إلى ملفات وأدوات المضيف، بحيث يظل الكود مفيدًا دون أن يكون حرًا في إفساد النظام. نظرًا لأنه يعمل كبرنامج عادي، لا يحتاج Chimera إلى جهاز افتراضي، أو حاوية، أو أجهزة خاصة، أو ميزات نواة، أو صلاحيات خاصة — فهو يعمل أينما كان كودك يعمل بالفعل.
يحقق ذلك عن طريق تشغيل الملفات الثنائية غير المعدلة من خلال ترجمة ثنائية ديناميكية لنفس مجموعة التعليمات (ISA)، مع اعتراض كل استدعاء نظام (system call) للعملية الضيفة ليقرر الصندوق ما تفعله. يتم شحن Chimera كقطعتين: أداة سطر أوامر chimera لتغليف عملية في الصدفة، ومكتبة Rust لتضمين نفس زمن التشغيل (runtime) في برنامجك الخاص. يقوم المضمنون (embedders) بتوفير معالج لاستدعاءات النظام (system-call handler) يقرر ما يفعله كل استدعاء نظام ضيف — إما تمريره إلى نواة المضيف، أو تسجيله، أو افتراضيه (virtualize).
يدعم Chimera حاليًا هدف Linux/x86 مع نقل قيد التطوير إلى Darwin/arm64.
قم بتثبيت أداة سطر الأوامر chimera من GitHub:
cargo install --git https://github.com/penberg/chimera chimera-cli
ثم اغلف أي أمر:
chimera run /bin/echo hello
بشكل افتراضي، يقوم Chimera بتمرير كل استدعاء نظام إلى نواة المضيف، لذلك تتصرف العملية المغلفة مثل العملية الأصلية.
من نسخة مستنسخة (checkout)، قم بالتثبيت باستخدام cargo install --path cli بدلاً من ذلك.
تعرض crate chimera زمن التشغيل الذي بنيت عليه الأداة CLI. قم بتطبيق trait 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) فوق نفس trait.انظر ARCHITECTURE.md.
هذا المشروع مرخص بموجب ترخيص MIT.
ما لم تنص صراحة على خلاف ذلك، فإن أي مساهمة تقدم عمدًا لإدراجها في Chimera من قبلك، ستكون مرخصة بموجب MIT، دون أي شروط أو أحكام إضافية.