User, Group và sudo
Linux là hệ điều hành đa người dùng từ gốc: nhiều người có thể dùng chung một máy, mỗi người một danh tính và quyền riêng (nhớ Bài 7 — quyền dựa trên user/group). Bài này học cách quản lý user và group, và sudo — cách làm việc với quyền quản trị một cách an toàn.
User được lưu ở đâu: /etc/passwd
Mọi user trên hệ thống nằm trong file /etc/passwd, mỗi dòng một user:
grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
Bảy trường, ngăn bằng dấu ::
root : x : 0 : 0 : root : /root : /bin/bash
│ │ │ │ │ │ │
tên pass UID GID GECOS home shell
(x = ở (số (nhóm (mô tả) (thư mục (shell khi
shadow) ID) chính) nhà) đăng nhập)
- UID 0 là root — siêu người dùng, toàn quyền, bỏ qua mọi kiểm tra quyền. User thường có UID từ 1000 trở lên.
- Trường password là
x— mật khẩu thật (đã hash) không nằm ở đây mà ở/etc/shadow. - shell: chương trình chạy khi user đăng nhập. Để ý nhiều user hệ thống có shell
/usr/sbin/nologin— nghĩa là chúng không dùng để đăng nhập, chỉ để chạy dịch vụ (ví dụwww-datachạy web server). Đây là một thực hành bảo mật: dịch vụ chạy bằng user riêng, không đăng nhập được.
Mật khẩu: /etc/shadow
Mật khẩu (đã băm) nằm ở /etc/shadow, và file này chỉ root đọc được:
ls -l /etc/shadow
-rw-r----- 1 root shadow 529 ... /etc/shadow
Tách mật khẩu ra file riêng chỉ root đọc là một lớp bảo mật: /etc/passwd ai cũng đọc được (nhiều chương trình cần), nhưng băm mật khẩu thì không. Bạn hiếm khi sửa tay file này — dùng lệnh passwd.
Group: /etc/group
Group gom nhiều user để cấp quyền chung (nhớ Bài 7 — quyền có cột "group"):
grep dev /etc/group
dev:x:1001:alice
Mỗi user có một group chính (gán khi tạo) và có thể thuộc nhiều group phụ. Ví dụ thực tế: thêm user vào group docker để chạy docker không cần sudo (Bài 1 series Docker), hay group sudo để được dùng sudo (dưới đây).
Tạo và quản lý user
groupadd dev # tạo group
useradd -m -s /bin/bash -G dev alice # tạo user alice
passwd alice # đặt mật khẩu cho alice
Các cờ useradd hay dùng:
-m— tạo thư mục nhà (/home/alice). Quên-mthì user không có home.-s /bin/bash— đặt shell đăng nhập.-G dev— thêm vào group phụdev.
Kiểm tra:
id alice
uid=1001(alice) gid=1002(alice) groups=1002(alice),1001(dev)
Các lệnh quản lý khác: usermod (sửa user, ví dụ usermod -aG docker alice thêm group), userdel -r alice (xóa user kèm home), groupadd/groupdel.
Trên một số distro/cấu hình,
adduser/addgroup(script thân thiện, hỏi tương tác) được ưa dùng hơnuseradd/groupadd(cấp thấp). Kết quả như nhau.
su: chuyển sang user khác
su (switch user) cho bạn trở thành user khác:
su alice -c "whoami" # chạy một lệnh với danh tính alice
su - alice # mở một shell đăng nhập đầy đủ với tư cách alice
alice
su không kèm tên thì chuyển sang root (cần mật khẩu root). Dấu - (su - alice) tạo môi trường đăng nhập sạch (đúng PATH, biến môi trường, thư mục home của user đó).
sudo: làm việc quản trị đúng cách
Để chạy một lệnh cần quyền root (cài phần mềm, sửa file hệ thống), bạn không nên đăng nhập thẳng bằng root. Thay vào đó dùng sudo — chạy một lệnh với quyền root:
sudo apt update # chạy apt update với quyền root
sudo systemctl restart nginx
(Trên Ubuntu mặc định cần cài: apt install sudo, rồi thêm user vào group được phép: usermod -aG sudo alice.)
Vì sao sudo tốt hơn đăng nhập root
Đây là một nguyên tắc bảo mật quan trọng (giống ý "least privilege" trong các series trước):
- Ghi vết (audit): mỗi lệnh
sudođược ghi log (/var/log/auth.log) — biết ai chạy gì, khi nào. Đăng nhập root thì không truy được là ai. - Quyền tối thiểu: bạn làm việc thường ngày bằng user thường (ít rủi ro lỡ tay), chỉ "nâng quyền" cho đúng lệnh cần root. Đăng nhập root suốt thì một lệnh gõ nhầm (
rm -rfsai chỗ) là thảm họa. - Không chia sẻ mật khẩu root: mỗi người dùng mật khẩu của chính họ để
sudo(nhập mật khẩu của bạn, không phải của root), nên không ai cần biết mật khẩu root chung. Thu hồi quyền một người chỉ việc gỡ họ khỏi groupsudo.
Ai được sudo quy định trong /etc/sudoers (sửa bằng visudo để tránh ghi hỏng). Thường chỉ cần thêm user vào group sudo (Debian/Ubuntu) hoặc wheel (Fedora/RHEL) là đủ.
Quy tắc thực dụng trên server: tạo một user thường cho mình, thêm vào group
sudo, rồi tắt đăng nhập trực tiếp bằng root (qua SSH — Bài 14). Mọi việc quản trị làm quasudo.
🧹 Dọn dẹp
userdel -r alice 2>/dev/null
groupdel dev 2>/dev/null
Tổng kết
Linux đa người dùng: user lưu ở /etc/passwd (7 trường, UID 0 = root), mật khẩu băm ở /etc/shadow (chỉ root đọc), group ở /etc/group. Tạo/sửa bằng useradd/usermod/passwd/groupadd, xem bằng id. su chuyển danh tính; sudo chạy một lệnh với quyền root — và nên dùng sudo thay vì đăng nhập root vì có audit, quyền tối thiểu, không chia sẻ mật khẩu root.
Bạn đã quản lý được người dùng cục bộ. Bài 13 bước ra mạng: các lệnh mạng cơ bản trên Linux — kiểm tra IP, cổng, kết nối, DNS.