我在 Docker 容器中运行 Nginx,出于安全原因,我想放弃尽可能多的 Linux 功能。
然后我可以放弃哪些能力?
该图像类似于此处的标准 Docker Nginx Alpine 图像:https ://github.com/nginxinc/docker-nginx/blob/0c7611139f2ce7c5a6b1febbfd5b436c8c7d2d53/mainline/alpine/Dockerfile ,它以 root 身份启动 Nginx,然后以 root 身份运行工作进程用户'nginx',看:
root@instance-1:/opt/ed# docker-compose exec web bash
bash-4.3# # Now we're inside the container.
bash-4.3# ps aux
PID USER TIME COMMAND
1 root 0:00 /bin/sh -c /etc/nginx/run-envsubst.sh && nginx
10 root 0:00 nginx: master process nginx
11 nginx 0:00 nginx: worker process
12 nginx 0:00 nginx: cache manager process
14 root 0:00 bash
18 root 0:00 ps aux
监听端口 80 和 443,+ 使用 Docker-Compose 的 'volume: ....' 指令挂载一些目录。
显然,这些是 Docker 默认授予容器的功能:
s.Process.Capabilities = []string{
"CAP_CHOWN",
"CAP_DAC_OVERRIDE",
"CAP_FSETID",
"CAP_FOWNER",
"CAP_MKNOD",
"CAP_NET_RAW",
"CAP_SETGID",
"CAP_SETUID",
"CAP_SETFCAP",
"CAP_SETPCAP",
"CAP_NET_BIND_SERVICE",
"CAP_SYS_CHROOT",
"CAP_KILL",
"CAP_AUDIT_WRITE",
}
从这里:https ://github.com/docker/docker/blob/master/oci/defaults_linux.go#L62-L77
我在这里找到了链接: https://docs.docker.com/engine/security/security/#linux-kernel-capabilities,并且该页面说:“默认情况下,Docker会删除除所需功能之外的所有功能”,这可能意味着那一个不需要放弃任何能力?...
...但是,有这篇 Red Hat 博客文章关于丢弃这些功能的丢失 - 所以似乎(某些)默认功能是不需要的。不知道该相信什么,我想知道人们是否知道可以(应该)放弃哪些功能。
(我也许可以测试自己,但即使我测试放弃了一项能力并且事情似乎在几个小时或几天内都可以正常工作 - 我可能仍然放弃了错误的能力?问题可能会出现,甚至更晚?所以似乎对双方都更安全在这里问和测试我自己,而不是只测试我自己)
(我很惊讶这还没有在其他地方得到回答?不是很多人在 docker 中使用 Nginx,因此想要放弃功能吗?)