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

Docker 的安全优化

目录

1 Docker安全优化思路

1.1 命名空间隔离的安全

1.2 控制组资源控制的安全

1.3 内核能力机制

1.4 Docker服务端防护


1 Docker安全优化思路

Docker容器的安全性,很大程度上依赖于Linux系统自身

评估Docker的安全性时,主要考虑以下几个方面:

  • Linux内核的命名空间机制提供的容器隔离安全
  • Linux控制组机制对容器资源的控制能力安全。
  • Linux内核的能力机制所带来的操作权限安全
  • Docker程序(特别是服务端)本身的抗攻击性。
  • 其他安全增强机制对容器安全性的影响
# rhel9 中默认使用 cgroup-v2 但是 cgroup-v2 中不利于观察 docker 的资源限制情况,所以推荐使用
cgroup-v1
~]# grubby --update-kernel=/boot/vmlinuz-$(uname -r) \
--args="systemd.unified_cgroup_hierarchy=0 \
systemd.legacy_systemd_cgroup_controller"

1.1 命名空间隔离的安全

  • docker run启动一个容器时,Docker将在后台为容器创建一个独立的命名空间。命名空间提供了最基础也最直接的隔离。
  • 与虚拟机方式相比,通过Linux namespace来实现的隔离不是那么彻底。
  • 容器只是运行在宿主机上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作
  • 系统内核。
  • Linux 内核中,有很多资源和对象是不能被 Namespace 化的,比如:磁盘等等

MemTotal: 系统中的总物理内存(单位通常是 KiB)。
MemFree: 系统中未被使用的空闲内存。
Buffers: 缓冲区使用的内存。
Cached: 用作缓存的内存,这通常是指文件系统缓存。
SwapCached: 被标记为可交换出去的页面数量。
Active: 当前活跃的内存页数/proc/meminfo 文件包含了有关系统内存使用情况的信息。
这个文件的内容包括了物理内存、交换空间(swap)以及其他内存相关的统计数据。
这些信息对于监控系统内存使用情况以及诊断潜在的内存问题非常有用。[root@rockynode-1 ~]# docker run -it --name test busybox
/ # cat /proc/meminfo 
MemTotal:        1784760 kB
MemFree:          181828 kB
MemAvailable:     726136 kB
Buffers:             136 kB
Cached:           634336 kB
SwapCached:         1316 kB
Active:           568164 kB# 宿主机上
[root@rockynode-1 ~]# cat /proc/meminfo 
MemTotal:        1784760 kB
MemFree:          181828 kB
MemAvailable:     726144 kB
Buffers:             136 kB
Cached:           634344 kB
SwapCached:         1316 kB
Active:           568044 kB

[root@rockynode-1 ~]# docker inspect test | grep Pid"Pid": 11360,"PidMode": "","PidsLimit": null,/proc/进程号/ns这些文件实际上是由 Linux 内核提供的,
它们构成了命名空间(namespaces)机制的一部分。
命名空间是 Linux 内核用于实现进程间资源隔离的技术之一,
允许不同的进程拥有独立的视图,比如独立的网络栈、不同的进程 ID 号、不同的挂载点等等。[root@rockynode-1 ~]# ls /proc/11360/ns
cgroup  ipc  mnt  net  pid  pid_for_children  time  time_for_children  user  uts

1.2 控制组资源控制的安全

  • docker run启动一个容器时,Docker将在后台为容器创建一个独立的控制组策略集合。
  • Linux Cgroups提供了很多有用的特性,确保各容器可以公平地分享主机的内存、CPU、磁盘IO资源。
  • 确保当发生在容器内的资源压力不会影响到本地主机系统和其他容器,它在防止拒绝服务攻击 DDoS)方面必不可少,因为在遭受攻击的时候多容器的隔离性比较差,是会影响到其他 的容器

目录 /sys/fs/cgroup/memory/docker/<CONTAINER_ID> 是 Docker 容器的 cgroup 控制组的一部分,专门用于管理内存资源。

memory.limit_in_bytes:设置容器的最大可用内存(以字节为单位)。
memory.usage_in_bytes:当前容器使用的内存总量(以字节为单位)。
memory.failcnt:尝试使用超过限制的次数。
memory.soft_limit_in_bytes:软限制,可以比硬限制稍微宽松一些,但当系统内存压力增大时会被强制执行。
memory.kmem.*:与内核内存管理相关的统计和限制。
memory.max_usage_in_bytes:容器曾经达到的最大内存使用量。
memory.stat:详细的内存统计信息。
memory.usage_in_bytes:当前使用的内存总量。
tasks:这个 cgroup 中的进程列表。

