美文网首页
容器安全之命名空间加固

容器安全之命名空间加固

作者: 微凉哇 | 来源:发表于2021-12-26 19:43 被阅读0次

不共享主机的UTS命令空间

描述

UTS命名空间提供两个系统标识符的隔离:主机名和NIS域名。
它用于设置在该名称空间中运行进程可见的主机名和域名。
在容器中运行的进程通常不需要知道主机名和域名。因此,名称空间不应与主机共享

隐患分析

与主机共享UTS命名空间提供了容器可更改主机的主机名。这是不安全的

审计方式

[root@localhost ~]# docker ps --quiet --all |xargs docker inspect --format '{{.Id}}:UTSMode={{.HostConfig.UTSMode}}'
3b8b371f5e800e25d85e7426020cb7088e6cccb5bd950ad269a185cadf6f7adc:UTSMode=
5bf74b6014405acad5f724cb005b320a864528ac2dd48de1fbb0e37165befc71:UTSMode=
0aede0130fd30b8cb40200aa9b61e84f0d911740617dda3dd707037655419854:UTSMode=
d35fd7bd5e90e6aebc237368453361f632f775490da3c1d28011b9f7e43ff75c:UTSMode=
cff4f40d63e7ba39cb013706f0c73351c3a99325adf606c715df63b8c81001be:UTSMode=

如果上述命令返回host,则意味着主机UTS名称空间与容器共享,是不符合要求的。
如果上述命令不返回任何内容,则主机的UTS名称空间不共享

修复建议

不要使用--uts=host参数启动容器。例如,不要启动如下容器:

$ docker run -idt --uts=host alpine

不共享主机的进程命名空间

描述

进程ID(PID)命名空间隔离进程ID空间,这意味着不同PID命名空间中的进程可以具有相同的PID。这就是容器和主机之间的进程级隔离

隐患分析

PID名称空间提供了进程的隔离。PID命名空间删除了系统进程的视图,并允许重用包括PID的进程ID
如果主机的PID名称空间与容器共享,它基本上允许容器内的进程查看主机上的所有进程。
这就打破了主机和容器之间进程级别隔离的优点。若访问容器最终可以知道主机系统上运行的所有进程,甚至可以从容器内杀死主机系统进程。
这可能是灾难性的。因此,不要将容器与主机的进程名称空间共享

审计方式

[root@localhost ~]# docker ps --quiet --all|xargs docker inspect --format '{{.Id}}:PidMode={{.HostConfig.PidMode}}'
3b8b371f5e800e25d85e7426020cb7088e6cccb5bd950ad269a185cadf6f7adc:PidMode=
5bf74b6014405acad5f724cb005b320a864528ac2dd48de1fbb0e37165befc71:PidMode=
0aede0130fd30b8cb40200aa9b61e84f0d911740617dda3dd707037655419854:PidMode=
d35fd7bd5e90e6aebc237368453361f632f775490da3c1d28011b9f7e43ff75c:PidMode=
cff4f40d63e7ba39cb013706f0c73351c3a99325adf606c715df63b8c81001be:PidMode=

如果上述命令返回host,则表示主机PID名称空间与容器共享,存在安全风险

修复建议

不要使用--pid=host参数启动容器。例如,不要启动一个容器,如下所示

$ docker run -idt --pid=host centos

不共享主机的IPC命令空间

描述

IPC(POSIX / Sys IPC)命名空间提供命名共享内存段,信号量和消息队列的分离。因此主机上的IPC命名空间不应该与容器共享,并且应该保持独立。

隐患分析

IPC命名空间提供主机和容器之间的IPC分离。
如果主机的IPC名称空间与容器共享,它允许容器内的进程查看主机系统上的所有IPC
这打破了主机和容器之间IPC级别隔离的好处。可通过访问容器操纵主机IPC
这可能是灾难性的。 因此,不要将主机的IPC名称空间与容器共享

审计方式

[root@localhost ~]# docker ps --quiet --all|xargs docker inspect --format '{{.Id}}:IpcMode={{.HostConfig.IpcMode}}'
3b8b371f5e800e25d85e7426020cb7088e6cccb5bd950ad269a185cadf6f7adc:IpcMode=private
5bf74b6014405acad5f724cb005b320a864528ac2dd48de1fbb0e37165befc71:IpcMode=private
0aede0130fd30b8cb40200aa9b61e84f0d911740617dda3dd707037655419854:IpcMode=private
d35fd7bd5e90e6aebc237368453361f632f775490da3c1d28011b9f7e43ff75c:IpcMode=private
cff4f40d63e7ba39cb013706f0c73351c3a99325adf606c715df63b8c81001be:IpcMode=private

如果上述命令返回host,则意味着主机IPC命名空间与容器共享。

修复建议

不要使用--ipc=host参数启动容器。 例如,不要启动如下容器

$ docker run -idt --ipc=host centos

说明

共享内存段用于加速进程间通信。 它通常被高性能应用程序使用。
如果这些应用程序被容器化为多个容器,则可能需要共享容器的IPC名称空间以实现高性能。
在这种情况下,您仍然应该共享容器特定的IPC命名空间而不是整个主机IPC命名空间。
可以将容器的IPC名称空间与另一个容器共享,如下所示:

$ docker run -idt --ipc=container:e43299eew043243284 centos

参考文档

相关文章

  • 容器安全之命名空间加固

    不共享主机的UTS命令空间 描述 UTS命名空间提供两个系统标识符的隔离:主机名和NIS域名。它用于设置在该名称空...

  • nsenter命令

    作用: 进入其他linux命名空间执行操作。如从主机进入容器的命名空间,或者从容器进入主机的命名空间。一般情况下,...

  • 给网络命名空间增加或删除网卡(容器通用)

    上次学习了网络命名空间,那么如何进入容器的命名空间呢? 运行的容器都对应一个PID,每个PID都有自己的命名空间。...

  • 十三、docker网络的命名空间

    查看当前电脑的全名空间 查看docker容器中的网络命名空间 查看本机有的网络命名空间 删除网络命名空间 添加网络...

  • kubernetes flannel 网络流程熟练

    pod IPdocker 把容器网络命名空间隐藏起来了,查看容器网络需要把对应的网络命名空间显示出来:容器Id:1...

  • linux内核的命名空间

    命名空间是linux内核针对实现容器虚拟化映入的一个特性。 命名空间的作用:它让我们创建的每个容器都有自己的命名空...

  • STL容器之字符串

    STL容器之字符串 STL容器字符串的简单介绍   #include 作为头文件引入, 需要使用std的命名空间...

  • 容器安全之端口映射加固

    特权端口禁止映射到容器内 描述 低于1024的TCP/IP端口号被认为是特权端口,由于各种安全原因,普通用户和进程...

  • 容器安全之docker exec命令加固

    docker exec命令不能使用特权选项 描述 不要使用--privileged选项来执行docker exec...

  • 十三、docker命名空间二

    创建一个docker网络 查看docker 的网络空间 查看命名空间连接情况 启动一个新的容器连接新的命名空间--...

网友评论

      本文标题:容器安全之命名空间加固

      本文链接:https://www.haomeiwen.com/subject/msxmaltx.html