我最近开始使用OpenBSD。我想创建简单的火灾并忘记容器/虚拟机或其他东西(它应该用作沙箱)。
用户可以上传他的源代码(C ++ / Java / Perl),它将在服务器(OpenBSD)上编译,如果成功,它应该执行此文件,然后将结果返回给WebPage。
答案 0 :(得分:4)
目前,OpenBSD并不支持任何" chroot on steroid"机制。在过去,同样的jail功能(名为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会更好,因为你可以使用标准用户来执行它,没有内核功能和很多网络功能,但编译会非常慢。
答案 1 :(得分:0)