Lưu ý quan trọng: Tài khoản root (UID = 0) là ngoại lệ đối với cơ chế phân quyền rwx — ngay cả khi thư mục không có bit w cho root, tài khoản này vẫn có thể tạo tệp hoặc thay đổi nội dung mà không bị giới hạn.
Phân loại người dùng hệ thống
- Tài khoản quản trị (root): Có UID bằng 0, sở hữu toàn bộ đặc quyền hệ thống như cấu hình kernel, cài đặt gói, chỉnh sửa tệp hệ thống. Không nên đăng nhập trực tiếp dưới dạng
roottrong môi trường sản xuất; thay vào đó, sử dụngsudođể cấp quyền tạm thời. - Tài khoản thường (regular users): Thường có UID ≥ 1000, được dùng cho tương tác người-dùng và chạy ứng dụng. Các thao tác nhạy cảm yêu cầu xác thực qua
sudohoặcsu -l. - Tài khoản hệ thống (system accounts): Có UID < 1000, được tạo tự động cho các tiến trình nền như
sshd,postgres,redis. Chúng không có shell tương tác và thường bị vô hiệu hóa khả năng đăng nhập.
Nhóm người dùng
- Nhóm chính (primary group): Mỗi người dùng được gán một nhóm mặc định khi tạo — tên nhóm trùng với tên người dùng (ví dụ: người dùng
alicethuộc nhómalice). Đây là nhóm sở hữu mặc định cho các tệp mới được tạo. - Nhóm phụ (supplementary groups): Người dùng có thể tham gia nhiều nhóm phụ để kế thừa quyền từ các nhóm đó. Ví dụ: thêm
bobvào nhómadmđể đọc nhật ký hệ thống, hoặc vào nhómkvmđể chạy máy ảo.
1. Quản lý người dùng và nhóm
Các lệnh cơ bản:
useradd: Tạo người dùng mớiuserdel: Xóa người dùngpasswd: Đặt hoặc đổi mật khẩugroupadd: Tạo nhóm
Các lệnh ít dùng hơn: groupmod, groupdel — chỉ cần nắm khái niệm.
# Tạo người dùng 'dev1' với thư mục home tự động, shell mặc định /bin/zsh
useradd -m -s /bin/zsh dev1
# Xóa hoàn toàn người dùng 'dev1' cùng thư mục home và mail spool
userdel -r dev1
# Tạo nhóm 'ci-cd'
groupadd ci-cd
2. Kiểm soát quyền truy cập tệp và thư mục
Hệ thống phân quyền Linux dựa trên ba thực thể:
- Owner (u): Chủ sở hữu tệp
- Group (g): Nhóm sở hữu
- Others (o): Tất cả người dùng còn lại
Mỗi thực thể có ba bit quyền:
r(read = 4): Đọc nội dungw(write = 2): Ghi/đổi nội dungx(execute = 1): Thực thi (tệp) hoặc truy cập (thư mục)
Ví dụ: drwxr-x--- nghĩa là:
– Thư mục (d)
– Chủ sở hữu: rwx (7)
– Nhóm: r-x (5)
– Người khác: --- (0)
# Cấp quyền đọc-ghi-thực thi cho chủ sở hữu, chỉ đọc-thực thi cho nhóm, không quyền nào cho người khác
chmod 750 /opt/deploy-scripts
# Dùng cú pháp biểu tượng: cấp đầy đủ quyền cho chủ sở hữu, chỉ đọc cho nhóm, hủy mọi quyền cho người khác
chmod u=rwx,g=r,o= /etc/nginx/conf.d/default.conf
# Thay đổi chủ sở hữu và nhóm đồng thời
chown deployer:nginx-admins /var/www/html
3. Chuyển đổi ngữ cảnh người dùng và ủy quyền nâng cao
su và sudo là hai cơ chế chính để chuyển ngữ cảnh thực thi:
su username: Chuyển sang người dùng khác nhưng giữ biến môi trường hiện tại.su -l usernamehoặcsu - username: Chuyển toàn bộ ngữ cảnh — tải lại profile, PATH, shell khởi động.
sudo cung cấp kiểm soát chi tiết hơn thông qua tệp cấu hình /etc/sudoers (luôn chỉnh sửa bằng visudo để tránh lỗi cú pháp).
# Mở tệp hệ thống chỉ bằng đặc quyền root
sudo nano /etc/fstab
# Thực thi lệnh dưới danh nghĩa người dùng 'backup'
sudo -u backup /usr/local/bin/rotate-logs.sh
# Thực thi lệnh với môi trường của người dùng đích (không phải môi trường hiện tại)
sudo -i -u monitor systemctl status prometheus
Khi cấu hình /etc/sudoers, cú pháp chuẩn là:
USER HOST=(TARGET_USER:TARGET_GROUP) COMMANDS
Ví dụ: jenkins ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx