• 虚拟化安全 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等比较有限的范围内。

  • 相关阅读:
    mssql like的效率
    【编辑器开发】基本js指令
    QQ菜单OUTLOOK风格
    oracle exp/imp命令详解
    javascript读取xml
    在c#中调用windows脚本的方法
    oracle常用命令(转)
    有效创建Oracle dblink的两种方式
    oracle 绑定变量(bind variable)
    Oracle备份与恢复
  • 原文地址:https://www.cnblogs.com/wangjq19920210/p/9289321.html
Copyright © 2020-2023  润新知