zoukankan      html  css  js  c++  java
  • 虚拟化安全 sandbox 技术分析

    原文链接:https://cloud.tencent.com/developer/news/215218

    前言:

    libvirt-4.3搭配qemu-2.12使用,如果使用默认的编译选项,可能会让qemu无法正常启动虚拟机。会报出来“qemu-system-x86_64: -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny: seccomp support is disabled”的错误。

    1, seccomp support is disabled

    在编译的时候,没有打开CONFIG_SECCOMP编译选项。

    从configure文件上来看,如果安装了libseccomp就是默认打开的;再或者就是--enable-seccomp和--disable-seccomp来控制。

    2,libvirt

    /etc/libvirt/qemu.conf中通过seccomp_sandbox来控制。

    0是关闭,1是打开,-1是自动检测。注意,如果这里没有配置,libvirt则会自动检测。

    那么就会出现上文的状况,libvirt的检测逻辑中,没有发现当前版本的qemu不支持sandbox,启动参数中带有了sandbox配置,导致qemu报错。

    解决办法就是安装libseccomp,执行congfigure时添加--enable-seccomp,清空/var/cache/libvirt/qemu/capabilities重启libvirtd即可。

    3,libseccomp

    下载代码https://github.com/seccomp/libseccomp

    libseccomp的代码量比较小,大约有几部分:

    a,本地的db。用来保存seccomp的规则。

    b,bpf生成。用来生成bpf代码。

    c,使用syscall加载到kernel。prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, program);

    4, PR_SET_SECCOMP

    看一段man page,大意是说通过prctl的 PR_SET_SECCOMP可以限制进程使用syscall。更多的话,需要参考内存文档。

    5,gvisor

    Google搞了一个大新闻,开源了gvisor,地址https://github.com/google/gvisor

    套路复杂很多,主要是为了容器使用的。

    容器是直接运行在host os上的,可以访问host上的所有syscall,安全性上确实还不够。gvisor可以在一定程度上弥补这一点。

    相比之下,虚拟机则不是,qemu使用到syscall集中于epoll,pread,pwrite,ioctl等比较有限的范围内。

  • 相关阅读:
    VIJOS-P1340 拯救ice-cream(广搜+优先级队列)
    uva 11754 Code Feat
    uva11426 GCD Extreme(II)
    uvalive 4119 Always an Interger
    POJ 1442 Black Box 优先队列
    2014上海网络赛 HDU 5053 the Sum of Cube
    uvalive 4795 Paperweight
    uvalive 4589 Asteroids
    uvalive 4973 Ardenia
    DP——数字游戏
  • 原文地址:https://www.cnblogs.com/wangjq19920210/p/9289321.html
Copyright © 2011-2022 走看看