【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

在生产环境中安全地运行 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:002514
用户头像

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

关注

评论

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

Hive窗口函数/分析函数详解

五分钟学大数据

hive 1月月更

你会几种读取/加载 properties配置文件方法

华为云开发者联盟

Java 开发 ClassLoader properties 配置文件

Java自定义DNS解析器三种实践

FunTester

Java 性能测试 DNS FunTester 自定义DNS

Spark性能调优-RDD算子调优

五分钟学大数据

spark 1月月更

SQL基于时间的盲注过程

喀拉峻

网络安全

剖析CWE视图的层次定义和解析方式

华为云开发者联盟

存储 视图 cwe CWE节点 CWE视图

学生管理系统架构设计

孙强

架构实战营

基于esbuild的universal bundler设计

字节跳动终端技术

json 字节跳动 前端 火山引擎 lynx

多协议接入框架 xRPC 发布在即,为你解读更多 APISIX 生态细节

API7.ai 技术团队

后端开发 api 网关 后端技术 后端数据

再获认可 | 优麒麟荣获“最佳技术社区运营”奖

优麒麟

Linux InfoQ 2022 优麒麟

Linux之grep命令

入门小站

Linux

书单 | 致敬计算机视觉领域经典著作!

博文视点Broadview

【架构训练营模块一作业】微信业务架构图 & 学生管理系统

yhjhero

架构实战营

WGCLOUD和zabbix、prometheus(普罗米修斯)有什么区别

王逅逅

服务器部署 运维平台 zabbix Prometheus linux security

虎啸龙吟之国产数据库风云榜-2022年01月

墨天轮

数据库 国产数据库

2022 福虎芯旺 | 旺链科技新春线上年会回顾

旺链科技

区块链 产业区块链 年会

做了5年后端研发,靠着这份面试题跟答案,我从12K变成了30K

碌碌无为小码农

Java 架构 程序人生 编程语言 经验分享

源码深度剖析:Eureka与Ribbon是怎么做服务发现的?

碌碌无为小码农

Java 架构 程序人生 编程语言 经验分享

深入浅出 Apache Pulsar(5)Pulsar Connectors

云智慧AIOps社区

Java kafka 云原生 消息中间件 Apache Pulsar 消息系统

恒源云(GPUSHARE)_【Object Detection 20年】小结

恒源云

深度学习 计算机视觉 目标检测

微信业务架构 & 学生管理系统架构设计

王大胖

10倍!BoostKit鲲鹏全局缓存3大创新技术助力Ceph性能提升

华为云开发者联盟

Ceph 鲲鹏 BoostKit鲲鹏全局缓存技术 BoostKit 全局缓存

2022年运维工程师必备利器-云管平台

行云管家

云计算 运维 云管平台 2022

云平台和云管平台的三大区别详细解析-行云管家

行云管家

云计算 云服务 云平台 云管平台

ReactNative进阶(三十三):Mac 下 homebrew 的安装和 brew 命令的使用

No Silver Bullet

homebrew React Native 1月月更

超赞:不愧是“阿里内部Redis学习笔记”从头到尾,全是精华

碌碌无为小码农

Java 面试 程序人生 编程语言 经验分享

Think in Mingdao——人人都是全栈工程师

明道云

在线TOML转YAML工具

入门小站

工具

写给Android开发者的芯片知识

轻口味

人工智能 android 行业资讯 芯片 1月月更

鸿蒙轻内核源码分析:Newlib C

华为云开发者联盟

鸿蒙 内核 LiteOS-M Newlib C Newlib

☕【Java深层系列】「并发编程系列」让我们一起探索一下CountDownLatch的技术原理和源码分析

洛神灬殇

Java 并发编程 jdk8 1月月更

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