我在 Docker Hub 上浏览以寻找 NginX 内置镜像,并注意到在容器中将 NginX 作为 Web 服务器运行的示例命令。
我想知道 Docker Hub 上建议的这种方式是否可以加载 conf 文件
docker run --name some-nginx -v /some/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
存在安全隐患。考虑到可能发生的最坏情况(遭到黑客攻击),攻击者可以写入共享文件夹(docker 卷)。我对 PHP/FPM 也有同样的疑问。我应该映射 php-fpm .config 文件的文件夹吗?还是我应该将所有配置都隔离在容器内?
还有一件事(我第一次接触docker):将我的PHP应用程序/网站托管在容器中,我应该将php文件放在哪里? 在这种情况下,我会将文件放入“主”文件系统上的/ www / myapp中,然后将该文件夹映射到容器中的/ www / html / myapp。
感谢您的评论/建议。
答案1
在您给出的命令中,nginx.conf 文件是主机系统的唯一挂载,并且以只读方式挂载。这相对安全。
从其他容器安装卷也非常安全。
需要注意的是,如果您对主机文件夹进行了读写挂载。在这种情况下,容器中以 root 身份运行的进程可以在主机上创建 suid 文件之类的东西。即便如此,它们也需要在容器内拥有提升的权限,并且还能够在容器外运行某些东西,以利用它们创建的 suid 可执行文件。
使用 nginx 容器存储静态内容不会带来太多的攻击面,因此 nginx 以 root 身份运行可能不会成为问题,而且只有静态内容,不需要在该容器上安装任何可写卷。
php-fpm
是一个完全不同的故事。以非 root 用户身份运行它,并且不要做任何愚蠢的事情,例如安装包含主机上的 root 用户可能运行的脚本的可写卷。