Quản lý quyền truy cập người dùng trong Linux

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 root trong môi trường sản xuất; thay vào đó, sử dụng sudo để 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 sudo hoặc su -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 alice thuộc nhóm alice). Đâ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 bob vào nhóm adm để đọc nhật ký hệ thống, hoặc vào nhóm kvm để 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ới
  • userdel: Xóa người dùng
  • passwd: Đặt hoặc đổi mật khẩu
  • groupadd: 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 dung
  • w (write = 2): Ghi/đổi nội dung
  • x (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

susudo 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 username hoặc su - 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

Thẻ: linux permissions sudo user-management chmod

Đăng vào ngày 31 tháng 5 lúc 19:54