
Isoler du code non fiable avec un accès sûr à l'hôte.
Exécutez en bac à sable du code non fiable avec un accès sécurisé à l'hôte.
Chimera est un bac à sable en espace utilisateur pour du code que vous ne maîtrisez pas totalement — un outil naturel pour les agents de codage qui exécutent des commandes arbitraires et générées sur une machine qu'ils partagent avec vous. Il limite ce qu'un processus peut faire sur l'hôte tout en lui permettant d'accéder aux fichiers et aux outils de l'hôte, de sorte que le code reste utile sans pouvoir corrompre le système. Comme il s'exécute comme un programme ordinaire, Chimera ne nécessite ni VM, ni conteneur, ni matériel spécial, ni fonctionnalités du noyau, ni privilèges — il fonctionne partout où votre code s'exécute déjà.
Il y parvient en exécutant des binaires non modifiés via une traduction binaire dynamique de même ISA, en interceptant chaque appel système invité pour que le bac à sable décide de son action. Chimera se présente sous deux formes : un outil en ligne de commande chimera pour encapsuler un processus dans le shell, et une bibliothèque Rust pour intégrer le même environnement d'exécution dans votre propre programme. Les intégrateurs fournissent un gestionnaire d'appels système qui décide de l'action de chaque appel système invité — le transmettre au noyau hôte, le journaliser ou le virtualiser.
Chimera prend actuellement en charge la cible Linux/x86 avec un portage en cours sur Darwin/arm64.
Installez l'outil en ligne de commande chimera depuis GitHub :
cargo install --git https://github.com/penberg/chimera chimera-cli
Ensuite, enveloppez n'importe quelle commande :
chimera run /bin/echo hello
Par défaut, Chimera transmet chaque appel système au noyau hôte, de sorte que le processus encapsulé se comporte comme un processus natif.
Depuis une copie locale, installez avec cargo install --path cli à la place.
La crate chimera expose l'environnement d'exécution sur lequel la CLI est construite. Implémentez le trait SystemCalls pour décider comment chaque appel système invité est traité :
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(())
}
Des exemples concrets se trouvent dans runtime/examples/ :
Voir ARCHITECTURE.md.
Ce projet est sous licence MIT.
Sauf indication contraire explicite, toute contribution intentionnellement soumise pour inclusion dans Chimera par vos soins sera concédée sous licence MIT, sans aucune condition supplémentaire.