我们已经开始广泛使用docker(我们喜欢它),但发现了一个相当讨厌的安全问题。链接容器可以完全访问源容器的环境设置。
例如,假设您创建了一个mysql容器。
docker run --name db -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql
现在你创建一个wordpress容器
docker run --name wp --link db:db \
-e WORDPRESS_DB_USER=wp \
-e WORDPRESS_DB_PASSWORD=1234 \
-d wordpress
如果您现在检查wordpress容器中的环境,您将能够看到mysql root密码。
docker exec -i wp sh -c "env|grep ^MYSQL_MYSQL_ENV"
MYSQL_ENV_MYSQL_MAJOR=5.7
MYSQL_ENV_MYSQL_ROOT_PASSWORD=mysecretpassword
MYSQL_ENV_MYSQL_VERSION=5.7.5-m15
这是一个重大的安全漏洞! wordpress容器中的任何随机代码或模块都可以使用mysql root密码来连接和reek havoc。如果mysql数据库与多个wordpress容器(和joomla容器)共享,那么破坏可能是全局的。
我的问题是,有没有办法限制链接容器之间传递的环境变量?
第二个问题 - 我仔细检查了关于连接容器的文档https://docs.docker.com/userguide/dockerlinks/#environment-variables
但它没有描述这种行为。我想也许这是一个意想不到的副作用,也许我应该打开一个错误报告?
答案 0 :(得分:0)
我的问题是,有没有办法限制链接容器之间传递的环境变量?
如果您的环境中存在这种问题,最好的办法是采用容器链接以外的解决方案进行服务发现。例如,您可以使用其中一种etcd
支持的发现机制 - 直接使用etcd
,或consul,registrator或{ {3}}