docker 安全性

自从我写了有关Docker安全性的系列文章的前两篇 文章以来已经有一段时间了。 本文将提供自那时以来已添加到Docker的最新信息,并涵盖与上游Docker合并过程中正在经历的新功能。

调整能力

在之前的文章中,我介绍了基于Linux功能的容器分离。

Linux功能使您可以将root的权限分解为较小的特权组。 当前,默认情况下,docker容器仅具有以下功能。

CHOWN, DAC_OVERRIDE, FSETID, FOWNER, MKNOD, NET_RAW, SETGID, SETUID, SETFCAP, SETPCAP, NET_BIND_SERVICE, SYS_CHROOT, KILL, AUDIT_WRITE

在某些情况下,您可能需要调整此列表,例如,如果要构建一个运行ntpd或crony的容器,则该容器需要能够修改主机系统时间。 该容器无法运行,因为它需要CAP_SYS_TIME。 在旧版本的docker中,容器必须以--privileged模式运行,这将关闭所有安全性。

在docker-1.3 --cap-add中,添加了--cap-drop。 现在,为了运行一个ntpd容器,您可以运行:

docker run -d --cap-add SYS_TIME ntpd

这只会将SYS_TIME功能添加到您的容器中。

另一个示例是,如果您的容器未更改任何进程的UID / GID,则可以从容器中删除这些功能,从而使其更加安全。

docker run --cap-drop SETUID --cap-drop SETGID --cap-drop FOWNER fedora /bin/sh

# pscap | grep 2912
5417 2912 root sh chown, dac_override, fsetid, kill, setpcap, net_bind_service, net_raw, sys_chroot, mknod, audit_write, setfcap

或者,您可以放弃所有功能,然后再添加一项。

docker run --cap-drop ALL --cap-add SYS_TIME ntpd /bin/sh

# pscap | grep 2382
5417 2382 root sh sys_time

调整SELinux标签

与功能相似,我们增加了即时调整SELinux标签的功能。

如果您看过SELinux图画书 ,您就会知道我们可以按类型和按MCS / MLS级别将过程分开。 我们使用类型来保护主机免受容器侵害。 但是我们也可以调整类型以控制允许哪些网络端口进出容器。 当前,我们使用svirt_net_lxc_t运行所有容器。 允许在所有网络端口上侦听此类型,并允许在所有网络端口上进行连接。 我们可以通过调整SELinux类型标签来加强容器的安全性。

使用常规SELinux和Apache httpd,默认情况下,我们仅允许apache进程监听Apache端口(http_port_t)。

# sudo sepolicy network -t http_port_t

http_port_t: tcp: 80,81,443,488,8008,8009,8443,9000

我们还将阻止所有传出端口连接。 这可以帮助我们锁定Apache进程,即使黑客要用ShellShock这样的安全漏洞破坏应用程序,我们也可以阻止该应用程序成为垃圾邮件机器人,或者阻止该进程发起对其他系统的攻击。 就像加利福尼亚酒店一样,“您可以随时登记入住,但永远都不能离开。”

但是,如果使用容器,则如果您正在容器中运行Apache服务器应用程序,并且该应用程序已被破坏,则Apache进程将能够连接到任何网络端口并成为垃圾邮件机器人,或通过网络攻击其他主机/容器。

使用SELinux创建新的策略类型以与您的容器一起运行非常简单。 首先,您可以创建SELinux TE(类型强制)文件。

# cat > docker_apache.te << _EOF

policy_module(docker_apache,1.0)

# This template interface creates the docker_apache_t type as a
# type which can be run as a docker container. The template
# gives the domain the least privileges required to run.
virt_sandbox_domain_template(docker_apache)

#我知道容器中的apache守护程序将需要
#运行一些功能。 幸运的是我已经有政策
#Apache和我可以查询SELinux的功能。
#sesearch -AC -s ​​httpd_t -c功能
允许docker_apache_t self:功能{chown dac_override kill setgid setuid net_bind_service sys_chroot sys_nice sys_tty_config};

#这些是允许容器侦听的规则
#到网络上的Apache端口。

