1. Mục đích của chỉ thị USER
- Tạo người dùng không có quyền root (non-privileged) cho container.
- Các lệnh sau chỉ thị
USER(RUN,CMD,ENTRYPOINT) sẽ được thực thi dưới quyền tài khoản đó. - Khi truy cập vào container, bạn không còn là root ➜ tăng cường tính bảo mật cho hệ thống.
1.1. Cấu hình Dockerfile tạo user không có quyền root (CentOS)
FROM centos:latest
## Tạo user cloud_user dùng shell bash
RUN useradd -ms /bin/bash cloud_user
## Thiết lập user mặc định cho container
USER cloud_user
Ghi chú: -m: tạo home directory (/home/cloud_user), -s /bin/bash: chỉ định shell mặc định.
1.2. Build và khởi chạy Container
docker image build -t centos7/nonroot:v1 .
docker container run -it --name test-build centos7/nonroot:v1 /bin/bash
Kết quả: Khi đính kèm vào container, tài khoản đăng nhập là cloud_user ➜ không có quyền quản trị root.
1.3. Hướng dẫn truy cập quyền Root trong Container khi cần Debug
docker container exec -it -u 0 test-build /bin/bash
Ghi chú: Tham số -u 0 (hoặc -u root) cho phép mở phiên làm việc mới dưới quyền root (UID 0) để phục vụ kiểm tra/sửa lỗi.
2. Thực hành cấu hình an toàn với ứng dụng Node.js
2.1. Cấu trúc Dockerfile mẫu
FROM node:12
RUN useradd -ms /bin/bash node_user
USER node_user
COPY ./src /home/node_user
WORKDIR /home/node_user
RUN npm install
EXPOSE 3000
CMD ["npm", "start"]
2.2. Build và khởi chạy Container Node.js
## Build Image
docker image build -t linuxacademy/weather-app-nonroot:v1 .
## Khởi chạy Container
docker container run -d \
--name weather-app-nonroot \
-p 8086:3000 \
linuxacademy/weather-app-nonroot:v1
2.3. Kiểm tra hoạt động ứng dụng
curl localhost:8086
3. Tổng kết
- Tạo tài khoản không có quyền root bằng lệnh
useradd. - Sử dụng chỉ thị
USERtrong Dockerfile để chạy container dưới tài khoản an toàn. - Linh hoạt chuyển lại quyền root khi cần debug bằng
docker exec -u 0. - Áp dụng thành công cho ứng dụng Node.js thực tế.