我在一個Docker容器中運行Nginx,爲了安全起見,我想盡可能多地釋放Linux能力。我可以在Docker Nginx容器中放置哪些功能?
然後我可以放棄哪些功能?
的圖像是類似於標準多克爾Nginx的高山圖像的位置:https://github.com/nginxinc/docker-nginx/blob/0c7611139f2ce7c5a6b1febbfd5b436c8c7d2d53/mainline/alpine/Dockerfile,其開始Nginx的作爲根,然後運行工作進程作爲用戶的nginx',看:
[email protected]:/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:....'指令裝載一些目錄。
顯然,這些都是能力泊塢贈款默認容器:
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會刪除除「」之外的所有功能,這可能意味着不需要刪除任何功能? ...
...但是有this Red Hat blog post關於丟失這些功能的丟失 - 所以似乎(一些)默認功能是不需要的。不知道該相信什麼,而且我想知道是否人們知道哪些功能可以(應該)被丟棄。我可能會測試自己,但即使我測試了一個功能,並且幾個小時或幾天似乎都可以正常工作 - 我可能仍然放棄了錯誤的功能?可能會出現問題,甚至更晚?喜歡更安全都問,這裏&測試自己,而不是隻測試自己)
(我很驚訝這還沒有已經回答了其他地方?難道沒有多少人在使用泊塢窗Nginx的,因而想要降低功能?)
我覺得你回答了你自己的問題。您確定了所需的功能,現在只需指定允許這些功能就可以放棄其他功能。 –
@MattSchuchard我不關注 - 我不認爲我確定了Nginx容器需要的功能?上面的列表是Docker默認授予任何容器的功能。其中一些是需要的,我會想,但也許不是全部。我想知道列表中的哪些功能不需要,可以放棄。 (我更新了這個問題,以澄清這個列表是Docker默認授予任何容器的功能。) – KajMagnus
哦,我得到seccomp與功能混淆。好的,你可以做的是運行你的容器並使用'pscap'和'filecap'來查看你的容器需要什麼功能。使用'captest'來測試它們。然後,使用'--cap-drop ALL --cap-add foo'刪除所需的所有功能。點擊這裏查看更多信息https://github.com/docker/labs/tree/master/security/capabilities。讓我知道這是怎麼回事。 –