allow docker_apache_t self:tcp_socket create_stream_socket_perms;
allow docker_apache_t self:udp_socket create_socket_perms;
corenet_tcp_bind_all_nodes(docker_apache_t)
corenet_tcp_bind_http_port(docker_apache_t)
corenet_udp_bind_all_nodes(docker_apache_t)
corenet_udp_bind_http_port(docker_apache_t)

#Apache需要根据DNS服务器解析名称
sysnet_dns_name_resolve(docker_apache_t)

#允许域允许进程不被SELinux阻止
#在制定和测试策略时,您可能想要
#以允许模式运行容器。
#如果您对
#政策。
允许的docker_apache_t;
_EOF

#make -f / usr / share / selinux / devel / Makefile docker_apache.pp
#semodule -i docker_apache.pp

现在使用新类型运行容器:

# docker run -d --security-opt type:docker_apache_t httpd

现在,此容器将以比普通容器更严格的SELinux安全性运行。 请注意,您可能需要查看审核日志,以查看您的应用是否需要其他SELinux允许规则。

您可以使用audit2allow命令添加这些规则,并将这些规则附加到现有的.te文件中,然后重新编译并安装。

# grep docker_apache_t /var/log/audit/audit.log | audit2allow >> docker_apache.te
# make -f /usr/share/selinux/devel/Makefile docker_apache.pp
# semodule -i docker_apache.pp

多级安全模式

当前,我们使用MCS分离来确保不允许容器干扰其他容器或与其他容器进行交互,除非它是通过网络进行的。 某些政府系统需要不同类型的策略MLS(多级安全性)。 使用MLS,您可以根据进程将看到的数据级别来标记进程。 MLS说,如果您的容器将要处理TopSecret数据,则应在TopSecret上运行。 我们在docker中添加了选项,以允许管理员将容器设置为在特定级别运行,这应满足MLS系统的需求。

docker run -d --security-opt label:level:TopSecret --security-opt label:type:docker_apache_t httpd

这将使docker容器可以同时使用替代类型和级别运行,并且可以防止容器使用不在同一标签上的数据。 目前,这还没有通过认证,但是我们愿意帮助第三方为MLS用户建立解决方案。

调整名称空间

在其他安全性讨论中,我讨论了如何将命名空间视为一种安全机制,因为从查看系统上的其他进程(PID命名空间)中消除了一个进程的能力。 网络名称空间可以消除从您的名称空间查看其他网络的能力。 IPC(进程间通信)名称空间具有阻止容器使用其他容器IPC的功能。

Docker现在可以放松这些限制。 您可以与容器共享主机名称空间:

--pid = host让容器共享主机的pid名称空间
--net = host让容器共享主机的网络名称空间
--ipc = host允许容器共享主机ipc名称空间

请注意,由于要与主机共享PID或IPC名称空间,因此我们必须禁用SELinux分隔,才能使它们起作用。

docker run -ti --pid=host --net=host --ipc=host rhel7 /bin/sh

您可能需要阅读《 Super Privileged Containers 》一文中的其他信息。

翻译自: https://opensource.com/business/15/3/docker-security-tuning

docker 安全性

