【问题标题】:Security of Docker as it runs as root userDocker 以 root 用户身份运行时的安全性
【发布时间】:2013-09-27 15:02:47
【问题描述】:

一个 Docker blog post 表示:

默认情况下,Docker 容器非常安全;特别是如果你 照顾在容器内运行您的进程 非特权用户(即非 root)。”

那么,如果我在 docker 下以 root 身份运行,安全问题是什么?我的意思是,如果我以非特权用户的身份处理我的进程是非常安全的,那么,我如何以 root 用户身份在容器中托管?我只是要求它理解它,如果它以root身份运行时不安全,它如何被隔离?那么哪些系统调用可以暴露主机系统呢?

【问题讨论】:

    标签: security docker


    【解决方案1】:

    当您以 root 身份运行时,您可以访问更广泛的内核服务。例如,您可以:

    • 操纵网络接口、路由表、网络过滤规则;
    • 创建原始套接字(一般来说,“外来”套接字,执行的代码比旧的 TCP 和 UDP 受到的审查更少);
    • 挂载/卸载/重新挂载文件系统;
    • 更改文件所有权、权限、扩展属性、覆盖常规权限(即使用稍微不同的代码路径);

    (有趣的是,所有这些示例都受到capabilities 的保护。)

    关键是作为root,你可以行使更多的内核代码;如果该代码存在漏洞,您可以以 root 身份触发它,但不能以普通用户身份触发。

    此外,如果有人找到了破解容器的方法,如果您以 root 用户身份破解,显然比普通用户造成的伤害要大得多。

    【讨论】:

    • 所以当你运行的docker运行一个非root用户来执行任意东西时你几乎是安全的
    • 我想在容器中拥有 root 访问权限,但要确保它不会破坏主机系统。这使得实现单应用单容器理念变得更加容易。
    • 关于从容器中取出的最后一句话有点误导。如果您可以突破容器,无论您在容器中的是谁,您都会突破 LXC 进程本身在主机操作系统上运行的身份。这通常是根。也就是说,以非特权用户身份运行容器进程仍然是一个好主意,因为这样会更难脱离容器(至少在理论上)。
    • 我觉得人们不会考虑如果你是 root,你可以在容器内做什么。我利用了你的应用程序,也许我不能越狱,但那个容器里的一切都是属于我的。您需要多长时间才能注意到有人更新了您正在运行的容器?特别是因为你可能没有安装tripwire之类的东西,因为它是一个容器......
    【解决方案2】:

    您可以通过在 docker 上回显到 /proc/sysrq-trigger 来重新启动主机。在 docker 中以 root 身份运行的进程可以执行此操作。

    这似乎是一个很好的理由不在 docker 中以 root 身份运行进程;)

    【讨论】:

    • 我收到bash: /proc/sysrq-trigger: Read-only file system
    • 嗯……两年后他们终于修好了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 2019-06-24
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多