【发布时间】:2014-05-27 06:03:05
【问题描述】:
LXC 中的 chroot-escape 保护是如何实现的?是否有保证,没有办法从 lxc 容器逃到主机?
我知道,linux-vserver 为此使用了 chroot-barrier,但它不是股票内核的一部分。
【问题讨论】:
LXC 中的 chroot-escape 保护是如何实现的?是否有保证,没有办法从 lxc 容器逃到主机?
我知道,linux-vserver 为此使用了 chroot-barrier,但它不是股票内核的一部分。
【问题讨论】:
您是否看到“应用挂载命名空间”文章中包含的信息:http://www.ibm.com/developerworks/library/l-mount-namespaces/
在“每用户根”部分下:
“这种方法的一个缺点是普通的 chroot() 可以被转义,尽管需要一些特权。例如,当使用包括 CAP_SYS_CHROOT 在内的某些功能执行时,程序跳出 chroot() 的源 (请参阅参考资料)将导致程序逃逸到真正的文件系统根目录。根据每个用户文件系统树的实际动机和使用情况,这可能是个问题。
我们可以通过在私有命名空间中使用 pivot_root(2) 而不是 chroot(2) 将登录的根更改为 /share/USER/root 来解决这个问题。 chroot() 只是将进程的文件系统根指向指定的新目录,而 pivot_root() 将指定的 new_root 目录(必须是一个挂载)与其挂载点分离,并将其附加到进程根目录。由于挂载树没有新根的父级,因此不能像使用 chroot() 那样欺骗系统进入它。我们将使用 pivot_root() 方法。”
简而言之,我已经看到将 pivot_root 与 mnt 命名空间结合使用来缓解此类问题。
【讨论】: