非 root 用户的 docker 秘密

VsM*_*VsM 7 security docker docker-secrets

我有一个非 root 用户运行的 docker 容器以提高安全性,但它似乎无法访问我与之共享的秘密:

Importing account from "/run/secrets/authority.priv.json" failed: Permission denied (os error 13)
Run Code Online (Sandbox Code Playgroud)

我在我的 docker compose 中尝试了不同的解决方案:1. 将 uid 和 gid 设置为 1000(如果用户在容器内,则设置为 uid/gid) 2. 将模式设置为 0444 甚至 0777

但是这些都没有奏效,只有使用 root 才能使用这些秘密。

任何的想法?

额外的问题:在 kubernetes 中会出现同样的问题吗?

码头档案:

FROM parity/parity:v2.2.1
LABEL maintainer="vincent@serpoul.com"

# SAD but It seems impossible to read the secrets otherwise
USER root

VOLUME ["/home/parity/.local/share/io.parity.ethereum"]

ADD ./configPoANode.toml /home/parity/configPoANode.toml
ADD ./PoA.json /home/parity/PoA.json
ADD ./entrypoint.sh /home/parity/entrypoint.sh

ENTRYPOINT ["/home/parity/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)

附录:存储库(dockerfile 中有用户 ROOT):

小智 36

使用RUN --mount=type=secret,id=mysecret,uid=1000 cat /run/secrets/mysecret

mysecret你传递给哪里的docker build --secret id=mysecret,src=authority.priv.json是奇偶校验uid用户uid的。

  • 谢谢您,由于某种原因,这个答案很难找到。我敢打赌,超过 75% 的 docker 容器都是以 root 身份运行的,这其中存在很多问题。 (4认同)
  • 您还可以使用 ARG,这样就不必对 UID 进行硬编码(使用 `--build-arg` 来设置 ARG 的值) (2认同)

lep*_*ndu 0

这是因为您在 docker 容器中设置 root 用户,并且 root 拥有所有蒙特卷和文件,而不是我不确定是否存在的奇偶校验用户。
我会做以下事情:

USER root从 dockerfile 中删除。默认是root。

检查parity用户是否存在于容器中。

如果没有,请使用/home/parity目录创建它。

像您一样安装卷和文件。

RUN chown -R parity:parity /home/parity赋予新创建用户的所有权。

然后告诉容器默认使用新创建的用户USER parity

添加您可能需要的入口点,RUN chmod ug+x /home/parity/entrypoint.sh以确保它可以执行。

一切顺利(希望),运行容器时不需要设置任何用户,默认情况下USER parity将使用该parity用户。