【问题标题】:Docker secrets and RSA keysDocker 机密和 RSA 密钥
【发布时间】:2017-11-14 23:25:43
【问题描述】:

我有一个 Docker 群,我想在服务中使用秘密 RSA 密钥通过 SSH 连接到另一个容器。

我的安全策略是所有机密(密码、密钥等)都存储在与目标服务器(Swarm)不同的机器上。

实际上(我不喜欢它),在我的 Dockerfile 中我创建了一个临时目录/run/secrets

mkdir -p /run/secrets

然后我创建伪造的id_rsaid_rsa.pub 文件:

touch /run/secrets/id_rsa
touch /run/secrets/id_rsa.pub

现在我创建一个符号链接:

ln -s /run/secrets/id_rsa /root/.ssh/id_rsa
ln -s /run/secrets/id_rsa.pub /root/.ssh/id_rsa.pub

我这样做是因为我没有找到复制 docker-entrypoint.sh 中的秘密的方法:在入口点中我不是 root,所以我无法在 /root 目录中复制。

所以,我已经在使用 Docker 机密,但这里的问题是容器内的机密是只读的。这会影响 SSH 的使用:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0444 for '/root/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

我无法修改我的id_rsa 文件的权限,因为它是只读的。

是否有解决方法或只是更好的方法?

谢谢

编辑 1:

我正在尝试更改构建 Docker 映像的方式,以便复制 /root/.ssh 目录中的密钥。

【问题讨论】:

  • 在 Dockerfile 中,您可以使用 USER 语句更改用户。此外,ssh 密钥的权限应该是 600 而不是 444 - chmod 600 <PATH_TO_KEY>
  • 是的,我知道,这就是我的问题。使用 Docker 的秘密,我无法更改权限,因为它们是只读的。
  • 能否提供Dockerfile?
  • 我唯一能告诉你的是我的 Dockerfile 继承了postgres:9.6.5 镜像。我没有在其中找到任何对 USER 的引用,但我正在调查 :) 感谢您的帮助!
  • 为什么要在入口点复制密钥而不是在构建映像时复制?

标签: docker ssh docker-swarm


【解决方案1】:

考虑使用 compose 文件创建堆栈。 这使您可以选择更改机密的文件权限。

version: "3.1"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    secrets:
      - source: my_secret
        target: redis_secret
        uid: '103'
        gid: '103'
        mode: 0440
secrets:
  my_secret:
    file: ./my_secret.txt
  my_other_secret:
    external: true

更多信息可以在这里找到:https://docs.docker.com/compose/compose-file/#long-syntax-2

【讨论】:

  • 谢谢!例如,我看到您可以使用选项 --secret my_secret,mode=0400 运行服务。
  • 即使我的问题比我的问题大,你是对的,你回答了我的“真正”问题:RSA 密钥的权限。
猜你喜欢
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多