Runc容器逃逸

容器隔离机制

Linux通过namespace将不同的资源隔离,就像一个沙箱一样。被隔离到某个namespace中的内容,无法访问到其它namespace的内容。可以通过unshareclone设置标志位来将进程放入新的命名空间。

  • PID Namespace

标志位: CLONE_NEWPID

文档: man pid_namespaces

在linux上执行man pid_namespaces可以查看对应的命令文档。部分截图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FIVyYCkN-1638326763884)(../../images/image-20211117140815503.png)]

进程命名空间,在一个隔离的空间中,PID从1开始,相同PID与主机PID不构成冲突。类似主机的init进程,PID为1的进程被终止时,该命名空间下的所有进程都会收到SIGKILL信号从而被终止。正因如此,一个容器的初始化进程只能是一个,而且终止后容器也就被停止了。

在不同的PID命名空间,进程互相看不到对方,不能通过PID找到对方,/proc目录下也只能看到自己命名空间中的进程。但是一个父进程fork出的子进程可以通过set_ns放入子命名空间,在父进程的命名空间,仍然可以看到这个子进程,只是PID不一样。进程可以被挪到子命名空间,但不能被反向挪回更高级的命名空间。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gK4bl69O-1638326763886)(../../images/image-20211117141714226.png)]

  • User Namespace

标志位: CLONE_NEWUSER

文档: man user_namespaces

用户命名空间,主要隔离的是安全相关的id和属性,尤其是用户id和用户组id,root目录,密钥,以及各种进程的能力(capabilities)。

在linux上执行man user_namespaces可以查看对应的命令文档。部分截图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EeZtVFyu-1638326763886)(../../images/image-20211117142028484.png)]

  • Network Namespace

标志位:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值