2010-06-19 19 views
2

Je suis en cours d'exécution un peu de code qui ressemble à ceci:Comment configurer un environnement virtuel ou un sandbox pour ruby ​​sans supprimer l'accès aux API externes?

result = system("ruby " + filename_random_ruby_script) 
if result 
    save_to_disk(random_ruby_script) 
else 
    # Do Nothing 
end 

La variable "random_ruby_script" représente un fichier .rb.

Ce code est le premier de nombreux appels à system() et exécute un fichier ruby ​​qui peut également contenir des appels à system(), des lectures/écritures de disque, des requêtes HTTP, etc. Le fichier ruby ​​doit être exécuté pour savoir ce qu'il fait, mais il peut essayer de lire/écrire/exécuter quelque chose d'autre que lui-même et je ne veux pas qu'il supprime mon disque dur ou affiche des tweets lubriques.

Je veux faire un espace où ce programme peut fonctionner sans la permission d'écrire/exécuter quoi que ce soit dans ses répertoires parents, mais accéder à lire n'importe quoi localement et via n'importe quel protocole réseau.

Je veux aussi savoir si elle essaie d'écrire/exécuter quoi que ce soit localement ou sur le net. Il y a probablement une gemme ou un logiciel qui fait quelque chose de similaire, mais je suis très écolo pour scotcher mon code, donc toute suggestion sera utile.

Répondre

1

Utiliser niveau de sécurité et ne pas exécuter le script avec le système

http://ruby-doc.org/docs/ProgrammingRuby/html/taint.html

Il a été utilisé, par exemple, dans l'ancien constructeur de pierres précieuses github (gemspecs étant code exécutable ruby ​​normal).

+0

Je suis en train de tester le fichier pour la compilation. Est-ce que je peux faire ceci sans appeler le système et avec un niveau sûr? – smothers

+0

oui. exiger ou charger un fichier entraînera le chargement et le «compilage» du code (si vous êtes sur IRM, il sera interprété dans un arbre de syntaxe abstraite, car l'IRM n'est pas un compilateur). Vous pouvez également exécuter le code avec ruby ​​-c, qui vérifiera la syntaxe (mais pas la fonctionnalité). –

+0

Merci Ben ça aide beaucoup. – smothers