[root@rockynode-1 ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS          PORTS     NAMES
bcebb976fef2   busybox   "sh"      37 minutes ago   Up 20 minutes             test
[root@rockynode-1 ~]# ls /sys/fs/cgroup/memory/docker/ | grep bcebb976fef2
bcebb976fef21723c3e05e5529e7239d92a3d689fcf1a89d389198fbfdb22924
[root@rockynode-1 ~]#  cd /sys/fs/cgroup/memory/docker/bcebb976fef21723c3e05e5529e7239d92a3d689fcf1a89d389198fbfdb22924/
[root@rockynode-1 bcebb976fef21723c3e05e5529e7239d92a3d689fcf1a89d389198fbfdb22924]# ls
cgroup.clone_children           memory.kmem.slabinfo                memory.memsw.failcnt             memory.soft_limit_in_bytes
cgroup.event_control            memory.kmem.tcp.failcnt             memory.memsw.limit_in_bytes      memory.stat
cgroup.procs                    memory.kmem.tcp.limit_in_bytes      memory.memsw.max_usage_in_bytes  memory.swappiness
memory.failcnt                  memory.kmem.tcp.max_usage_in_bytes  memory.memsw.usage_in_bytes      memory.usage_in_bytes
memory.force_empty              memory.kmem.tcp.usage_in_bytes      memory.move_charge_at_immigrate  memory.use_hierarchy
memory.kmem.failcnt             memory.kmem.usage_in_bytes          memory.numa_stat                 notify_on_release
memory.kmem.limit_in_bytes      memory.limit_in_bytes               memory.oom_control               tasks
memory.kmem.max_usage_in_bytes  memory.max_usage_in_bytes           memory.pressure_level

查询容器与宿主机的内存总用量,可以发现基本上一样。说明cgroup组隔离还是不够

1.3 内核能力机制

  • 能力机制(Capability)是Linux内核一个强大的特性,可以提供细粒度的权限访问控制。
  • 大部分情况下,容器并不需要真正的”root权限,容器只需要少数的能力即可。
  • 默认情况下,Docker采用白名单机制,禁用必需功能之外的其他权限
/proc/进程号/ns这些文件实际上是由 Linux 内核提供的,
它们构成了命名空间(namespaces)机制的一部分。
命名空间是 Linux 内核用于实现进程间资源隔离的技术之一,
允许不同的进程拥有独立的视图,比如独立的网络栈、不同的进程 ID 号、不同的挂载点等等。[root@rockynode-1 ~]# ls /proc/11360/ns
cgroup  ipc  mnt  net  pid  pid_for_children  time  time_for_children  user  uts

1.4 Docker服务端防护

  • 使用Docker容器的核心是Docker服务端,确保只有可信的用户才能访问到Docker服务。
  • 将容器的root用户映射到本地主机上的非root用户,减轻容器和主机之间因权限提升而引起的安全问题。
  • 允许Docker 服务端在非root权限下运行,利用安全可靠的子进程来代理执行需要特权权限的操作。 这些子进程只允许在特定范围内进行操作。
[root@rockynode-1 ~]# ls -ld /var/lib/docker/   #默认docker是用root用户控制资源的
drwx--x---. 12 root root 171  8月 31 00:48 /var/lib/docker/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Git版本控制策略:Rebase还是Merge?详解优缺点与适用场景
  • 【 OpenHarmony 系统应用源码魔改 】-- Launcher 之「桌面布局定制」
  • 012 MPLS技术在企业网络中的应用
  • 深度学习100问42:什么是GNMT
  • 每天五分钟计算机视觉:人脸识别网络FaceNet
  • adb大全指令(持续更新)
  • python 安装
  • LabVIEW水泵机组监控系统
  • 智能体与在线实用工具:协同并进,提升生活效率
  • 获取指定类的所有成员属性上的指定注解的属性值
  • 大数据技术之HBase 快速入门(2)
  • Parallels Desktop 19发布,无需重启即可在 Mac 上运行 Windows
  • VSCode设置复制 Ctrl+D想下复制
  • 知识社区的小程序源码系统 界面支持万能DIY装修 带源代码包以及搭建部署教程
  • 黑神话悟空-提高画质、防卡顿、修复等各种功能、各种CT表、各种存档、武器包、人物、装备替换等193+MOD合集
  • Bootstrap JS插件Alert源码分析
  • Github访问慢解决办法
  • input实现文字超出省略号功能
  • KMP算法及优化
  • Laravel 实践之路: 数据库迁移与数据填充
  • Next.js之基础概念(二)
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Spring框架之我见(三)——IOC、AOP
  • SQL 难点解决:记录的引用
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 不上全站https的网站你们就等着被恶心死吧
  • 基于web的全景—— Pannellum小试
  • 基于遗传算法的优化问题求解
  • 简单数学运算程序(不定期更新)
  • 经典排序算法及其 Java 实现
  • 聚簇索引和非聚簇索引
  • 理清楚Vue的结构
  • 赢得Docker挑战最佳实践
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # Java NIO(一)FileChannel
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (09)Hive——CTE 公共表达式
  • (13)Hive调优——动态分区导致的小文件问题
  • (C++17) optional的使用
  • (独孤九剑)--文件系统
  • (二)Eureka服务搭建,服务注册,服务发现
  • (分类)KNN算法- 参数调优
  • (十六)视图变换 正交投影 透视投影
  • (四)进入MySQL 【事务】
  • (万字长文)Spring的核心知识尽揽其中
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Framework与.NET Framework SDK有什么不同?
  • .Net MVC + EF搭建学生管理系统
  • .Net MVC4 上传大文件,并保存表单
  • .NET 材料检测系统崩溃分析