Cách viết Dockerfile bảo mật: Chạy non-root user, multi-stage và quét vulnerability với Trivy
Hiểm họa khi chạy Container bằng quyền Root Mặc định, nếu bạn không khai báo chỉ thị USER trong Dockerfile, tiến trình ứng dụng bên trong container sẽ chạy với đặc quyền tối cao: root UID 0. Nếu ứng …
☰ Mục lục bài viết (4 phần) Mở / Đóng mục lục
Hiểm họa khi chạy Container bằng quyền Root#
Mặc định, nếu bạn không khai báo chỉ thị USER trong Dockerfile, tiến trình ứng dụng bên trong container sẽ chạy với đặc quyền tối cao: root (UID 0).
Nếu ứng dụng web của bạn có lỗ hổng thực thi mã từ xa (RCE) hoặc hacker thoát được khỏi sandbox của container (Container Escape), chúng sẽ có ngay quyền root trên chính máy chủ vật lý của bạn!
Dưới đây là checklist 5 bước bắt buộc để đóng gói Dockerfile an toàn chuẩn CIS Benchmark.
Checklist Dockerfile bảo mật#
# 1. Chọn base image cụ thể và đáng tin cậy (tránh dùng tag :latest)
FROM node:20.18-alpine3.20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Stage Runtime
FROM node:20.18-alpine3.20 AS runner
WORKDIR /app
# 2. Cài đặt các bản vá bảo mật mới nhất của OS
RUN apk update && apk upgrade && rm -rf /var/cache/apk/*
# 3. Tạo user và group riêng biệt không có quyền root
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
# 4. Phân quyền thư mục chính xác
COPY --from=builder --chown=appuser:appgroup /app/dist ./dist
COPY --from=builder --chown=appuser:appgroup /app/node_modules ./node_modules
# 5. CHUYỂN SANG USER BẢO MẬT TRƯỚC KHI CHẠY!
USER appuser
EXPOSE 3000
CMD ["node", "dist/main.js"]
Quét lỗ hổng tự động bằng Trivy trong CI/CD#
Tích hợp công cụ quét bảo mật mã nguồn mở Trivy vào GitHub Actions:
# Quét image và chặn build nếu có lỗ hổng nghiêm trọng (CRITICAL)
trivy image --severity HIGH,CRITICAL --exit-code 1 your-app:latest
Góc thảo luận#
Image production của bên bạn đã chuyển sang chạy user phi-root chưa? Bạn có đang bật công cụ quét lỗ hổng bảo mật nào trong CI/CD pipeline không?
Xem thêm nội dung liên quan:
Thảo luận
1 phản hồi
Tham gia thảo luận
Bài liên quan trong #DevOps & Cloud
-
Áp dụng Model Context Protocol (MCP) của Anthropic để kết nối AI với Postgres và Docker
Hoàng Nam (Tech Lead) · 💬 1 -
Cấu hình Rate Limiting ở tầng Nginx và API Gateway: Chống DDOS Layer 7 hiệu quả
Đức Huy (DevOps Specialist) · 💬 1 -
Giám sát và Tracing LLM trong Production: Đánh giá LangSmith vs Langfuse
Đức Huy (DevOps Specialist) · 💬 1 -
Chiến lược sao lưu (Backup) và phục hồi (Disaster Recovery) PostgreSQL chuẩn RPO và RTO
Thu Trang (Backend Engineer) · 💬 1 -
Sử dụng Cloudflare Tunnel để expose local service ra internet an toàn không cần mở port modem
Việt Anh (Cloud Architect) · 💬 1