我有一个小问题:我们必须运行Java程序,部分代码将由用户上传。 所以我想知道运行它们的最佳方法是什么?我知道两种可能的方法,
exec("javac Usercode.class")
然后使用exec("java Main")
运行整个事情,但我尝试使用exec()
并且它不起作用。也许是因为http不是root?但我不知道究竟是为什么。有什么建议吗?
另一个问题是,如何在沙盒中运行这些程序。我们有一个Debian服务器,所以在有限的时间内执行命令没问题,但有没有办法在沙盒中运行整个代码?
答案 0 :(得分:2)
沙盒的想法:
使用例如chroot在chroot中运行Debian的schroot命令。防止他们访问chroot之外的文件,但不要打开像打开套接字等的东西。
每个用户都有自己的Linux用户名,并对其进行验证。然后命令将在适当的用户名下运行(例如,使用sudo或set-uid可执行文件)。
维护一个虚拟服务器池 - 昂贵且复杂,但提供最佳隔离。