OpenBSD 上有哪些类似 Jail/Chroot/Sandbox 的机制?

arc*_*hos 4 security openbsd bsd chroot sandbox

我最近开始使用 OpenBSD。我想创建简单的即发即弃容器/VM 或其他东西(它应该用作沙箱)。

用户可以上传他的源代码(C++/Java/Perl),它会在服务器(OpenBSD)上编译,如果编译成功,它应该执行这个文件,然后将结果返回到网页。

我如何在 OpenBSD 中提供这个?

另外,我应该使用 chroot,因为 'jail' 将在 6.0 中删除吗?或者还有其他可能在 OpenBSD 中创建“沙箱”吗?

小智 6

目前 OpenBSD 不支持任何“chroot on steroid”机制。过去,sysjailports 中也有相同的 jail 功能(名为),但在 2007 年被删除,因为它不易维护且非常不安全。您可以在 stackexchange 和您的搜索引擎上找到有关它的更多信息。

从历史上看,OpenBSD 只支持chroot(8)和工作方式与其他系统完全一样:

  1. 创建一个带有用户空间的替代根
# 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}
Run Code Online (Sandbox Code Playgroud)
  1. 启动你的守护进程或你的软件
# 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
Run Code Online (Sandbox Code Playgroud)

在底座支撑chroot功能的软件很多,openntpdopensshhttpd和许多其他被默认在孤立的目录配置。

现在,从 OpenBSD 5.9 开始,您可以使用vmm(4)hypervisor 和vmctl(8)in base。您可以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
Run Code Online (Sandbox Code Playgroud)

您还可以使用基于端口软件的另一种方法,运行qemu良好但在 OpenBSD 上性能不佳,这是由于内核加速支持湖和文件系统结构的部分原因。

现在,关于您的主要问题(提供一种远程编译源代码的方法),我想更好的主意是真正将您的代码与主系统隔离,并使用类似vmctlqemu可能是好的答案。也许 qemu 会更好,因为你可以使用标准用户来执行它,没有内核特性和很多网络特性,但是编译会很慢。