Как настроить виртуальную среду или «песочницу» для ruby, не удаляя доступ к внешним API? - PullRequest
2 голосов
/ 20 июня 2010

Я выполняю немного кода, который выглядит следующим образом:

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

Переменная "random_ruby_script" представляет любой файл .rb.

Этот код является первым из многих вызововsystem () и запускает файл ruby, который также может содержать вызовы system (), чтение / запись на диск, HTTP-запросы и т. д.

Файл ruby ​​должен быть запущен, чтобы выяснить, что он делает, ноон может попытаться прочитать / записать / выполнить что-то, кроме себя, и я не хочу, чтобы он удалял мой жесткий диск или публиковал непристойные твиты.

Я хочу создать пространство, где эта программа может запускаться без разрешения на запись / выполнение чего-либо в своих родительских каталогах, но с доступом для чтения чего-либо локально и через любой сетевой протокол.

Я также хочу знать, пытается ли он что-либо записать / выполнить локально или в сети.

Вероятно, существует гем или программное обеспечение, которое делает что-то похожее, но я очень хорошо разбираюсь в своем коде, поэтому практически любое предложение будет полезным.

1 Ответ

1 голос
/ 20 июня 2010

Используйте безопасный уровень и не запускайте скрипт с системой

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

Это использовалось, например, в старом сборщике гемов github (gemspec был обычным исполняемым ruby-кодом).

...