8

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

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

我在我的 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"]

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

4

2 回答 2

4

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

mysecret您传递给什么docker build --secret id=mysecret,src=authority.priv.json并且uiduid奇偶校验用户在哪里。

于 2021-01-19T07:27:59.793 回答
0

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

USER root从 dockerfile 中删除。默认情况下它是根。

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

如果不使用/home/parity目录创建它。

像你一样挂载卷和文件。

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

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

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

你很好(希望如此),运行容器时不需要设置任何用户,默认情况下USER parity它将使用parity用户。

于 2018-11-20T07:13:47.693 回答