Trong hệ điều hành Linux, người dùng và nhóm là hai khái niệm cốt lõi để quản lý quyền truy cập và bảo mật. Người dùng được phân thành ba loại chính: người dùng siêu cấp (root), người dùng hệ thống và người dùng thông thường. Nhóm cũng được chia làm hai: nhóm chính và nhóm phụ.
- Nhóm chính: Đây là nhóm mà người dùng được gán ngay khi tạo tài khoản. Mỗi người dùng bắt buộc phải thuộc ít nhất một nhóm chính (do hệ thống tự động tạo hoặc người quản trị chỉ định). Ví dụ, khi tạo người dùng "user1", hệ thống thường tạo một nhóm cùng tên "user1" làm nhóm chính.
- Nhóm phụ (nhóm mở rộng): Là các nhóm mà người dùng được thêm vào ngoài nhóm chính. Cho phép quản lý quyền tập trung và linh hoạt hơn cho nhiều người dùng cùng thực hiện một tác vụ.
Định danh người dùng và nhóm
Để phân biệt, Linux sử dụng các số định danh (ID):
- UID (User ID): Dành cho người dùng, nằm trong khoảng 0 đến 65535.
- UID = 0: Người dùng root.
- UID từ 1 đến 999: Người dùng hệ thống (daemon, service).
- UID từ 1000 trở lên: Người dùng thông thường. Thông tin này được lưu trong tệp
/etc/passwd.
- GID (Group ID): Dành cho nhóm, cũng trong khoảng 0 đến 65535.
- GID = 0: Nhóm root.
- GID từ 1 đến 999: Nhóm hệ thống.
- GID từ 1000 trở lên: Nhóm thông thường. Thông tin này được lưu trong tệp
/etc/group.
Các giá trị mặc định cho UID và GID này được cấu hình trong tệp /etc/login.defs và có thể tùy chỉnh.
Các tệp quản lý người dùng
Tệp tài khoản: /etc/passwd
Tệp này chứa thông tin cơ bản của người dùng. Mỗi dòng gồm 7 trường, phân cách bằng dấu ':'.
root:x:0:0:root:/root:/bin/bash
Cấu trúc: tên_đăng_nhập:mật_khẩu_mã_hóa:UID:GID:miêu_tả:thư_mục_nhà:shell_đăng_nhập. Mật khẩu thực sự không lưu ở đây mà được thay bằng 'x'.
Tệp mật khẩu: /etc/shadow
Đây là nơi lưu mật khẩu đã mã hóa và các thông tin hết hạn. Mỗi dòng gồm 9 trường:
root:$1$KsQ764v6$...:0:99999:7:::
Cấu trúc: tên:tên_băm_mật_khẩu:ngày_thay_đổi_cuối:khoảng_cách_tối_thiểu:tối_đa:cảnh_báo:giai_đoạn_quá_hạn:ngày_vô_hiệu_hóa:dự_phòng.
Tệp nhóm: /etc/group
Lưu thông tin nhóm. Mỗi dòng 4 trường:
root:x:0:
Cấu trúc: tên_nhóm:mật_khẩu_nhóm:GID:danh_sách_thành_viên_phụ. Mật khẩu nhóm thường không dùng.
Tệp mật khẩu nhóm: /etc/gshadow
Ít được sử dụng, chứa mật khẩu nhóm và quản trị nhóm.
Lệnh quản lý người dùng
- useradd: Tạo người dùng mới. Tự động tạo thư mục nhà trong
/homevà tạo nhóm chính cùng tên.sudo useradd newuser - usermod: Chỉnh sửa thông tin người dùng (đổi tên, khóa/mở khóa tài khoản).
sudo usermod -L newuser # Khóa tài khoản - passwd: Tạo hoặc thay đổi mật khẩu, có thể khóa tài khoản.
sudo passwd newuser - chage: Quản lý thông tin thời hạn mật khẩu.
sudo chage -M 90 newuser # Đặt mật khẩu hết hạn sau 90 ngày - userdel: Xóa người dùng. Thêm tham số
-rđể xóa luôn thư mục nhà.sudo userdel -r newuser
Lệnh quản lý nhóm
- groupadd: Tạo nhóm mới.
sudo groupadd devteam - groupmod: Sửa tên nhóm.
sudo groupmod -n newteam devteam - groupdel: Xóa nhóm.
sudo groupdel newteam - gpasswd: Thêm hoặc xóa người dùng khỏi nhóm phụ.
sudo gpasswd -a user1 devteam # Thêm user1 vào nhóm devteam sudo gpasswd -d user1 devteam # Xóa user1 khỏi nhóm devteam
Các lệnh liên quan đến người dùng khác
- su: Chuyển đổi người dùng (không cần đăng xuất).
su - user1 - exit: Thoát khỏi phiên làm việc hiện tại (quay lại người dùng trước đó).
- id: Xem UID và GID của người dùng hiện tại hoặc một người dùng khác.
id user1
Quản lý quyền tập tin và thư mục
Loại tập tin
Trong Linux, mọi thứ đều được coi là tệp. Các loại chính bao gồm:
-: Tệp thông thường.d: Thư mục.l: Liên kết tượng trưng.b: Thiết bị khối (ví dụ: ổ cứng).c: Thiết bị ký tự (ví dụ: cổng COM).s: Socket.p: Đường ống định danh (FIFO).
Quyền truy cập cơ bản
Mỗi tệp/thư mục có ba loại quyền (đọc, ghi, thực thi) và được áp dụng cho ba nhóm đối tượng: chủ sở hữu, nhóm sở hữu, và những người dùng khác.
Xem quyền bằng lệnh ll hoặc ls -l:
-rwxr-xr--. 1 root root 1024 Feb 21 17:24 script.sh
Giải thích: Ký tự đầu tiên là loại tệp (-). Chín ký tự tiếp theo được chia thành ba nhóm ba: rwx (chủ sở hữu), r-x (nhóm), r-- (người khác).
Biểu diễn quyền
- Ký tự:
r(đọc, 4),w(ghi, 2),x(thực thi, 1),-(không có quyền). - Số: Tổng giá trị quyền. Ví dụ:
rwx= 4+2+1 = 7,r-x= 4+0+1 = 5.
Thay đổi quyền và sở hữu
- chmod: Sửa quyền. Dùng số để đơn giản hơn:
chmod 755 script.sh # rwxr-xr-x - chown: Thay đổi chủ sở hữu (người dùng và nhóm).
chown user1:group1 script.sh # Đổi cả chủ và nhóm chown -R user1:group1 mydir/ # Đổi đệ quy toàn bộ thư mục - chgrp: Chỉ thay đổi nhóm sở hữu.
chgrp devteam project/
Nguyên tắc truy cập
- Để vào thư mục: cần quyền
rvàx. - Để đọc tệp trong thư mục: cần
xở thư mục,rở tệp. - Để sửa tệp: cần
xở thư mục,rvàwở tệp. - Để tạo tệp mới: cần
wvàxở thư mục. - Để thực thi tệp: cần
xở tệp (vàxở thư mục nếu chứa).
Quyền đặc biệt (Special Permissions)
Ngoài 9 bit quyền cơ bản, Linux còn có 3 bit đặc biệt mở rộng tổng cộng thành 12 bit quyền:
- SUID (4): Khi thực thi, tệp chạy với quyền của chủ sở hữu (thường là root). Ký hiệu:
sở vị trí chủ sở hữu (thay chox). - SGID (2): Khi thực thi, tệp chạy với quyền nhóm của tệp. Nếu đặt trên thư mục, các tệp mới tạo sẽ có nhóm sở hữu là nhóm của thư mục. Ký hiệu:
sở vị trí nhóm. - Sticky Bit (1): Thường dùng cho thư mục (ví dụ
/tmp), ngăn người dùng xóa tệp của nhau. Ký hiệu:tở vị trí người khác.
Thuộc tính ẩn (Hidden Attributes)
Quản trị viên có thể đặt các thuộc tính đặc biệt cho tệp bằng lệnh chattr và xem bằng lsattr. Ví dụ: đặt thuộc tính i (immutable) để không ai có thể sửa, xóa tệp.
ACL (Access Control Lists)
ACL cho phép gán quyền truy cập chi tiết cho từng người dùng hoặc nhóm cụ thể, vượt ngoài mô hình chủ-nhóm-khác. Hai lệnh chính:
- setfacl: Đặt ACL. Ví dụ:
setfacl -m u:user1:rwx script.sh # Cho user1 quyền rwx setfacl -m g:devteam:r-- script.sh # Cho nhóm devteam quyền r - getfacl: Xem ACL.
getfacl script.sh
Các ACL có thể được kế thừa trên thư mục bằng tham số -R và -d (mặc định).