【问题标题】:How does chroot-escape protection in LXC implementedLXC 中的 chroot-escape 保护是如何实现的
【发布时间】:2014-05-27 06:03:05
【问题描述】:

LXC 中的 chroot-escape 保护是如何实现的?是否有保证,没有办法从 lxc 容器逃到主机?

我知道,linux-vserver 为此使用了 chroot-barrier,但它不是股票内核的一部分。

【问题讨论】:

    标签: security chroot lxc


    【解决方案1】:

    您是否看到“应用挂载命名空间”文章中包含的信息: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 命名空间结合使用来缓解此类问题。

    【讨论】:

    • 但是 pivot_root 不能用于任何目录——只能用于挂载点。并且 --bind 不是挂载点...或者它是?
    • @datacompboy,很久以前,但只是偶然想到了这个问题。 Linux 源代码说对于 pivot_root 可以绑定挂载:lxr.free-electrons.com/source/fs/namespace.c#L3061
    猜你喜欢
    • 2012-11-09
    • 2014-07-17
    • 2021-10-22
    • 2013-10-30
    • 1970-01-01
    • 2015-03-03
    • 2015-04-17
    • 2022-06-18
    • 2020-03-24
    相关资源
    最近更新 更多