TLDR
kubernetes)似乎没有一种很好的devop/configuration-as-code方法来获得对坞库卷的正确所有者/权限设置,因此(非根用户)不能写入卷。然后,当以non-root用户的身份运行容器进程时,什么是好做法?我想要写入(cloudstor,aws)停靠卷。
长话短说
在(和外部)坞容器中以根用户身份运行进程被认为是错误的做法(例如,请参见ref1、ref2、.)。这可能会对安全产生影响。
但是,当我们开始使用docker卷,而非根用户试图写入卷时,问题就开始了。我找不到一个干净的解决方案,可以在没有人工干预的情况下,在云基础设施上工作。我发现的工作解决方案在某些方面似乎都不完善(安全性、可维护性、.)。
顺便提一下,我们正在docker-swarm上部署,使用cloudstor提供aws-ebs卷。我们希望有一天能搬到kubernetes,但是我们还没有kubernetes,所以我们试图为我们的设置找到一个替代的解决方案。
考虑的解决办法/解决办法
1.预先创建码头映像中的卷。
如建议的这里一样,如果docker-compose创建了一个新的卷,则图像中目录的权限将被传播。
缺点:
cloudstor提供的,这可能也不起作用,因为它不会是docker-compose配置卷(没有测试)2.使用卷-供应器
hasnat创建了一个卷-供应器映像,它可以在真正的容器启动之前设置正确的文件夹权限。
缺点:
ebs卷只能安装在单个坞容器上,这导致了许多部署问题。3.使用docker run更正文件权限
一旦真正的容器在安装了卷的情况下运行(但仍然具有错误的权限),我们将调用
docker run --rm -u root -v ${MOUNT}:${TARGET} { real_image } chown -R user:group ${TARGET}缺点:
ebs卷只能在一个容器中挂载,因此会产生冲突。4.启动容器时更改所有权
这意味着:
root用户身份启动进程(否则我们无权更改目录所有者/权限)non-root用户缺点:
5.以根的形式运行
这是最简单的解决方案,但是安全又如何呢?每个人都建议而不是来做这个?
6.使用kubernetes
正如建议的这里,对于kubernetes,我们可以为卷分配一个组id。库伯奈特豆荚文件似乎证实了这一点。
缺点:
kubernetes。7.在文件系统上创建具有正确权限的文件夹
确保文件系统中存在具有正确所有者/权限的目录。
不利
cloudstor的原因,它允许我们切换可用性区域)发布于 2020-09-23 06:37:57
我投票赞成解决方案4,没有安全问题要将权限更改为root,然后以非root身份启动应用程序。如果您的应用程序中存在安全漏洞,那么无论在启动之前发生了什么,应用程序仍然没有以根用户的身份运行。您可以在入口点中的脚本中使用此操作。
https://stackoverflow.com/questions/63815186
复制相似问题