docker 安全性_使用最新的安全性增强来调整Docker相关推荐

  1. 加入docker管理员_如何使系统管理员和开发人员同意Docker

    加入docker管理员 在短短两年内,将Docker用作应用程序容器管理系统已成为开发人员和系统工程师的标准做法. 有人喜欢说,自Ope​​nSSH以来,还没有看到这样的技术进步. Docker现在是 ...

  2. 软件开发安全性_开发具有有效安全性的软件的最佳方法

    软件开发安全性 Casey将于10月4日在柏林LinuxCon上发表演讲 . 无论您进行编程的级别如何,安全性都将受到阻碍. 似乎没有多少应用程序抽象或现代开发过程能够使开发人员免受安全性带来的障碍. ...

  3. 群晖docker火狐_群晖 篇一:群晖docker安装Bitwarden教程

    群晖 篇一:群晖docker安装Bitwarden教程 2019-04-07 18:17:54 22点赞 179收藏 29评论 小编注:此篇文章来自即可瓜分10万金币,周边好礼达标就有,邀新任务奖励无 ...

  4. 把代码和环境做成docker镜像_新手指南:如何将应用打包成为 Docker 镜像?

    虽然 DockerHub 提供了大量的镜像,但是由于企业环境的多样性,并不是每个应用都能在 DockerHub 找到对应的镜像来使用.那就要求企业的运维人员掌握制作 Docker 镜像的技能.在开始打 ...

  5. 微服务微应用的安全测试_提高微服务安全性的11个方法

    1.通过设计确保安全 设计安全,意味着从一开始就应该将安全性纳入软件设计中.关于安全,其中最常见的一个威胁就是恶意字符. 我问我的朋友罗伯·温奇(Rob Winch)他对删除恶意字符的想法.Rob是S ...

  6. spring安全性_具有PreAuthorize的Spring方法安全性

    spring安全性 朋友不允许朋友写用户身份验证. 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK. 数分钟之内即可在任何应用程序中对用户进行身份验证,管理和保护. 本教程将探讨使 ...

  7. 打docker镜像_从安全到镜像流水线,Docker 最佳实践与反模式一览

    作者 | Timothy Mugayi 译者 | 弯月,责编 | 夕颜 封图 | CSDN付费下载自视觉中国 出品 | CSDN(ID:CSDNnews) 在使用Docker的大部分时间里,我们并不关 ...

  8. 【Docker技术入门与实践(第2版)】Docker入门_学习笔记

    第一章 1 Docker入门须知 1.1 Docker基本知识 Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,最初发 起者是dotCloud公司.Docker自开源后受到广泛的关 ...

  9. docker容器内漏洞_如何在2020年发现和修复Docker容器漏洞

    docker容器内漏洞 Containerization allows engineering teams to create a sandbox environment in which to ru ...

最新文章

  1. react 禁止微信调整字体大小
  2. Qt应用程序主窗口之一:主窗口框架
  3. 【spring 配置文件】spring配置文件的解析
  4. 中小型研发团队架构实践:集中式日志ELK
  5. 贝特朗奇论 用计算机,关于贝特朗奇论的一点思考
  6. 大学计算机专业分流考试,北京林业大学计算机类(入学一年后分流至计算机科学与技术、数字媒体技术、网络工程、计算机科学与技术(物联网))专业2016年在江苏理科高考录取最低分数线...
  7. 《HiWind企业快速开发框架实战》(2)使用HiWind创建自己的项目
  8. 自制简易浏览器(Python)
  9. antd-vue 划上表格内容显示气泡框及提示内容
  10. Python初级双层for循环嵌套求素数合数和循环打印**
  11. xml保存图片和读取图片(一)
  12. ZY Player 2.8.3 中文版 (全网视频播放器)
  13. 实战:Gateway API-2022.2.13
  14. 虚拟机的虚拟化如何开启?
  15. makefile文件的创建
  16. 5.5 图层样式的复制和粘贴 [原创Ps教程]
  17. 视频编码技术 -1.2色彩原理
  18. 温度 数值模拟 matlab,基于Matlab导热问题的数值模拟.pdf
  19. android华为手机虚拟键盘盖住底部,Android 虚拟键盘遮挡住页面问题我遇到的坑及个人解决办法...
  20. windows黑窗口启动jar包常用命令

热门文章

  1. Web开发小结 - 2
  2. Tokyo Tyrant基本规范(1)--介绍和安装
  3. 《BI那点儿事》数据流转换——透视
  4. rabbitmq监控queue中message数量
  5. 终于看到这么贱的星座分析了
  6. 操作系统(5)-进程调度算法
  7. java web 统计_Java web网站访问量的统计
  8. 那个linux系统自带应用商店,如何在荣耀笔记本(Linux版)中拥有deepin应用商店?...
  9. 关于web前端中文站(www.lisa33xiaoq.net)侵权业余草(www.xttblog.com)相关文章的公告...
  10. Linux 权限管理之基本权限