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

时间:2016-09-01 07:24:07

标签: security sandbox bsd chroot openbsd

我最近开始使用OpenBSD。我想创建简单的火灾并忘记容器/虚拟机或其他东西(它应该用作沙箱)。

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

  1. 我如何在OpenBSD中提供此功能?
  2. 我可以使用chroot(因为'jail'将在6.0中删除)?
  3. 在OpenBSD中是否还有其他可能性来创建“沙箱”?

2 个答案:

答案 0 :(得分:4)

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

从历史上看,OpenBSD仅支持chroot(8),其工作方式与其他系统完全相同:

  1. 使用userland创建备用根
  2. # 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}
    
    1. 启动你的守护进程或你的软件
    2. # 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功能中的许多软件openntpdopensshhttpd以及许多其他软件默认配置在隔离目录中。

      现在,从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上性能较差。

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

答案 1 :(得分:0)

签出pledgeunveil

您可以使用誓词来限制系统调用,并使用揭幕来隐藏目录