非root用户的docker机密



为了更好的安全性,我有一个非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(:

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

其中mysecret是传递给docker build --secret id=mysecret,src=authority.priv.json的内容,uid是奇偶校验用户的uid

要扩展@nishant-kottary的答案,但对于构建工具(非常相似(,您可以:

  1. 运行命令docker run -it --rm <YOUR_IMAGE_HERE> bash -c 'id -u $(whoami)'以获取用户的uid。或者你可以使用这个的一些其他变体来获得uid

  2. 接下来,在Dockerfile中,您可以执行

RUN --mount=type=secret,id=mysecret,uid=<THE_ID_FROM_STEP_1>,target=/run/secrets/mysecret.json 
cat /run/secrets/mysecret.json
  1. 您的构建命令看起来像docker buildx build --secret id=pipconf,src=/run/secrets/authority.priv.json

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

从Docker文件中删除USER root。默认情况下,它是root。

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

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

按照您的操作装载卷和文件。

CCD_ 13给出了新创建的用户的所有权。

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

将您可能需要的入口点添加到RUN chmod ug+x /home/parity/entrypoint.sh,这肯定会使其可执行。

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

相关内容

  • 没有找到相关文章

最新更新