Docker Container Hardening: Cẩm Nang Bảo Mật Và Đóng Băng Container
Container mặc định KHÔNG HOÀN TOÀN AN TOÀN. Nếu bạn chạy container với quyền root mặc định và cấu hình hời hợt, một hacker khi khai thác được lỗ hổng Remote Code Execution (RCE)...
Docker Container Hardening: Cẩm Nang Bảo Mật Và Đóng Băng Container
Container mặc định KHÔNG HOÀN TOÀN AN TOÀN. Nếu bạn chạy container với quyền root mặc định và cấu hình hời hợt, một hacker khi khai thác được lỗ hổng Remote Code Execution (RCE) trong ứng dụng web có thể dễ dàng thực hiện Container Escape (Thoát chuồng) để chiếm toàn quyền kiểm soát máy chủ vật lý của bạn!
Dưới đây là 5 lớp phòng thủ bắt buộc cho mọi container chạy trên Production.
1. Không bao giờ chạy Container bằng quyền ROOT (USER nonroot)
Mặc định, tiến trình chạy trong container có UID = 0 (root). Nếu hacker leo thang đặc quyền thành công, chúng có quyền root trên chính máy chủ host!
Khắc phục trong Dockerfile:
# Tạo group và user chuyên biệt không có quyền sudo
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
# Chuyển quyền sở hữu thư mục ứng dụng
WORKDIR /app
COPY --chown=appuser:appgroup . .
# Chuyển sang user an toàn
USER appuser
2. Đóng băng hệ thống file: Read-Only Root Filesystem
Tại sao một ứng dụng web lại cần quyền ghi đè lên thư mục /bin, /usr hay /etc? Hacker thường tải mã độc (cryptominer, reverse shell) về lưu vào /tmp rồi thực thi.
Hãy biến toàn bộ filesystem của container thành chỉ đọc (Read-only):
docker run -d \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid \
--tmpfs /app/logs:rw \
--name secure-web myapp:latest
Lúc này, nếu hacker cố tải file mã độc vào container, hệ điều hành sẽ báo lỗi: Read-only file system!
3. Tước bỏ quyền năng Linux Capabilities (--cap-drop=ALL)
Linux Kernel chia quyền root thành gần 40 Capabilities riêng biệt. Mặc định Docker cấp cho container khoảng 14 capabilities (như CAP_NET_RAW, CAP_CHOWN, CAP_FOWNER). Hầu hết ứng dụng web không bao giờ cần các quyền này.
Nguyên tắc đặc quyền tối thiểu:
docker run -d \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
--security-opt=no-new-privileges:true \
myapp:latest
--cap-drop=ALL: Tước bỏ toàn bộ đặc quyền kernel.--cap-add=NET_BIND_SERVICE: Chỉ cấp duy nhất quyền mở cổng mạng < 1024 nếu cần.--security-opt=no-new-privileges:true: Ngăn chặn tiến trình con tự nâng quyền thông quasetuid.
💡 Mẹo lưu trữ & sử dụng trong đội ngũ
Bạn có thể tải bản PDF vector về lưu trữ trong kho tài liệu nội bộ của team (Notion, Confluence) hoặc in khổ A4 dán tại bàn làm việc để tra cứu nhanh khi gặp sự cố lúc nửa đêm.
Video Bóc Tách: Tối Ưu Dockerfile Layer Caching Giảm 80% Thời Gian Build
Xem video mô phỏng động trực quan đi kèm với cheatsheet này để hiểu sâu sắc cơ chế hoạt động chỉ trong 60 giây.

