关于mysql容器中的密码安全性,我有几个问题。我用mysql/mysql-服务器:8.0映像。
第一个问题是
基于上面的映像在mysql容器中使用MYSQL_PASSWORD env安全吗?下面,我将详细阐述一下这一点。
我通过k8s env注入为mysql容器设置mysql密码,即在mysql容器中通过env在k8s清单文件中使用k8s机密设置k8s env。这安全吗?这是我的第一个问题。本页下表注说,使用MYSQL_PWD(注意这不是MYSQL_PASSWORD),env非常不安全,因为ps可以显示运行进程的环境,任何其他用户都可以利用它。这是否也适用于使用MYSQL_PASSWORD而不是MYSQL_PWD的容器情况?
第二个问题是
在同一个mysql容器中运行mysql -h 127.0.0.1 -p${MYSQL_PASSWORD}
是否安全?
我需要在k8s就绪探测器中运行类似的cmd。此页的警告部分。说运行mysql -phard-coded-password
并不安全。即使像上面一样使用env,我也不确定密码是否仍然不安全,我也不确定这个警告是否适用于容器情况。
提前感谢!
发布于 2022-05-09 11:35:40
如果您的安全考虑包括通过对主机的合法登录访问保护您的数据库免受攻击者的攻击,那么最安全的选项是在文件中传递数据库凭据。原则上,命令行选项和环境变量都可以通过ps
看到.
对于数据库容器,标准Docker映像没有以这种方式提供凭据的路径。如果您在其他地方创建初始数据库,然后在生产系统上挂载结果数据目录(请考虑这一点,就像还原备份一样),那么您就不需要设置任何初始数据变量。
here$ docker run -it -v "$PWD/mysql:/var/lib/mysql" -e MYSQL_PASSWORD=... mysql
^C
here$ scp -r ./mysql there:
here$ ssh there
# without any -e MYSQL_*=... options
there$ docker run -v "$PWD/mysql:/var/lib/mysql" -p 3306:3306 mysql
更广泛地说,我还要考虑另外两件事:
docker
命令的人都可以很容易地根治整个主机。因此,如果您将Docker访问权限授予任何具有登录权限的人,那么他们可以很容易地找到凭据(如果没有其他的话,他们可以在容器中docker exec
一个cat
命令来转储凭据文件)。ENV
指令在docker history
和docker inspect
输出中对任何获得图像副本的人都是可见的。不要在您的Dockerfile中放置任何类型的凭据!实际上,我建议,如果您如此关心数据库凭据,您可能正在处理某种生产系统;如果您处理的是一个生产系统,那么能够登录到该系统的人员是有限的和可信的。在这种情况下,环境变量设置不会向任何无法阅读的人公开凭据。
(在更具体的情况下,Kubernetes Pod的环境变量由一个秘密注入,在大多数情况下,几乎没有人能够登录到一个单独的节点,并且这个秘密可以由Kubernetes RBAC保护。这是相当安全的窥探眼睛,如果设置正确。
https://stackoverflow.com/questions/72168755
复制相似问题