Secrets và Docker daemon socket
Nhận diện những quyền có thể tương đương root trên host.
Nắm bản chất
Docker socket là giao diện điều khiển Docker daemon. Một container được mount socket có thể yêu cầu daemon tạo container/mounts mới, nên phải coi đó là quyền rất nhạy cảm. Secrets trong environment cũng có nguy cơ lộ qua logs, debug dumps hoặc process inspection.
Khi dùng CI, ưu tiên runners cô lập và token ngắn hạn có scope tối thiểu. Không chia sẻ Docker daemon của host production cho nhiều jobs không đáng tin. Cân nhắc rootless mode khi thích hợp và hiểu rõ giới hạn networking/storage của nó.
Luồng hoạt động
Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?
Lệnh & cấu hình mẫu
# Chỉ quan sát trên host lab:
ls -l /var/run/docker.sock
docker context ls
docker info --format '{{json .SecurityOptions}}'
Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.
Bài tập 10–20 phút
Kiểm kê toàn bộ Compose services có mount Docker socket, hostPath, privileged hoặc host network. Viết lý do tồn tại cho từng quyền và tìm cách bỏ nếu không cần thiết.
Lỗi dễ mắc
Không copy credentials vào image layer, Dockerfile ARG hoặc repository. Sau khi secret từng bị commit, chỉ xóa commit khỏi branch là không đủ: phải rotate secret.
Tự kiểm tra
Vì sao mount Docker socket vào ứng dụng web là nguy hiểm?Xem đáp án ↗
Vì lỗi trong web có thể bị lợi dụng để điều khiển Docker daemon và truy cập host rộng hơn.
Học thêm qua lab
Có project thực hành đúng với chương này, kèm README và những giới hạn môi trường cần lưu ý.
↓ Tải mã nguồn thực hành chương 07Đối chiếu tài liệu gốc
Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.
Mở tài liệu chính thức ↗