码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • docker run:--privileged=true选项解析(特权模式:赋予容器几乎与主机相同的权限)


    文章目录

    • Docker的--privileged=true选项
      • 1. Docker 容器的安全性
        • 1.1 Linux Namespace 和 Capabilities
        • 1.2 限制和权限
      • 2. Docker的--privileged=true选项
        • 2.1 --privileged=true的作用
        • 2.2 --privileged=true的风险
      • 3. 结论

    Docker的–privileged=true选项

    Docker在创建和运行容器时,提供了许多命令行参数来自定义容器的行为。其中之一就是--privileged=true选项。此选项提供了对主机系统资源更深层次的访问权限。本文将详细解析这个选项,并探索它的用途和可能带来的风险。

    1. Docker 容器的安全性

    1.1 Linux Namespace 和 Capabilities

    在理解--privileged=true选项之前,首先需要了解Docker容器的安全模型。Docker使用Linux namespace和capabilities来实现容器隔离和限制权限1。

    • Linux Namespace:Docker利用namespace技术,使得每个容器都有其自己的进程、网络、挂载、用户ID等独立的空间2。这保证了容器与容器之间以及容器与主机之间的隔离性。

    • Capabilities:Linux capabilities允许将传统的root权限分割成多个不同的能力,例如CAP_NET_ADMIN能力允许操作网络配置,CAP_CHOWN能力允许改变文件所有权3。Docker默认情况下会赋予容器一些必要的capabilities,但不包括全部的能力,从而降低了被攻击的风险。

    docker run --cap-add=SYS_PTRACE --rm -it ubuntu
    
    • 1

    Docker 通过 --cap-add 和 --cap-drop 两个参数,可以灵活地添加或删除容器的 capabilities。

    上面--cap-add=SYS_PTRACE的意思就是:给容器添加 SYS_PTRACE 权限,允许容器内的进程可以 ptrace 和 debug 其他进程。

    1.2 限制和权限

    在默认情况下,Docker对容器的权限进行了严格的限制,只提供了有限的capabilities。此外,许多系统级别的操作(例如挂载文件系统、修改内核参数等)都是被禁止的。这种安全模型使得Docker可以在不牺牲安全性的前提下,实现轻量级的虚拟化。

    然而,在某些情况下,我们可能需要赋予容器更多的权限。例如,如果我们需要在容器中运行一些需要特权的服务(如网络设备管理、硬件设备接口等),那么默认的权限可能就不够用了。这时候,--privileged=true选项就派上了用场。

    2. Docker的–privileged=true选项

    2.1 --privileged=true的作用

    当使用--privileged=true选项运行容器时,Docker会赋予容器几乎与主机相同的权限4。具体来说,这个选项做了以下两件事情:

    • 给容器添加了所有的capabilities
    • 允许容器访问主机的所有设备
    docker run --privileged=true -it ubuntu
    
    • 1

    这意味着在一个privileged容器中,我们可以做很多平时不能做的事情,例如加载内核模块、直接操作硬件设备等。

    2.2 --privileged=true的风险

    尽管--privileged=true选项为容器提供了强大的功能,但它也带来了一些严重的安全隐患。由于privileged容器具有几乎与主机相同的权限,所以如果容器被恶意代码控制,那么攻击者就可以轻易地突破容器的边界,对主机进行任意操作5。

    因此,我们需要谨慎地使用--privileged=true选项,只在真正需要的情况下才启用它。在可能的情况下,我们应该尽量使用其他更细粒度的权限控制手段,例如通过--cap-add或--device参数来分别添加必要的capabilities或设备访问权限。

    # 添加单个capability
    docker run --cap-add=NET_ADMIN -it ubuntu
    
    # 添加设备访问权限
    docker run --device=/dev/sda:/dev/xvdc -it ubuntu
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3. 结论

    Docker的--privileged=true选项提供了强大的功能,使得我们可以在容器中执行一些需要特权的操作。然而,这个选项也带来了严重的安全隐患,可能导致容器突破边界,对主机进行任意操作。因此,我们需要谨慎地使用这个选项,只在必要的情况下才启用它,并尽量使用其他更细粒度的权限控制手段。

    参考链接:

    • Docker Documentation
    • Linux Kernel Documentation
    • Linux man page for Capabilities
    • Trend Micro Research

    1. Docker Security | Docker Documentation ↩︎

    2. Namespaces overview | Linux Kernel Documentation ↩︎

    3. Capabilities | Linux man page ↩︎

    4. Runtime privilege and Linux capabilities | Docker Documentation ↩︎

    5. Understand the risks of running Docker containers with --privileged flag ↩︎

  • 相关阅读:
    【C++】引用和一些小语法扩展
    Vue源码学习之nextTick
    2023-11-16 android 编译提示module freg.default missing dependencies:
    使用xshell linux安装nodejs,CentOS下安装并配置nodejs环境教程
    pytest框架
    高维统计理论 Gauss与Rademacher复杂度
    数字化转型指南发布,官方明确这样做!
    【MySQL】(八)多表查询——内连接查询、外连接查询、子查询
    Codeforces Round #820 (Div. 3) B Decode String
    图片转文字怎么转?这些方法我只告诉你
  • 原文地址:https://blog.csdn.net/Dontla/article/details/132996095
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号