非root用户的docker机密

时间:2018-11-20 03:47:35

标签: docker security docker-secrets

我有一个与非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中会不会是同样的问题?

dockerfile:

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"]

附录:repository(在dockerfile中具有用户ROOT):

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

这是因为您要在docker容器中设置root用户,并且root拥有所有经过精装的卷和文件,而不是我不确定甚至还不存在的奇偶校验用户。
我将执行以下操作:

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

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

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

像以前一样安装卷和文件。

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

然后告诉容器默认使用USER parity

使用新创建的用户

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

您很乐意(希望如此),运行容器时无需设置任何用户,行USER parity会默认使用parity用户。