Đã bao giờ bạn phải gõ sudo trước mỗi lệnh Docker? Bài viết này dành cho bạn.
Theo mặc định, Docker giới hạn quyền truy cập vào daemon của nó, chỉ cho phép root và thành viên của nhóm docker chạy lệnh. Điều này giúp hệ thống an toàn hơn, nhưng khá phiền khi bạn làm việc với container cả ngày. Nhóm docker tồn tại chính vì lý do này - đểbạn dùng Docker mà không bị mật khẩu sudo làm chậm.
Khi thêm mình vào nhóm docker, bạn sẽ thấy khác biệt ngay. Bạn có thể chạy docker build, docker run và các lệnh khác mà không gặp lỗi quyền hạn hay nhắc nhập mật khẩu.
Trong bài viết này, bạn sẽ học chính xác cách thêm người dùng vào nhóm docker trên các hệ thống khác nhau, những rủi ro bảo mật cần lưu ý, và cách bảo vệ hệ thống trong khi vẫn giúp Docker dễ dùng hơn.
Khi bạn bắt đầu làm việc với Docker, bạn sớm sẽ gặp vấn đề về quyền nếu chưa thiết lập đúng.
Hãy cùng phân tích nhóm docker thực sự là gì và vì sao nó quan trọng với quy trình làm việc của bạn.
Định nghĩa và chức năng
Nhóm docker là một nhóm người dùng hệ thống cấp quyền cho thành viên dùng Docker daemon mà không cần đặc quyền sudo.
Khi bạn cài Docker trên hệ thống Linux, nhóm này thường được tạo tự động. Tệp socket của Docker (/var/run/docker.sock) thuộc sở hữu root nhưng được gán quyền nhóm cho nhóm docker, đó là cách kiểm soát truy cập hoạt động.
Người dùng trong nhóm này có thể build image, chạy container, quản lý mạng và thực hiện các thao tác Docker khác mà không cần thêm sudo trước lệnh. Điều đó nghĩa là gõ ít hơn và không bị nhắc mật khẩu khi bạn làm việc với container. Nếu thử chạy lệnh Docker khi không thuộc nhóm này, bạn sẽ gặp lỗi "permission denied", cuối cùng làm chậm tiến độ.
Hệ quả bảo mật của việc tham gia nhóm
Thêm người dùng vào nhóm docker đi kèm rủi ro bảo mật thực sự mà bạn không nên bỏ qua.
Thành viên nhóm docker có thể giành đặc quyền root trên máy chủ. Điều này xảy ra vì Docker cho phép bạn gắn (mount) thư mục host vào container, bao gồm cả thư mục hệ thống nhạy cảm. Người có quyền Docker có thể tạo container gắn toàn bộ hệ thống tệp root và chỉnh sửa bất kỳ tệp nào trên host.
Lỗ hổng thoát khỏi container cũng là rủi ro khác, vì có thể cho phép kẻ tấn công vượt qua cách ly container.
Bạn chỉ nên thêm người dùng đáng tin cậy vào nhóm docker, và ngay cả khi đó, hãy coi như đang cấp quyền root cho họ. Nhiều chuyên gia bảo mật khuyến nghị giới hạn thành viên nhóm docker chỉ cho những ai thật sự cần cho công việc hằng ngày.
Triển khai từng bước
Giờ bạn đã hiểu nhóm docker là gì và hệ quả của nó, hãy bắt tay vào thiết lập thực tế.
Tạo nhóm docker
Trong hầu hết trường hợp, bạn sẽ không cần tự tạo nhóm docker vì nó được tạo tự động khi cài Docker. Bạn có thể kiểm tra nhóm đã tồn tại bằng cách chạy:
Cờ -a nghĩa là "append" (thêm) và -G chỉ định nhóm bạn muốn thêm người dùng vào. Biến $USER tự động dùng tên người dùng hiện tại của bạn.
Với macOS và Windows, bạn có thể thêm người dùng vào nhóm qua Cài đặt hệ thống hoặc Bảng điều khiển - chỉ cần bật/tắt để thêm tất cả người dùng mong muốn:
Hình 3 - Thêm người dùng vào nhóm
Sau khi tự thêm vào nhóm, bạn phải đăng xuất và đăng nhập lại để thay đổi có hiệu lực. Phiên hiện tại sẽ không nhận nhóm mới cho đến khi bạn đăng xuất hoàn toàn. Một số hệ thống có thể cần khởi động lại:
Bạn sẽ thấy "docker" trong danh sách nhóm của mình:
Hình 4 - Xem các nhóm của người dùng
Khắc phục sự cố thường gặp
Nếu bạn vẫn gặp lỗi "permission denied" sau khi thêm mình vào nhóm, có thể cần sửa quyền của Docker socket:
sudochown root:docker /var/run/docker.sock
sudochmod660 /var/run/docker.sockĐược hỗ trợ bởi
Một vấn đề thường gặp khác xảy ra khi dịch vụ Docker khởi động lại, có thể đặt lại quyền socket. Nếu Docker được khởi động sau khi bạn thay đổi nhóm, hãy thử khởi động lại dịch vụ Docker:
Với các vấn đề quyền dai dẳng, hãy kiểm tra cấu hình dịch vụ Docker của bạn. Trên một số hệ thống, Docker có thể được cấu hình dùng tên nhóm hoặc vị trí socket khác. Bạn có thể kiểm tra tệp cấu hình Docker daemon tại /etc/docker/daemon.json hoặc các tệp dịch vụ trong /lib/systemd/system/docker.service.
Hãy nhớ mọi thay đổi quyền bạn thực hiện chỉ áp dụng cho phiên đăng nhập hiện tại sau khi bạn đăng xuất và đăng nhập lại. Đây là nguyên nhân số một của vấn đề "đã thay đổi nhưng vẫn không hoạt động".
Cân nhắc bảo mật và biện pháp giảm thiểu
Thêm người dùng vào nhóm docker có thể tạo rủi ro bảo mật mà bạn cần nhận thức. Hãy xem các rủi ro này và cách bạn có thể bảo vệ hệ thống.
Rủi ro của việc tham gia nhóm docker
Tham gia nhóm docker trên thực tế tương đương có quyền root trên hệ thống. Đây không phải cường điệu – mà là thực tế cách Docker hoạt động.
Khi ở trong nhóm docker, bạn có thể chạy container gắn các phần nhạy cảm của hệ thống tệp host. Ví dụ, lệnh đơn giản này cho phép bạn toàn quyền sửa bất kỳ tệp nào trên host:
docker run -it--rm-v /:/hostroot alpine chroot /hostrootĐược hỗ trợ bởi
Bạn cũng có thể thay đổi thiết lập Docker daemon, tạo container đặc quyền, hoặc dùng chế độ mạng host để bỏ qua cách ly mạng. Những khả năng này cho phép người dùng độc hại (hoặc ứng dụng bị xâm nhập có quyền Docker) chiếm toàn bộ hệ thống host.
Có một vài rủi ro tiềm ẩn khác bạn cần biết:
Chạy container truy cập trực tiếp thiết bị phần cứng.
Gắn kết với các cổng mạng số nhỏ.
Khởi động container với hồ sơ seccomp tùy chỉnh vô hiệu hóa kiểm soát bảo mật.
Tạo container dùng namespace tiến trình của host.
Mỗi điều này đều có thể bị lạm dụng để leo thang đặc quyền hoặc gây gián đoạn hoạt động hệ thống.
Thực tiễn tốt để giảm thiểu rủi ro
Để giảm rủi ro, hãy tuân theo nguyên tắc đặc quyền tối thiểu—chỉ cấp quyền tham gia nhóm docker cho người dùng thật sự cần. Nếu nhiều người cần dùng chung hệ thống, hãy cân nhắc tạo tài khoản người dùng riêng chỉ cho tác vụ Docker.
Chế độ rootless của Docker là lựa chọn an toàn hơn so với cách dùng nhóm docker. Rootless cho phép chạy Docker daemon và container với người dùng không phải root, không cần tham gia nhóm đặc biệt nào:
# Install Docker in rootless mode
dockerd-rootless-setuptool.sh install# Start the rootless Docker daemon
systemctl --user start dockerĐược hỗ trợ bởi
Không gian tên người dùng (user namespaces) cung cấp một lớp bảo mật khác bằng cách ánh xạ UID của container sang phạm vi khác trên host. Nghĩa là ngay cả khi container chạy với root (UID 0), tiến trình đó sẽ ánh xạ tới người dùng không đặc quyền trên host:
# Add to /etc/docker/daemon.json{"userns-remap":"default"}Được hỗ trợ bởi
Cân nhắc dùng cấp phát UID/GID tĩnh cho người dùng trong container để duy trì ánh xạ danh tính nhất quán. Trong Dockerfile, hãy tạo người dùng cụ thể với ID định trước:
# Create a user with a static UID/GID
RUN groupadd-g10001 appgroup &&\useradd-u10000-g appgroup -s /bin/bash appuser
# Switch to that userUSER appuserĐược hỗ trợ bởi
Thường xuyên kiểm tra ai đang thuộc nhóm docker bằng các lệnh như:
Kết hợp các cách tiếp cận này sẽ mang lại cho bạn và nhóm sự tiện lợi của việc tham gia nhóm docker trong khi giảm thiểu rủi ro bảo mật mà nó gây ra.
Cấu hình nâng cao và các lựa chọn thay thế
Nếu bạn muốn các cách quản lý quyền truy cập Docker khác ngoài cách thành viên nhóm chuẩn, bạn có nhiều lựa chọn. Hãy khám phá một số cấu hình nâng cao và giải pháp thay thế có thể phù hợp hơn với yêu cầu bảo mật của bạn.
Tăng cường bảo mật trong Dockerfile
Bạn có thể tích hợp bảo mật trực tiếp vào Dockerfile để giảm rủi ro ngay cả khi người dùng có quyền nhóm docker.
Trong ví dụ dưới đây, tôi sẽ dùng multi-stage build để giữ image Python nhỏ và giảm bề mặt tấn công.
Để theo dõi, hãy tạo các tệp sau:
app.py:
from flask import Flask, jsonify
app = Flask(__name__)@app.route("/api/health")defhealth():return jsonify({"status":"healthy"})if __name__ =="__main__":
app.run(host="0.0.0.0", port=8000, debug=True)Được hỗ trợ bởi
Bạn có thể build và chạy container như vậy với các lệnh sau:
# Build the imagedocker build -t my-python-app .# Run the containerdocker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE my-python-appĐược hỗ trợ bởi
Hình 5 - Chạy container với đặc quyền tối thiểu
Lệnh mới thêm - --cap-drop=ALL - loại bỏ mọi khả năng (capabilities) Linux khỏi container (hạn chế đặc quyền), trong khi --cap-add=NET_BIND_SERVICE thêm lại khả năng NET_BIND_SERVICE cho phép container gắn kết với cổng số nhỏ.
Các kỹ thuật này giới hạn những gì container có thể làm, ngay cả khi ai đó có quyền nhóm docker cố gắng lạm dụng.
sudo như một lựa chọn thay thế
Nếu bạn không muốn thêm người dùng vào nhóm docker, dùng sudo là lựa chọn thay thế khả thi. Cách này giúp bạn kiểm soát nhiều hơn và có nhật ký các lệnh Docker.
Bạn có thể tạo mục sudoers tùy chỉnh để cho phép người dùng cụ thể chỉ chạy lệnh Docker mà không cần mật khẩu:
# Add to /etc/sudoers.d/docker
username ALL=(root) NOPASSWD: /usr/bin/dockerĐược hỗ trợ bởi
Để tiện hơn, tạo alias trong tệp .bashrc hoặc .zshrc của bạn:
aliasdocker='sudo docker'alias docker-compose='sudo docker-compose'Được hỗ trợ bởi
Cách dùng sudo này mang lại bảo mật tốt hơn vì:
Mọi lệnh Docker đều được ghi vào nhật ký hệ thống.
Bạn có thể hạn chế những lệnh con Docker được phép chạy.
Người dùng không thể sửa cấu hình Docker daemon.
Nhược điểm là phải gõ nhiều hơn một chút và có thể gặp vấn đề với công cụ mong đợi truy cập Docker trực tiếp.
Lưu ý cho Windows
Windows xử lý quyền Docker khác Linux. Thay vì nhóm docker, Windows dùng nhóm docker-users.
Để thêm người dùng vào nhóm docker-users trên Windows, hãy làm như sau:
Mở Computer Management (nhấp chuột phải vào Start và chọn "Computer Management").
Đi tới System Tools > Local Users and Groups > Groups.
Nhấp đúp vào "docker-users".
Bấm "Add" và nhập tên người dùng.
Bấm "OK" và đóng Computer Management.
Hình 6 - Nhóm người dùng trên Windows
Ngoài ra, bạn có thể dùng PowerShell với quyền quản trị:
Add-LocalGroupMember -Group"docker-users"-Member"username"Được hỗ trợ bởi
Sau khi thêm người dùng, họ cần đăng xuất và đăng nhập lại để thay đổi có hiệu lực, giống như trên Linux.
Cũng cần lưu ý rằng Windows cung cấp các tính năng bảo mật bổ sung thông qua Windows Defender Application Control và chế độ cách ly Hyper-V mà Linux không có. Với môi trường yêu cầu bảo mật cao trên Windows, bạn có thể dùng các tính năng này để tạo ranh giới mạnh hơn giữa container và host.
Giờ bạn đã có cái nhìn đầy đủ về cách thêm người dùng vào nhóm docker và vì sao điều đó quan trọng. Hãy điểm lại những gì đã đề cập.
Thêm người dùng vào nhóm docker giúp làm việc với container dễ dàng hơn nhiều bằng cách loại bỏ nhu cầu dùng sudo. Quy trình đơn giản: kiểm tra nhóm đã tồn tại, thêm người dùng với usermod -aG docker $USER, rồi đăng xuất và đăng nhập lại. Nếu gặp vấn đề, hãy kiểm tra quyền socket và khởi động lại Docker.
Nhưng đừng quên rằng cấp quyền tham gia nhóm docker gần như tương đương trao mật khẩu root. Bất kỳ ai trong nhóm này có thể gắn toàn bộ hệ thống tệp của bạn, cài phần mềm, hoặc thậm chí sửa tệp hệ thống thông qua container. Vì vậy rất quan trọng phải chọn lọc người được cấp quyền này.
Vậy cách tiếp cận nào phù hợp với môi trường của bạn?
Nhìn chung, với nhà phát triển làm việc trên máy cá nhân, tham gia nhóm docker là ổn. Với máy chủ dùng chung hoặc môi trường sản xuất, hãy cân nhắc các lựa chọn như chế độ rootless, user namespaces, hoặc dùng sudo với lệnh giới hạn. Và dù làm gì, luôn tuân theo thực tiễn tốt trong Dockerfile bằng cách dùng người dùng không phải root và loại bỏ các capabilities không cần thiết.
Theo dõi ai có quyền nhóm docker bằng cách kiểm tra định kỳ. Mọi người thay đổi vai trò, rời nhóm, hoặc đơn giản là không còn cần một số quyền theo thời gian. Một lần kiểm tra nhanh với getent group docker có thể giúp bạn phát hiện người dùng không nên có mặt ở đó nữa.
Nếu bạn muốn học thêm về Docker và container hóa nói chung, các khóa học của DataCamp sau đây là điểm dừng chân tiếp theo tốt nhất:
Nhóm Docker là một nhóm người dùng hệ thống cấp quyền cho thành viên sử dụng Docker daemon mà không cần đặc quyền sudo. Nó tồn tại để giúp các lệnh Docker thuận tiện hơn bằng cách loại bỏ nhắc mật khẩu và lỗi quyền hạn. Khi bạn cài Docker trên hệ thống Linux, nhóm này được tạo tự động và kiểm soát quyền truy cập vào tệp socket của Docker. Thêm người dùng vào nhóm cho phép họ chạy trực tiếp mọi lệnh Docker, qua đó cải thiện đáng kể hiệu quả công việc.
Những rủi ro bảo mật nào đi kèm với việc tham gia nhóm Docker?⌄
Tham gia nhóm Docker trên thực tế cấp quyền tương đương root cho hệ thống của bạn. Thành viên có thể gắn hệ thống tệp của host vào container, chỉnh sửa tệp hệ thống và có thể giành toàn quyền quản trị. Họ cũng có thể thay đổi cấu hình Docker daemon và chạy container đặc quyền với quyền truy cập trực tiếp phần cứng. Mức độ truy cập này khiến việc chỉ thêm người dùng đáng tin và áp dụng các biện pháp tăng cường bảo mật khác trở nên tối quan trọng.
Tôi có thể dùng Docker mà không cần thêm người dùng vào nhóm Docker không?⌄
Có, bạn có thể dùng Docker mà không cần thêm người dùng vào nhóm Docker. Cách phổ biến nhất là dùng sudo trước mỗi lệnh Docker, giúp bảo mật và khả năng ghi nhật ký tốt hơn. Lựa chọn khác là thiết lập chế độ rootless của Docker, cho phép chạy daemon và container bằng người dùng không phải root. Bạn cũng có thể tạo mục sudoers tùy chỉnh để cho phép người dùng cụ thể chỉ chạy lệnh Docker mà không cần mật khẩu.
Làm sao xác minh người dùng đã được thêm vào nhóm Docker thành công?⌄
Bạn có thể xác minh đã thêm thành công vào nhóm Docker bằng cách chạy lệnh groups $USERNAME để liệt kê tất cả nhóm người dùng thuộc về. Nếu có "docker" trong danh sách, người dùng là thành viên. Ngoài ra, bạn có thể kiểm tra với getent group docker để xem tất cả thành viên của nhóm Docker. Hãy nhớ người dùng phải đăng xuất và đăng nhập lại trước khi quyền nhóm mới có hiệu lực, đây là điểm khắc phục sự cố thường gặp.
Quản lý nhóm Docker trên Windows khác gì so với Linux?⌄
Windows dùng nhóm "docker-users" thay vì "docker" như trên Linux. Trên Windows, bạn thêm người dùng thông qua Computer Management hoặc PowerShell với quyền quản trị bằng lệnh Add-LocalGroupMember. Khác với Linux, Windows cung cấp thêm bảo mật qua Windows Defender Application Control và chế độ cách ly Hyper-V. Tuy nhiên, cũng như Linux, người dùng phải đăng xuất và đăng nhập lại sau khi được thêm vào nhóm để thay đổi có hiệu lực.
Chuyên gia Khoa học Dữ liệu Cấp cao, làm việc tại Croatia. Tác giả Công nghệ Hàng đầu với hơn 700 bài viết đã xuất bản, đạt trên 10 triệu lượt xem. Tác giả cuốn sách Tự động hóa Machine Learning với TPOT.
Tìm hiểu về Docker và khám phá tầm quan trọng của nó trong bộ công cụ của chuyên gia dữ liệu. Tìm hiểu về Docker container, Docker image và nhiều nội dung khác.
Đã bao giờ bạn phải gõ sudo trước mỗi lệnh Docker? Bài viết này dành cho bạn.
Theo mặc định, Docker giới hạn quyền truy cập vào daemon của nó, chỉ cho phép root và thành viên của nhóm docker chạy lệnh. Điều này giúp hệ thống an toàn hơn, nhưng khá phiền khi bạn làm việc với container cả ngày. Nhóm docker tồn tại chính vì lý do này - để bạn dùng Docker mà không bị mật khẩu sudo làm chậm.
Khi thêm mình vào nhóm docker, bạn sẽ thấy khác biệt ngay. Bạn có thể chạy
docker build,docker runvà các lệnh khác mà không gặp lỗi quyền hạn hay nhắc nhập mật khẩu.Trong bài viết này, bạn sẽ học chính xác cách thêm người dùng vào nhóm docker trên các hệ thống khác nhau, những rủi ro bảo mật cần lưu ý, và cách bảo vệ hệ thống trong khi vẫn giúp Docker dễ dùng hơn.
> LLM đang được chú ý rất nhiều trong 2025. Làm theo hướng dẫn từng bước để triển khai ứng dụng LLM bằng Docker.
Tìm hiểu về nhóm Docker
Khi bạn bắt đầu làm việc với Docker, bạn sớm sẽ gặp vấn đề về quyền nếu chưa thiết lập đúng.
Hãy cùng phân tích nhóm docker thực sự là gì và vì sao nó quan trọng với quy trình làm việc của bạn.
Định nghĩa và chức năng
Nhóm docker là một nhóm người dùng hệ thống cấp quyền cho thành viên dùng Docker daemon mà không cần đặc quyền sudo.
Khi bạn cài Docker trên hệ thống Linux, nhóm này thường được tạo tự động. Tệp socket của Docker (
/var/run/docker.sock) thuộc sở hữu root nhưng được gán quyền nhóm cho nhóm docker, đó là cách kiểm soát truy cập hoạt động.Người dùng trong nhóm này có thể build image, chạy container, quản lý mạng và thực hiện các thao tác Docker khác mà không cần thêm sudo trước lệnh. Điều đó nghĩa là gõ ít hơn và không bị nhắc mật khẩu khi bạn làm việc với container. Nếu thử chạy lệnh Docker khi không thuộc nhóm này, bạn sẽ gặp lỗi "permission denied", cuối cùng làm chậm tiến độ.
Hệ quả bảo mật của việc tham gia nhóm
Thêm người dùng vào nhóm docker đi kèm rủi ro bảo mật thực sự mà bạn không nên bỏ qua.
Thành viên nhóm docker có thể giành đặc quyền root trên máy chủ. Điều này xảy ra vì Docker cho phép bạn gắn (mount) thư mục host vào container, bao gồm cả thư mục hệ thống nhạy cảm. Người có quyền Docker có thể tạo container gắn toàn bộ hệ thống tệp root và chỉnh sửa bất kỳ tệp nào trên host.
Lỗ hổng thoát khỏi container cũng là rủi ro khác, vì có thể cho phép kẻ tấn công vượt qua cách ly container.
Bạn chỉ nên thêm người dùng đáng tin cậy vào nhóm docker, và ngay cả khi đó, hãy coi như đang cấp quyền root cho họ. Nhiều chuyên gia bảo mật khuyến nghị giới hạn thành viên nhóm docker chỉ cho những ai thật sự cần cho công việc hằng ngày.
Triển khai từng bước
Giờ bạn đã hiểu nhóm docker là gì và hệ quả của nó, hãy bắt tay vào thiết lập thực tế.
Tạo nhóm docker
Trong hầu hết trường hợp, bạn sẽ không cần tự tạo nhóm docker vì nó được tạo tự động khi cài Docker. Bạn có thể kiểm tra nhóm đã tồn tại bằng cách chạy:
Hình 1 - Kiểm tra nhóm docker có tồn tại
Nếu vì lý do nào đó nhóm chưa tồn tại (như trong trường hợp của tôi), bạn có thể tạo bằng lệnh này (chỉ dành cho Linux):
Lệnh này tạo nhóm docker trên hệ thống của bạn, nhưng chỉ áp dụng cho hệ điều hành Linux.
Với macOS, bạn có thể làm theo hướng dẫn chính thức từ Apple, vì nhóm được tạo qua giao diện GUI. Quy trình tương tự trên hệ điều hành Windows.
Sau khi thực hiện, bạn sẽ thấy nhóm đã được tạo:
Hình 2 - Kiểm tra nhóm docker có tồn tại (2)
Thêm người dùng vào nhóm
Để thêm người dùng hiện tại vào nhóm docker, chạy lệnh này trên hệ điều hành Linux:
Cờ
-anghĩa là "append" (thêm) và-Gchỉ định nhóm bạn muốn thêm người dùng vào. Biến$USERtự động dùng tên người dùng hiện tại của bạn.Với macOS và Windows, bạn có thể thêm người dùng vào nhóm qua Cài đặt hệ thống hoặc Bảng điều khiển - chỉ cần bật/tắt để thêm tất cả người dùng mong muốn:
Hình 3 - Thêm người dùng vào nhóm
Sau khi tự thêm vào nhóm, bạn phải đăng xuất và đăng nhập lại để thay đổi có hiệu lực. Phiên hiện tại sẽ không nhận nhóm mới cho đến khi bạn đăng xuất hoàn toàn. Một số hệ thống có thể cần khởi động lại:
Để xác minh người dùng của bạn đã thuộc nhóm docker, chạy:
Bạn sẽ thấy "docker" trong danh sách nhóm của mình:
Hình 4 - Xem các nhóm của người dùng
Khắc phục sự cố thường gặp
Nếu bạn vẫn gặp lỗi "permission denied" sau khi thêm mình vào nhóm, có thể cần sửa quyền của Docker socket:
Một vấn đề thường gặp khác xảy ra khi dịch vụ Docker khởi động lại, có thể đặt lại quyền socket. Nếu Docker được khởi động sau khi bạn thay đổi nhóm, hãy thử khởi động lại dịch vụ Docker:
Với các vấn đề quyền dai dẳng, hãy kiểm tra cấu hình dịch vụ Docker của bạn. Trên một số hệ thống, Docker có thể được cấu hình dùng tên nhóm hoặc vị trí socket khác. Bạn có thể kiểm tra tệp cấu hình Docker daemon tại
/etc/docker/daemon.jsonhoặc các tệp dịch vụ trong/lib/systemd/system/docker.service.Hãy nhớ mọi thay đổi quyền bạn thực hiện chỉ áp dụng cho phiên đăng nhập hiện tại sau khi bạn đăng xuất và đăng nhập lại. Đây là nguyên nhân số một của vấn đề "đã thay đổi nhưng vẫn không hoạt động".
Cân nhắc bảo mật và biện pháp giảm thiểu
Thêm người dùng vào nhóm docker có thể tạo rủi ro bảo mật mà bạn cần nhận thức. Hãy xem các rủi ro này và cách bạn có thể bảo vệ hệ thống.
Rủi ro của việc tham gia nhóm docker
Tham gia nhóm docker trên thực tế tương đương có quyền root trên hệ thống. Đây không phải cường điệu – mà là thực tế cách Docker hoạt động.
Khi ở trong nhóm docker, bạn có thể chạy container gắn các phần nhạy cảm của hệ thống tệp host. Ví dụ, lệnh đơn giản này cho phép bạn toàn quyền sửa bất kỳ tệp nào trên host:
Bạn cũng có thể thay đổi thiết lập Docker daemon, tạo container đặc quyền, hoặc dùng chế độ mạng host để bỏ qua cách ly mạng. Những khả năng này cho phép người dùng độc hại (hoặc ứng dụng bị xâm nhập có quyền Docker) chiếm toàn bộ hệ thống host.
Có một vài rủi ro tiềm ẩn khác bạn cần biết:
Mỗi điều này đều có thể bị lạm dụng để leo thang đặc quyền hoặc gây gián đoạn hoạt động hệ thống.
Thực tiễn tốt để giảm thiểu rủi ro
Để giảm rủi ro, hãy tuân theo nguyên tắc đặc quyền tối thiểu—chỉ cấp quyền tham gia nhóm docker cho người dùng thật sự cần. Nếu nhiều người cần dùng chung hệ thống, hãy cân nhắc tạo tài khoản người dùng riêng chỉ cho tác vụ Docker.
Chế độ rootless của Docker là lựa chọn an toàn hơn so với cách dùng nhóm docker. Rootless cho phép chạy Docker daemon và container với người dùng không phải root, không cần tham gia nhóm đặc biệt nào:
Không gian tên người dùng (user namespaces) cung cấp một lớp bảo mật khác bằng cách ánh xạ UID của container sang phạm vi khác trên host. Nghĩa là ngay cả khi container chạy với root (UID 0), tiến trình đó sẽ ánh xạ tới người dùng không đặc quyền trên host:
Cân nhắc dùng cấp phát UID/GID tĩnh cho người dùng trong container để duy trì ánh xạ danh tính nhất quán. Trong Dockerfile, hãy tạo người dùng cụ thể với ID định trước:
Thường xuyên kiểm tra ai đang thuộc nhóm docker bằng các lệnh như:
Và xóa người dùng không còn cần truy cập:
Kết hợp các cách tiếp cận này sẽ mang lại cho bạn và nhóm sự tiện lợi của việc tham gia nhóm docker trong khi giảm thiểu rủi ro bảo mật mà nó gây ra.
Cấu hình nâng cao và các lựa chọn thay thế
Nếu bạn muốn các cách quản lý quyền truy cập Docker khác ngoài cách thành viên nhóm chuẩn, bạn có nhiều lựa chọn. Hãy khám phá một số cấu hình nâng cao và giải pháp thay thế có thể phù hợp hơn với yêu cầu bảo mật của bạn.
Tăng cường bảo mật trong Dockerfile
Bạn có thể tích hợp bảo mật trực tiếp vào Dockerfile để giảm rủi ro ngay cả khi người dùng có quyền nhóm docker.
Trong ví dụ dưới đây, tôi sẽ dùng multi-stage build để giữ image Python nhỏ và giảm bề mặt tấn công.
Để theo dõi, hãy tạo các tệp sau:
app.py:
requirements.txt:
Dockerfile:
Tóm lại,
Dockerfilenày bao gồm chỉ thịUSERvới người dùng không phải root và sao chép nội dung liên quan (các gói Python) từ bước build trước đó.> Nếu bạn mới container hóa ứng dụng, đừng lo - hướng dẫn đầy đủ của chúng tôi sẽ hỗ trợ bạn.
Bạn có thể build và chạy container như vậy với các lệnh sau:
Hình 5 - Chạy container với đặc quyền tối thiểu
Lệnh mới thêm -
--cap-drop=ALL- loại bỏ mọi khả năng (capabilities) Linux khỏi container (hạn chế đặc quyền), trong khi--cap-add=NET_BIND_SERVICEthêm lại khả năngNET_BIND_SERVICEcho phép container gắn kết với cổng số nhỏ.Các kỹ thuật này giới hạn những gì container có thể làm, ngay cả khi ai đó có quyền nhóm docker cố gắng lạm dụng.
sudo như một lựa chọn thay thế
Nếu bạn không muốn thêm người dùng vào nhóm docker, dùng sudo là lựa chọn thay thế khả thi. Cách này giúp bạn kiểm soát nhiều hơn và có nhật ký các lệnh Docker.
Bạn có thể tạo mục sudoers tùy chỉnh để cho phép người dùng cụ thể chỉ chạy lệnh Docker mà không cần mật khẩu:
Để tiện hơn, tạo alias trong tệp
.bashrchoặc.zshrccủa bạn:Cách dùng sudo này mang lại bảo mật tốt hơn vì:
Nhược điểm là phải gõ nhiều hơn một chút và có thể gặp vấn đề với công cụ mong đợi truy cập Docker trực tiếp.
Lưu ý cho Windows
Windows xử lý quyền Docker khác Linux. Thay vì nhóm docker, Windows dùng nhóm docker-users.
Để thêm người dùng vào nhóm docker-users trên Windows, hãy làm như sau:
Hình 6 - Nhóm người dùng trên Windows
Ngoài ra, bạn có thể dùng PowerShell với quyền quản trị:
Sau khi thêm người dùng, họ cần đăng xuất và đăng nhập lại để thay đổi có hiệu lực, giống như trên Linux.
Cũng cần lưu ý rằng Windows cung cấp các tính năng bảo mật bổ sung thông qua Windows Defender Application Control và chế độ cách ly Hyper-V mà Linux không có. Với môi trường yêu cầu bảo mật cao trên Windows, bạn có thể dùng các tính năng này để tạo ranh giới mạnh hơn giữa container và host.
> Chuyên gia dữ liệu cần Docker trong 2025, và hướng dẫn này sẽ chỉ cho bạn cách học.
Tổng kết về nhóm người dùng Docker
Giờ bạn đã có cái nhìn đầy đủ về cách thêm người dùng vào nhóm docker và vì sao điều đó quan trọng. Hãy điểm lại những gì đã đề cập.
Thêm người dùng vào nhóm docker giúp làm việc với container dễ dàng hơn nhiều bằng cách loại bỏ nhu cầu dùng sudo. Quy trình đơn giản: kiểm tra nhóm đã tồn tại, thêm người dùng với
usermod -aG docker $USER, rồi đăng xuất và đăng nhập lại. Nếu gặp vấn đề, hãy kiểm tra quyền socket và khởi động lại Docker.Nhưng đừng quên rằng cấp quyền tham gia nhóm docker gần như tương đương trao mật khẩu root. Bất kỳ ai trong nhóm này có thể gắn toàn bộ hệ thống tệp của bạn, cài phần mềm, hoặc thậm chí sửa tệp hệ thống thông qua container. Vì vậy rất quan trọng phải chọn lọc người được cấp quyền này.
Vậy cách tiếp cận nào phù hợp với môi trường của bạn?
Nhìn chung, với nhà phát triển làm việc trên máy cá nhân, tham gia nhóm docker là ổn. Với máy chủ dùng chung hoặc môi trường sản xuất, hãy cân nhắc các lựa chọn như chế độ rootless, user namespaces, hoặc dùng sudo với lệnh giới hạn. Và dù làm gì, luôn tuân theo thực tiễn tốt trong Dockerfile bằng cách dùng người dùng không phải root và loại bỏ các capabilities không cần thiết.
Theo dõi ai có quyền nhóm docker bằng cách kiểm tra định kỳ. Mọi người thay đổi vai trò, rời nhóm, hoặc đơn giản là không còn cần một số quyền theo thời gian. Một lần kiểm tra nhanh với
getent group dockercó thể giúp bạn phát hiện người dùng không nên có mặt ở đó nữa.Nếu bạn muốn học thêm về Docker và container hóa nói chung, các khóa học của DataCamp sau đây là điểm dừng chân tiếp theo tốt nhất: