Trong quản trị hạ tầng Linux, việc cấp phát tài khoản, phân chia nhóm làm việc và thu hồi quyền hạn khi nhân sự thay đổi là các tác vụ diễn ra liên tục hàng ngày.
Bài viết này cung cấp cẩm nang thực hành chi tiết từ các lệnh quản trị cơ bản (useradd, usermod, userdel, groupadd) đến các kỹ thuật tự động hóa chuẩn Production.
1. Khái Niệm Nhóm Chính vs Nhóm Phụ
Trước khi tạo người dùng, bạn cần phân biệt rõ hai loại nhóm trong Linux:
graph TD
User["👤 Người Dùng: developer"]
User --> Primary["🔷 Primary Group (Nhóm chính)"]
User --> Secondary["🔶 Supplementary Groups (Nhóm phụ)"]
Primary --> PG["developers (GID 2000)"]
Secondary --> SG1["sudo (Đặc quyền root)"]
Secondary --> SG2["docker (Chạy container không cần sudo)"]
PG -.-> NewFiles["Mặc định gán quyền cho mọi file mới tạo"]
SG1 & SG2 -.-> ExtraPerms["Nhận thêm quyền truy cập đặc biệt"]
- Primary Group (Nhóm chính):
- Mỗi người dùng chỉ có duy nhất 1 nhóm chính.
- Mọi tập tin hoặc thư mục mới do người dùng tạo ra sẽ tự động thuộc quyền sở hữu của nhóm này.
- Được quy định tại trường thứ 4 trong file
/etc/passwd.
- Secondary / Supplementary Groups (Nhóm phụ):
- Người dùng có thể tham gia vào nhiều nhóm phụ cùng lúc.
- Dùng để chia sẻ quyền hạn đặc thù (ví dụ: nhóm
sudođể chạy quyền root, nhómdockerđể chạy container, nhómk8s-adminsđể quản lý cụm).
2. Quản Trị Người Dùng (User Management)
2.1. Phân Biệt useradd vs adduser
Rất nhiều người mới bắt đầu nhầm lẫn giữa hai câu lệnh này:
| Tiêu chí | useradd (Khuyến nghị cho SRE / Script) | adduser (Dành cho tương tác thủ công) |
|---|---|---|
| Bản chất | Lệnh nhị phân nhúng sẵn chuẩn của mọi bản phối Linux | Kịch bản Perl cấp cao (Chủ yếu có trên Debian / Ubuntu) |
| Giao diện | Hoàn toàn theo cờ tham số (Non-interactive) | Hỏi đáp từng bước (Interactive prompt) |
Thư mục /home | Mặc định KHÔNG tạo (phải truyền cờ -m) | Tự động tạo thư mục home và copy file mẫu |
| Mật khẩu | Không hỏi (tài khoản bị khóa đến khi đặt pass) | Tự động yêu cầu nhập và xác nhận mật khẩu |
| Phù hợp nhất | Script tự động hóa, CI/CD, Ansible, Dockerfile | Quản trị viên gõ tay trực tiếp trên terminal |
2.2. Tạo Người Dùng Mới Bằng useradd
Các cờ lệnh thiết yếu của useradd cần nhớ:
# 1. Tạo user chuẩn cho nhân viên (Tạo /home, chỉ định shell bash)
sudo useradd -m -s /bin/bash devops_lead
# 2. Tạo user đầy đủ thông tin: Chỉ định UID, nhóm chính, nhóm phụ, comment
sudo useradd -m -s /bin/bash -u 1500 -g developers -G sudo,docker -c "Bach Dang Tuan - Lead DevOps" darktuan
# 3. Tạo tài khoản hệ thống (System User) cho dịch vụ (Không tạo home, cấm login)
sudo useradd -r -s /usr/sbin/nologin -d /var/lib/prometheus prometheus
Giải thích các cờ quan trọng:
-m(--create-home): Bắt buộc phải có để tạo thư mục/home/<username>.-s(--shell): Chỉ định shell đăng nhập (mặc định nếu không truyền có thể là/bin/sh).-u(--uid): Đặt mã UID theo quy ước nội bộ doanh nghiệp.-g(--gid): Gán nhóm chính (Group phải tồn tại trước).-G(--groups): Gán danh sách các nhóm phụ (cách nhau bằng dấu phẩy).-r(--system): Đánh dấu là tài khoản hệ thống (tự động chọn UID < 1000).
2.3. Đặt & Quản Lý Mật Khẩu (passwd)
Sau khi dùng useradd, tài khoản chưa thể đăng nhập được ngay vì chưa có mật khẩu:
# Đặt hoặc đổi mật khẩu cho người dùng
sudo passwd darktuan
# Khóa tài khoản tạm thời (ngăn không cho đăng nhập)
sudo passwd -l darktuan
# Mở khóa tài khoản
sudo passwd -u darktuan
# Kiểm tra trạng thái mật khẩu (P: Password set, L: Locked, NP: No password)
sudo passwd -S darktuan
# Ép buộc người dùng phải đổi mật khẩu ngay trong lần đăng nhập đầu tiên
sudo chage -d 0 darktuan
2.4. Sửa Đổi Thông Tin Người Dùng Bằng usermod
Khi cần thay đổi quyền hạn hoặc thông tin của một tài khoản đang tồn tại:
[!CAUTION] 🚨 Cạm bẫy nguy hiểm nhất khi thêm nhóm phụ: Khi thêm user vào nhóm mới, LUÔN LUÔN phải dùng tổ hợp cờ
-aG(Append):sudo usermod -aG docker darktuanNếu bạn vô tình gõ thiếu cờ
-a(chỉ gõusermod -G docker darktuan), Linux sẽ xóa user ra khỏi toàn bộ các nhóm phụ cũ (bao gồm cả nhómsudo) và chỉ giữ lại duy nhất nhómdocker!
# Thêm user vào nhóm sudo và docker (Giữ nguyên các nhóm cũ)
sudo usermod -aG sudo,docker darktuan
# Thay đổi shell mặc định sang Zsh
sudo usermod -s /bin/zsh darktuan
# Thay đổi thư mục home và tự động di chuyển toàn bộ dữ liệu cũ sang chỗ mới (-m)
sudo usermod -d /data/home/darktuan -m darktuan
# Đổi tên đăng nhập (Username) từ 'oldname' sang 'newname'
sudo usermod -l newname oldname
2.5. Xóa Tài Khoản Người Dùng Bằng userdel
# ⚠️ Cách 1: Chỉ xóa tài khoản, GIỮ LẠI toàn bộ thư mục /home và dữ liệu
sudo userdel darktuan
# ✅ Cách 2: Xóa triệt để cả tài khoản VÀ thư mục /home cùng hộp thư mail
sudo userdel -r darktuan
3. Quản Trị Nhóm (Group Management)
Tập tin /etc/group lưu trữ danh sách các nhóm trên hệ điều hành với 4 trường:
group_name:password_placeholder:GID:member_list
3.1. Các Lệnh Thao Tác Với Nhóm
# 1. Tạo nhóm mới
sudo groupadd devops
# Tạo nhóm với GID cố định
sudo groupadd -g 2500 security-team
# 2. Đổi tên nhóm
sudo groupmod -n platform-eng devops
# 3. Xóa nhóm (Lưu ý: Không thể xóa nếu nhóm đang là Nhóm chính của một user còn tồn tại)
sudo groupdel security-team
3.2. Quản Lý Thành Viên Nhóm Bằng Lệnh gpasswd
Bên cạnh usermod, lệnh gpasswd là công cụ chuyên trách cực kỳ rõ ràng để quản trị thành viên trong nhóm:
# Thêm một thành viên vào nhóm
sudo gpasswd -a darktuan docker
# Xóa một thành viên ra khỏi nhóm
sudo gpasswd -d darktuan docker
# Đặt một người dùng làm Group Administrator (có quyền tự add/remove user khác vào nhóm này)
sudo gpasswd -A darktuan developers
4. Thư Mục Mẫu /etc/skel (Skeleton Directory)
Mỗi khi bạn chạy useradd -m <user>, làm thế nào Linux biết cần đặt những file gì vào thư mục /home mới?
Câu trả lời nằm ở thư mục /etc/skel/:
# Xem các file ẩn mẫu trong /etc/skel
ls -la /etc/skel/
# .bash_logout .bashrc .profile
Cơ chế hoạt động:
- Bất kỳ file hoặc thư mục nào nằm trong
/etc/skel/sẽ được sao chép y nguyên sang/home/<username>của người dùng mới tạo. - Quyền sở hữu của các file này sẽ được tự động đổi sang UID và GID của người dùng mới.
[!TIP] 🎯 Ứng dụng thực chiến cho SRE Team: Nếu công ty bạn muốn toàn bộ kỹ sư mới tạo tài khoản đều có sẵn:
- Cấu hình Bash Prompt hiển thị nhánh Git và màu sắc đẹp mắt.
- Các bí danh lệnh tiện lợi (
alias k="kubectl",alias ll="ls -lah").- Thư mục
~/.ssh/với quyền700sẵn sàng.Bạn chỉ cần cấu hình sẵn các file này bên trong thư mục
/etc/skel/của máy chủ Template / Golden Image!
5. Ví Dụ Thực Tế & Xử Lý Sự Cố
5.1. Khắc Phục Lỗi "Vừa Add Group Nhưng Chưa Có Quyền"
Tình huống: Bạn vừa chạy sudo usermod -aG docker $USER, nhưng gõ docker ps hệ thống vẫn báo lỗi: permission denied.
Nguyên nhân: Quyền của các nhóm phụ chỉ được nạp tại thời điểm đăng nhập (Login Session). Phiên làm việc hiện tại của bạn vẫn mang danh sách nhóm cũ.
Cách xử lý:
- Cách 1 (Nhanh nhất không cần logout): Chạy lệnh kích hoạt nhóm ngay trong terminal hiện tại:
newgrp docker - Cách 2: Đăng xuất khỏi SSH rồi đăng nhập lại.
Bài tiếp theo đề xuất: Quản Lý Quyền File & Thư Mục (Chmod, Chown, Chgrp, SUID/SGID) – Làm chủ các chế độ phân quyền số (755, 644), quyền đặc biệt SUID/SGID/Sticky Bit và kiểm soát truy cập tập tin.