
Docker Container 安全加固實戰:5 步鎖死你個 Container 唔好俾人爆
Docker 好多人用,但唔係個個識安全設定。作為 IT 人,成日見到同事一句 `docker run` 就隊個 container 出街,乜 security option 都冇落,root user 照行,俾人爆咗都唔知咩事。今日呢篇 Docker Container 安全教學,同你 step-by-step 示範點樣鎖死個 container,由 network 到 filesystem 到 capabilities 全部封實。
Docker Container 安全第一式:絕對唔好用 root 跑 Container
好多人 Docker Container 用 root 跑,因為方便。但呢個係最大安全漏洞!root container 一旦被 escape,host 機即刻爆。用 `USER` directive 或者 `–user` flag 降權:
# 唔好咁做!
docker run -d nginx:latest
# 正確做法:指定 non-root user
docker run -d --user 1000:1000 nginx:latest
喺 Dockerfile 入面都要 set non-root user:
FROM node:20-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
WORKDIR /app
COPY --chown=appuser:appgroup . .
CMD ["node", "server.js"]
Docker Container 安全第二式:Read-Only Root Filesystem
Docker Container 好多時根本唔需要寫入 root filesystem。如果個 container 淨係 serve static content 或者行 API,set `–read-only` 係最穩陣:
docker run -d --read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=64m \
--tmpfs /var/run:rw,noexec,nosuid,size=64m \
nginx:latest
`–tmpfs` 俾返必需寫入嘅目錄,但要限制 size 同權限。咁樣就算 attacker 成功入到 container,都冇辦法寫 malware 入 filesystem。
Docker Container 安全第三式:Capabilities 最小化
Linux capabilities 係 root privilege 嘅細分。Container 唔需要 `SYS_ADMIN` 或者 `NET_RAW`。Docker 預設已經 drop 咗部分,但你可以再 aggressive 啲:
docker run -d \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
--cap-add=CHOWN \
nginx:latest
先 drop 全部,再 add 返必需嘅,咁樣 Docker Container 就只得最基本嘅權限。
Docker Container 安全第四式:Resource Limits 防 DDoS
冇 set resource limit 嘅 Docker Container,一個 fork bomb 就可以食晒成部機嘅 CPU/memory。用 `–memory` 同 `–cpus`:
docker run -d \
--memory="256m" \
--memory-swap="512m" \
--cpus="1.5" \
--pids-limit=100 \
nginx:latest
特別係 `–pids-limit`,防止 fork bomb 係必須 set 嘅 Docker Container 安全措施。
Docker Container 安全第五式:Network Segmentation + Image Scanning
Docker Compose 入面一定要定義 custom network,唔好全部隊去 default bridge:
version: "3.9"
services:
frontend:
image: nginx:latest
networks:
- frontend-net
backend:
image: my-api:latest
networks:
- frontend-net
- backend-net
database:
image: postgres:16
networks:
- backend-net
networks:
frontend-net:
driver: bridge
backend-net:
driver: bridge
internal: true # 唔俾出 internet
最後,每次 pull image 之前用 `docker scout` 或者 Trivy scan:
docker scout quickview nginx:latest
docker scout cves nginx:latest
# 或用 Trivy
trivy image nginx:latest
Docker Container 安全 Bonus:Seccomp + AppArmor
進階少少,用 custom seccomp profile 限制 system call:
docker run -d \
--security-opt seccomp=/path/to/custom-profile.json \
--security-opt apparmor=docker-nginx \
nginx:latest
結語:Docker Container 安全唔係 option,係基本
🔗 參考資料:NVD NIST 漏洞資料庫
上面 5 招 Docker Container 安全設定,做齊咗之後你個 container 嘅 attack surface 會大幅縮小。IT 世界冇 100% 安全,但至少唔好做最易俾人爆嗰個。由今日開始,每次 `docker run` 之前問自己:我用咗 non-root 未?set 咗 read-only 未?drop 咗 capabilities 未?
Docker #Container安全 #DevSecOps #資安 #Linux
📌 延伸閱讀:



