Rootless Container 保安攻略:點解你要轉用 Podman + 實戰設定教學

各位IT手足,今日同大家吹下水,講一個近年越嚟越Hot嘅話題 —— Rootless Container。你仲用緊 Docker 行 root daemon?係時候諗下轉用 Podman 啦!
事關最近 Linux kernel 爆咗個 CVE-2026-31431「Copy Fail」漏洞,影響到 rootless container 嘅安全性設計。想了解呢個漏洞嘅完整分析可以睇返我哋嘅 2026年5月第一週IT安全大事回顧。但有趣嘅係,呢個漏洞反而證明咗 rootless 架構嘅優勢 —— 即使 kernel 有 bug,rootless container 天然嘅隔離機制都有效阻止 privilege escalation。今日就同大家拆解下點樣搭一套穩陣嘅 rootless Podman 環境。
docker:點解 Docker root daemon 係安全隱患? | 保安攻略解析
傳統 Docker 架構有幾個致命弱點:
- Docker daemon 行 root —— dockerd 以 root 身份運行,任何可以同 daemon 溝通嘅 process 等於有 root access
- Container 內 root = Host root —— 預設情況下 container 內嘅 root user 同 host 嘅 root 係同一個 UID 0
- 攻擊面大 —— daemon 長期行 root,一旦被攻破就全機淪陷
你可能話:「我有 set user namespace 架!」但老實講,Docker 嘅 userns-remap 設定複雜到喊,好多 team 索性唔搞。
Podman Rootless 保安攻略:docker | 運作原理拆解
Podman 係 Red Hat 主導開發嘅 container engine,官方文件入面詳細介紹咗佢嘅設計理念。最大賣點係 daemonless + rootless。佢嘅 rootless 模式點運作?
- 每個 container process 以普通 user 身份行,唔需要 root daemon
- 背後用 user namespace 將 container 內嘅 root (UID 0) map 去 host 上一個 non-root UID
- Network、storage 都經由 slirp4netns 或 pasta 做 userspace networking,唔需要 root privilege
最緊要嘅係:就算 container 內有人 escape 出嚟,佢都只係你個普通 user,唔係 root! 呢個係 Defense in Depth 嘅好例子。
docker:Podman Rootless 實戰設定教學(Step-by-Step)
1. 安裝 Podman(Ubuntu 22.04+ / Debian 12)
sudo apt update
sudo apt install -y podman uidmap slirp4netns
uidmap 係關鍵套件,提供 newuidmap/newgidmap 俾 user namespace 用。slirp4netns 處理 rootless networking。
2. 確認 subuid/subgid 設定
# 睇下你個 user 有冇 subuid range
cat /etc/subuid
# 應該見到類似:
# terry:100000:65536
cat /etc/subgid
# terry:100000:65536
如果冇,手動加:
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER
呢個設定俾你個 user 有 65536 個 subordinate UID/GID,用嚟做 user namespace mapping。
3. 基本 Rootless 操作
# 唔需要 sudo!直接用你個 user
podman run -it --rm docker.io/library/alpine:latest sh
# 喺 container 入面 check下
whoami # 見到 root
id # uid=0(root)
# 但喺 host 睇返個 process:
ps aux | grep "cat /etc/os-release"
# 會見到個 process 係你個 user 擁有,唔係 root!
神奇嘅地方:container 入面你係 root,但 host 層面你只係個普通 user。呢個就係 user namespace 嘅魔法。
4. 行個 Nginx 測試
# 用 port mapping(需要大過 1024,因為冇 root)
podman run -d --name mynginx -p 8080:80 docker.io/library/nginx:latest
curl localhost:8080
# Welcome to nginx!
# 用 pasta network(Podman 4.x+ 新 default,效能更好)
podman run -d --name mynginx2 --network pasta -p 8081:80 nginx:latest
留意 rootless 之下 唔可以用 privileged port ( < 1024),除非 set net.ipv4.ip_unprivileged_port_start=80。
5. 設定 Systemd Service 自動啟動
Podman 同 systemd 整合得好好,可以 generate systemd unit file:
# 確保 container 行緊
podman ps
# Generate systemd unit
mkdir -p ~/.config/systemd/user/
podman generate systemd --name mynginx --files --new
# Enable + start
systemctl --user daemon-reload
systemctl --user enable --now container-mynginx.service
# Check status
systemctl --user status container-mynginx.service
# Enable lingering(等 container 喺 logout 後都繼續行)
sudo loginctl enable-linger $USER
6. 進階:Rootless Quadlet(Podman 新版)
Podman 4.4+ 支援 Quadlet,一種更簡潔嘅 declarative 寫法:
# ~/.config/containers/systemd/myapp.container
[Container]
Image=nginx:latest
PublishPort=8080:80
Volume=/home/terry/data:/usr/share/nginx/html:Z
Network=pasta
[Service]
Restart=always
[Install]
WantedBy=default.target
然後:
systemctl --user daemon-reload
systemctl --user start myapp.service
docker:CVE-2026-31431 同 Rootless Container 保安攻略嘅啟示
早幾日爆出嘅 CVE-2026-31431(Copy Fail)係 Linux kernel 嘅 page cache 漏洞,攻擊者可以 corrupt /usr/bin/su 嘅 page cache content 嚟執行惡意 ELF binary。但係 rootless container 入面,即使套 exploit 成功執行 setuid(0) syscall,kernel 都會因為 user namespace 嘅 uid_map 限制而拒絕提權。簡單講:
- root container: exploit 成功 → root escape → GG
- rootless container: exploit 執行到
setuid(0)→ kernel 話「你冇權 map 去 host root」→ block 咗!
呢個就係 defense in depth 嘅威力。如果你做 IT 管理,對 infrastructure 安全有要求,都值得睇下我哋嘅 SSH Server 保安實戰 10 招。
總結:docker | Rootless Container 保安攻略重點回顧
轉 rootless Podman 唔係淨係為咗追潮流,而係實實在在嘅安全提升。重點重溫:
- ✅ No root daemon = 少一個攻擊面
- ✅ Container escape 都只係普通 user
- ✅ User namespace 天然阻止 privilege escalation
- ✅ Systemd 整合得好好,production ready
- ✅ Quadlet 寫法更簡潔,似 Docker Compose
仲用緊 Docker root daemon 嘅朋友,係時候俾個機會 Podman 啦。你公司 compliance team 一定會多謝你!
有咩問題歡迎留言討論,齊齊將 infrastructure 搞得更安全。👋
#RootlessContainer #Podman #保安攻略 #Docker #Linux安全 #DevOps
總結嚟講,掌握實戰設定教學嘅核心概念,可以幫你大幅提升 IT 安全防護水平。



