Quay lại danh sách
Tin tức công nghệ

Tăng cường bảo mật hạ tầng: Chạy Container không cần quyền Root với Podman và systemd

12 tháng 6, 2026

Giới thiệu: Sự chuyển dịch tất yếu sang Rootless Container

Trong môi trường hạ tầng công nghệ hiện đại, bảo mật luôn được đặt lên hàng đầu. Đối với các kỹ sư hệ thống và chuyên gia DevOps, việc quản lý các container thường mặc định gắn liền với quyền root. Tuy nhiên, việc chạy Docker daemon với quyền root từ lâu đã là một lỗ hổng tiềm tàng, cho phép bất kỳ tiến trình nào bị thỏa hiệp cũng có thể kiểm soát toàn bộ hệ điều hành host. Đó là lý do tại sao Podman ra đời và trở thành giải pháp thay thế mạnh mẽ, cho phép chạy container hoàn toàn không cần đặc quyền root.

Việc kết hợp Podman với systemd không chỉ giúp giải quyết bài toán bảo mật mà còn mang lại khả năng quản lý vòng đời ứng dụng chuyên nghiệp, đảm bảo các dịch vụ container tự động khởi chạy khi hệ thống khởi động.

Tại sao nên chuyển sang Podman Rootless?

Khác với kiến trúc daemon-based truyền thống, Podman hoạt động theo kiến trúc fork/exec. Điều này mang lại những ưu điểm vượt trội:

  • Giảm thiểu bề mặt tấn công: Ngay cả khi container bị tấn công, kẻ tấn công cũng không thể chiếm quyền root trên máy chủ host.
  • Phân quyền chặt chẽ: Người dùng chỉ có quyền quản lý các container của chính họ, tránh xung đột giữa các môi trường phát triển và vận hành.
  • Không có Daemon tập trung: Không có "Single Point of Failure". Nếu một tiến trình Podman bị lỗi, nó không làm ảnh hưởng đến toàn bộ hệ thống container trên máy chủ.

Thiết lập môi trường: Chuẩn bị cho Podman

Để bắt đầu, hãy đảm bảo bạn đã cài đặt Podman trên hệ thống Linux (RHEL, Fedora, CentOS hoặc Ubuntu). Sau khi cài đặt, bước quan trọng nhất là cấu hình subuid và subgid. Các tệp tin này định nghĩa phạm vi ID người dùng mà container có thể sử dụng để ánh xạ các đặc quyền bên trong container sang các UID không đặc quyền bên ngoài.

Sử dụng lệnh sau để kiểm tra cấu hình:

grep $USER /etc/subuid /etc/subgid

Nếu chưa có, bạn cần thêm người dùng của mình vào các tệp này với phạm vi UID đủ rộng (thường là 65536 UID).

Tích hợp Podman với systemd

Một trong những thách thức của việc chạy rootless là làm sao để container chạy như một dịch vụ nền ổn định. systemd là công cụ hoàn hảo cho việc này. Podman cung cấp khả năng tạo ra các file unit cho systemd một cách tự động.

Bước 1: Chạy Container

Đầu tiên, hãy khởi chạy container của bạn như bình thường với Podman:

podman run -d --name web-server -p 8080:80 nginx

Bước 2: Tạo File cấu hình Systemd

Podman có thể tự động sinh ra file unit file cho bạn:

podman generate systemd --name web-server --files --restart-policy=always

Lệnh này sẽ tạo một file container-web-server.service trong thư mục hiện tại. Hãy di chuyển file này vào thư mục ~/.config/systemd/user/ để quản lý như một dịch vụ người dùng.

Bước 3: Kích hoạt dịch vụ

Sau khi copy file, hãy chạy các lệnh sau để hệ thống nhận diện cấu hình mới:

  1. systemctl --user daemon-reload
  2. systemctl --user enable container-web-server.service
  3. systemctl --user start container-web-server.service

Lưu ý quan trọng: Để dịch vụ tự động chạy ngay cả khi bạn không đăng nhập vào hệ thống, hãy đảm bảo rằng bạn đã chạy lệnh loginctl enable-linger $USER. Đây là bước mà nhiều kỹ sư thường bỏ qua.

Quản trị và Giám sát

Khi đã chuyển sang mô hình này, việc quản trị trở nên trực quan hơn rất nhiều. Bạn có thể sử dụng các lệnh journalctl để xem log của container như bất kỳ dịch vụ systemd nào khác:

journalctl --user -u container-web-server.service -f

Cách tiếp cận này không chỉ giúp bạn giữ cho môi trường host sạch sẽ mà còn tuân thủ nghiêm ngặt các tiêu chuẩn về Principle of Least Privilege (Nguyên tắc đặc quyền tối thiểu) trong an ninh mạng.

Kết luận

Việc chuyển đổi sang chạy container với Podman không cần quyền root và quản lý bằng systemd là một bước tiến quan trọng trong lộ trình chuyên nghiệp hóa hạ tầng IT. Mặc dù cần thời gian để làm quen với các khái niệm mới, nhưng lợi ích về mặt bảo mật và tính ổn định là vô cùng to lớn. Hãy bắt đầu thử nghiệm trên môi trường phát triển (development) ngay hôm nay trước khi triển khai quy mô lớn.