用户可以上载源代码(C ++ / Java / Perl),它将在服务器(OpenBSD)上进行编译,如果成功,则应执行此File,然后将结果返回到Web页面。
如何在OpenBSD中提供此功能?
此外,由于'jail'将在6.0中删除,因此我应该使用chroot吗?还是在OpenBSD中创建“沙盒”还有其他可能性吗?
sysjail
)曾存在于端口中,但由于不易维护且非常不安全,于2007年被删除。您可以在stackexchange上以及在搜索引擎中找到有关它的更多信息。从历史上看,OpenBSD仅支持chroot(8)
,并且与其他系统完全一样:
# create your target chroot
target="/tmp/chroot"
mkdir ${target}
# now build and install your userland
cd /usr
cvs -qz3 -d${repository} co src -r${openbsd_release}
cd /usr/src
make obj && make && make install DESTDIR=${target}
在其中启动守护程序或您的守护程序
# in root
chroot /tmp/chroot
# run your daemon here
# note: you need to init also dev directory
# and, eventually, customize /etc/fstab
# /tmp is currently not allowed to have dev on it
# please see fstab(5) man page
基本支持chroot功能中的许多软件,openntpd
,openssh
,httpd
和许多其他文件默认情况下在隔离目录中配置。 现在,从OpenBSD 5.9开始,您可以在基础中使用vmm(4)
管理程序和vmctl(8)
。您可以启动vmd
守护程序并创建隔离的容器,就像其他任何虚拟机管理程序一样(Bhyve,xen或kvm)。
# from openbsd vmctl man page example
vmctl create disk.img -s 4.5G
vmctl start "myvm" -m 512M -i 1 -d disk.img -k /bsd
vmctl stop 1
您还可以使用基于端口的软件的另一种方法,qemu
可以很好地工作,但是由于内核加速的支持以及部分由于文件系统结构,在OpenBSD上的性能很差。现在,关于您的主要问题(提供一种远程编译源代码的方式),我认为更好的主意是将您的代码与主系统真正隔离,并且使用类似
vmctl
或qemu
的方法可能是个好答案。也许qemu会更好,因为您可以使用标准用户来执行它,而没有内核功能和很多网络功能,但是编译的确很慢。