QCon 全球软件开发大会倒计时2个月!讲师已确认60%+ >>> 了解详情
写点什么

在生产环境中安全地运行 Docker 容器

  • 2016-12-29
  • 本文字数:1118 字

    阅读完需:约 4 分钟

在生产环境中,强化 Docker 容器的一种方法就是使它们不可变,也就是只读。安全地运行容器的其他方法还包括最小化受攻击面和应用 Linux 安全过程,标准 Linux 安全过程和针对容器环境的特定过程都要应用。

在启动容器时传入–read-only 标记就可以在只读模式下运行它。这可以防止任何进程写入文件系统。任何试图写入的动作都会导致错误。运行这种不可变的基础设施也与其他软件部署流水线的最佳实践相吻合。

尽管不可变性可以阻止任何恶意脚本的执行,可以禁止通过在容器里运行的其他软件暴露出来的漏洞而引起的改动。但是在现实生产环境中,这种模式又是不是适用于应用程序呢?比如,要产生的日志文件和要使用数据库的应用程序就需要可写性。

写日志的一个可能的解决方案可以是使用一个集中的日志系统,比如 Elasticsearch/Logstash/Kibana(ELK),这样所有的日志都被收集在一个中心节点,可能是在另一个容器中,就不是用户可以直接访问的了。另一种替代的方案是在启动容器时,通过使用–log-driver 标记将日志导出到容器之外。对于那些需要对 /tmp 之类的临时目录有写入权限的应用程序,一种解决办法是在容器里为这些目录加载一个临时的文件系统

终端用户不能直接访问数据库,所以风险较低。然而,这并不排除受到攻击的可能,除非面对用户的应用程序得到了强化。

在不可避免地要有一个可写的文件系统的情况下,Docker 提供了审计和变化的回滚功能。在 Docker 容器里的文件系统是作为一系列层的堆叠。当创建一个新容器时,将在顶部添加一个新层,该层可以写入。Docker 存储驱动程序隐藏了这些细节,并将它作为一个普通的文件系统交付给用户。对正在运行的容器的写入将写入此新层。这通常被称为写时拷贝(Copy-On-Write,COW)。

在 Docker 容器里很容易检测到配置漂移或预期的配置变更。“docker diff”命令可以显示对文件系统的更改——无论更改操作是文件添加、删除还是修改。

除了在可能的情况下运行一个只读容器,我们提出以下建议,以确保在生产环境中容器的安全:

  • 运行一个 Alpine Linux 之类的最小的镜像,Alpine Linux 是基于安全思想而设计的。它的内核上打了一个 grsecurity 的非官方移植的补丁。 Grsecurity 是一套对 Linux 内核的安全增强方法,它包括权限控制以及消除基于漏洞的内存崩溃的可能,具体方法是将那些使系统可能被攻击的方法减少到最少。
  • 限制对 CPU、RAM 等资源的使用,以防止 DoS 攻击。
  • 在操作系统中配置线程和进程限制。
  • 采用 sysctl 之类标准的 Linux 内核强化程序。
  • 每个容器中只运行一个应用程序。建议这么做,是因为它减小了受攻击面,即对于一个给定的容器,可能的漏洞数量就只取决于在该容器上运行的应用程序了。

阅读英文原文 Running Docker Containers Securely in Production

2016-12-29 18:002494
用户头像

发布了 152 篇内容, 共 67.4 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

2019金九银十前端面经总结,牛客视频面试

Java 程序员 后端

网络安全:一次艰难的WAF绕过

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

2020年IT运维市场大前景到底怎么样,Java开发工程师需要掌握的技能

Java 程序员 后端

网易云音乐音视频算法的 Serverless 探索之路

阿里巴巴云原生

阿里云 Serverless 云原生 实践案例 合作伙伴

开源项目|Go 开发的一款分布式唯一 ID 生成系统

AlwaysBeta

golang 开源 Go 语言

18 应用服务器集群的伸缩性设计,java面试多线程和分布式

Java 程序员 后端

2021备战金三银四血拼一波算法:字节+百度,东软医疗java面试题

Java 程序员 后端

2021年第一波福利已送达!献上“独家全新,netty框架工作原理

Java 程序员 后端

2021春招总结,面了阿里,腾讯,做Java程序员真的没有春天吗

Java 程序员 后端

13万字!腾讯高工手写JDK源码笔记 带你飙向实战,linux高级教程

Java 程序员 后端

阿里云性能测试服务 PTS 新面貌 - 压测协议、施压能力全新升级

阿里巴巴云原生

阿里云 容器 云原生 性能测试 产品升级

2021年Java面试题抢先看,够全!中篇(1),Java视频课资源

Java 程序员 后端

2021年最新版阿里、腾讯、美团300道Java初级,你掌握了多少?

Java 程序员 后端

2021年高频Java面试题集锦(含答案),华为java面试视频直播

Java 程序员 后端

2021技能大赛云计算赛项先电2,java基础入门课后答案清华大学出版社

Java 程序员 后端

去年今日我凭借这份文档,摇身一变成了被BAT大牛们看中的幸运儿

Java spring 程序员 JVM Kakfa

NodeJs深入浅出之旅:异步I/O (中)🐉

空城机

JavaScript node.js 大前端 Node 11月日更

2020全网最新SQL优化面试专题及答案,java自学教程视频

Java 程序员 后端

2021年Java程序员请先把这几项硬技能熟悉掌握,再想着跳槽拿高薪(1)

Java 程序员 后端

2021年Java程序员请先把这几项硬技能熟悉掌握,再想着跳槽拿高薪

Java 程序员 后端

Flink企业级优化全面总结(3万字长文,15张图)

大数据老哥

2021最新支付宝4面+美团4面+拼多多四面面试总结,狂刷200道数据结构与算法

Java 程序员 后端

18 张图,一文了解 8 种常见的数据结构,java编程入门类pdf

Java 程序员 后端

2020云计算省赛总结,springboot教学视频

Java 程序员 后端

12 高可用的应用,微众银行java面试

Java 程序员 后端

Java Spring Boot 项目中使用结构化日志节省时间

码语者

Spring Boot Logging

2021年目前最新上千道Java面试题,刷完你不进大厂谁进大厂

Java 程序员 后端

阿里P6面试官:Redis如何实现分布式锁?锁过期了怎么办?

Java高级开发

redis Java、

13 高可用的服务,字节跳动今日学习内容

Java 程序员 后端

2021年最新基于Spring Cloud的微服务架构分析,mysql面试笔试题

Java 程序员 后端

2021年Java面试题抢先看,够全!中篇,rebbitmq教程

Java 程序员 后端

在生产环境中安全地运行Docker容器_Linux_Hrishikesh Barua_InfoQ精选文章