当前位置: 首页 > news >正文

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

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

这意味着在一个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

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 ↩︎

http://www.lryc.cn/news/169618.html

相关文章:

  • 计算机专业毕业设计项目推荐06-工作室管理系统(Java+Vue+Mysql)
  • Python 文件的读写操作
  • 多线程回顾、集合Collection、Set、List等基本知识
  • 分享5款用起来很好用的软件,总有一款适合你
  • 大数据学习1.5-单机Hadoop
  • Cesium对实体元素鼠标点击popup div信息框
  • 有多条业务线,mysql建多库多表比较好还是一个库多个表比较好呢?
  • C++---异常处理
  • 接口自动化测试(Python+Requests+Unittest)
  • 驱动开发,IO多路复用(select,poll,epoll三种实现方式的比较)
  • 大数据-玩转数据-oracel字符串分割转化为多列
  • GCP设置Proxy来连接Cloud SQL
  • Python:为何成为当下最热门的编程语言?
  • 【echarts入门】:vue项目中应用echarts
  • Seata 源码篇之AT模式启动流程 - 上 - 02
  • FFMPEG视频压缩与Python使用方法
  • SpringMVC自定义注解---[详细介绍]
  • 5.4 转换数据
  • 雷池社区WAF:保护您的网站免受黑客攻击 | 开源日报 0918
  • 链表反转-LeetCode206
  • 北邮22级信通院数电:Verilog-FPGA(3)实验“跑通第一个例程”modelsim仿真及遇到的问题汇总(持续更新中)
  • 4G工业路由器,开启智能工厂,这就是关键所在
  • 计组-机器字长、存储字长、指令字长以及和他们有关的机器位数
  • 解决express服务器接收post请求报错:“req.body==> undefined“
  • 5.zigbee的开发,串口putchar重定向(使用print),单播实验,usb抓包实验
  • 解决AU报“MME无法使用“问题
  • Maven 安装配置
  • vscode 配置网址
  • git 本地工作区和仓库区基本使用
  • 有效的括号(栈的高频面试题)