UID trong Linux là mã số định danh giúp hệ điều hành nhận biết và phân biệt từng tài khoản người dùng, từ đó áp dụng quyền truy cập và quản lý tài nguyên một cách chính xác. Trong bài viết này, bạn sẽ tìm hiểu chi tiết khái niệm, cách lưu trữ, tra cứu UID để quản trị hệ thống hiệu quả và an toàn hơn.
Những điểm chính
- Khái niệm và tầm quan trọng: Biết được UID trong Linux là một giá trị số nguyên duy nhất được hệ thống dùng để nhận dạng, phân biệt người dùng và quản lý quyền truy cập file/tài nguyên.
- Lưu trữ và xác định UID: Biết được thông tin UID được lưu trữ ở đâu (/etc/passwd) và cách đọc, xác định UID của một người dùng bất kỳ.
- Các phương pháp tra cứu: Nắm vững các cách để lấy tên người dùng từ một UID cụ thể bằng các lệnh như id, getent, awk hoặc thông qua Bash script.
- So sánh các phương pháp: Hiểu rõ ưu và nhược điểm của từng phương pháp tra cứu để lựa chọn công cụ phù hợp nhất cho từng tình huống quản trị.
- Cách thay đổi UID: Biết được quy trình thay đổi UID cho người dùng hiện có, giúp bạn quản lý và phân bổ lại UID khi cần thiết.
- Tạo người dùng mới với UID chỉ định: Nắm được cú pháp lệnh để tạo người dùng mới với một UID cụ thể, giúp bạn chủ động thiết lập tài khoản theo đúng yêu cầu hệ thống.
- Giải đáp thắc mắc (FAQ): Tìm câu trả lời cho các câu hỏi phổ biến như cách thay đổi UID, ý nghĩa của UID 0, sự khác biệt giữa UID và GID.
UID trong Linux là gì?
UID trong Linux là một số nguyên đóng vai trò định danh duy nhất cho từng tài khoản người dùng trong hệ thống, dùng để hệ điều hành nhận diện và phân biệt các người dùng với nhau. UID được Linux sử dụng làm cơ sở để quản lý quyền sở hữu file, quyền truy cập tài nguyên và một số hoạt động liên quan đến bảo mật cho từng người dùng, trong đó UID 0 luôn được gán cho tài khoản root có toàn quyền trên hệ thống.

Thông tin ánh xạ giữa tên người dùng và UID được lưu trong file /etc/passwd, trong đó mỗi dòng có cấu trúc: username:x:UID:GID:comment:home:shell, lần lượt thể hiện tên đăng nhập, trường mật khẩu (thường là x), UID, GID, phần mô tả, thư mục home và shell đăng nhập mặc định của người dùng.

Tầm quan trọng của UID trong Linux
UID giữ vai trò then chốt trong mô hình bảo mật của Linux vì quyết định quyền truy cập tài nguyên, quyền sở hữu file và phạm vi thực thi lệnh của từng người dùng trên hệ thống. Nhờ cơ chế gắn tài nguyên với UID cụ thể, hệ điều hành dễ dàng phân tách dữ liệu giữa các tài khoản và hạn chế truy cập trái phép vào file không thuộc quyền sở hữu.
Mỗi file hoặc thư mục được tạo ra đều gắn với UID của người dùng tạo ra nó, nên chỉ UID đó hoặc các đối tượng được cấp thêm quyền mới có thể chỉnh sửa hay xóa. Root với UID 0 là tài khoản có mức đặc quyền cao nhất và được phép thao tác trên tài nguyên nhạy cảm và thực hiện các lệnh quản trị, trong khi người dùng thông thường chỉ được hoạt động trong phạm vi mà UID của họ được cấp, giúp việc phân quyền và bảo mật trên hệ thống rõ ràng và kiểm soát tốt hơn.

Nơi lưu trữ và cách xác định UID
Trong Linux, UID của từng tài khoản được lưu trong file hệ thống /etc/passwd, đây là nơi chứa danh sách toàn bộ người dùng cùng các thông tin cơ bản như tên đăng nhập, UID, GID, thư mục home và shell đăng nhập mặc định. Mỗi dòng trong file này gồm 7 trường được phân tách bằng dấu hai chấm, lần lượt là tên người dùng, trường mật khẩu (thường hiển thị là ký tự x), UID, GID, thông tin mô tả, đường dẫn thư mục home và đường dẫn đến shell mặc định.
Để xem và xác định UID, bạn có thể dùng lệnh cat (hoặc sudo cat /etc/passwd) rồi đọc giá trị ở cột thứ 3 trong từng dòng tương ứng với tài khoản cần kiểm tra, trong đó dòng dành cho root sẽ có UID = 0 và GID = 0. Ngoài UID cơ bản, hệ thống còn sử dụng các dạng UID như RUID, EUID và UID đã lưu (suid) để liên kết tiến trình với tài khoản thực, xác định quyền truy cập hiệu lực và cho phép thay đổi, rồi khôi phục lại đặc quyền khi thực thi các tác vụ yêu cầu quyền cao hơn.
Các cách tìm username từ UID trong Linux
Sử dụng lệnh id
Khi bạn chỉ biết UID và muốn xác định username tương ứng, thay vì tìm thủ công trong file /etc/passwd, bạn có thể dùng lệnh:
id -nu <uid>Lệnh bên trên sẽ trả về username tương ứng với UID bạn đã nhập một cách nhanh chóng và thường được sử dụng trong quản trị hệ thống Linux.
Sử dụng lệnh getent
Cách đơn giản và chính xác để bạn tra cứu thông tin người dùng theo UID trên các hệ thống sử dụng NSS (Name Service Switch) là dùng lệnh:
getent passwd 1000
Lệnh trên sẽ hiển thị toàn bộ thông tin người dùng có UID là 1000.
Trong trường hợp mà bạn chỉ muốn lấy tên người dùng, bạn có thể kết hợp thêm cut như sau:
getent passwd 1001 | cut -d: -f1Giải thích:
- getent: Truy vấn thông tin từ các cơ sở dữ liệu hệ thống như /etc/passwd, /etc/group, LDAP.
- passwd: Chỉ định cơ sở dữ liệu cần tra cứu, ở đây là danh sách người dùng.
- 1001: UID (User ID) của tài khoản cần lấy thông tin.
- cut: Lệnh dùng để cắt, tách các trường (field) trong một dòng văn bản.
- -d:: Thiết lập dấu phân cách trường là dấu hai chấm :.
- -f1: Chọn trường thứ nhất sau khi tách, tương ứng với tên người dùng (username).
Dùng awk đọc trực tiếp từ /etc/passwd
Trong trường hợp hệ thống không hỗ trợ getent hoặc không dùng NSS, bạn có thể tra cứu trực tiếp từ file /etc/passwd:
awk -F: '$3==1000 {print $1}' /etc/passwd
Giải thích:
- awk: Công cụ xử lý văn bản, rất hữu ích khi làm việc với các file dạng dòng như /etc/passpasswd.
- -F:: Thiết lập dấu hai chấm làm ký tự phân tách trường trong mỗi dòng.
- $3==1000: Chỉ chọn những dòng có trường thứ ba (UID) bằng 1000.
- {print $1}: In ra trường thứ nhất, tức là tên người dùng tương ứng với UID đó.
Câu lệnh trên sẽ quét file /etc/passwd và chỉ chọn những dòng có trường UID bằng 1000. Sau đó, awk in ra trường thứ nhất của dòng đó, chính là tên người dùng tương ứng với UID 1000.
Viết Bash Script tra cứu UID
Bạn cũng có thể tạo một script Bash đơn giản để tự động hóa việc kiểm tra UID.
Tạo file uid_to_user.sh:
#!/bin/bash
UID_INPUT=$1
USERNAME=$(awk -F: -v uid="$UID_INPUT" '$3==uid {print $1}' /etc/passwd)
if [ -n "$USERNAME" ]; then
echo "Tên người dùng: $USERNAME"
else
echo "Không tìm thấy người dùng với UID $UID_INPUT"
fiSau khi lưu file, cấp quyền thực thi và chạy lệnh theo thứ tự:
chmod +x uid_to_user.sh
./uid_to_user.sh 1000Script sẽ kiểm tra UID được nhập và trả về username tương ứng, giúp tiện lợi hơn khi thao tác nhiều lần.
So sánh ưu và nhược điểm giữa các phương pháp
| Phương pháp | Ưu điểm | Nhược điểm |
| Sử dụng lệnh id | Cú pháp đơn giản, dễ nhớ, trả về nhanh username từ UID với id -nu . | Chủ yếu phù hợp trên máy cục bộ, không linh hoạt bằng getent khi dùng nhiều nguồn backend. |
| getent passwd UID | Nhanh, chính xác, hoạt động tốt trên hệ thống dùng NSS và hỗ trợ nhiều nguồn như /etc/passwd, LDAP. | Phụ thuộc vào việc hệ thống có hỗ trợ getent và cấu hình NSS đúng. |
| awk trên /etc/passwd | Không phụ thuộc tiện ích ngoài, chỉ cần file /etc/passwd là có thể tra cứu. | Có thể bỏ sót người dùng nếu hệ thống dùng LDAP hoặc nguồn khác ngoài /etc/passwd. |
| Script Bash | Tùy biến cao, dễ đóng gói logic tra cứu và tích hợp vào quy trình tự động hóa, tool nội bộ. | Bạn cần thêm thao tác tạo, phân quyền, bảo trì script, nhất là khi triển khai trên nhiều máy. |
Cách thay đổi UID trong Linux
Trong quản trị hệ thống Linux, việc thay đổi UID là thao tác cần thiết khi bạn muốn chuyển quyền sở hữu tài nguyên từ nhân viên cũ sang nhân viên mới hoặc đồng bộ hóa ID người dùng trên nhiều máy chủ khác nhau. Cách thực hiện như sau:
Bước 1: Tạo người dùng mới (cần quyền root)
useradd example_userKiểm tra UID của người dùng vừa tạo:
id example_userGiả sử UID hiện tại là 1003.
Bước 2: Xóa người dùng cũ để giải phóng UID
Ví dụ, người dùng fosslinux_admin có UID 1001:
sudo userdel -r fosslinux_adminBước 3: Gán UID cũ cho người dùng mới
sudo usermod -u 1001 example_userKiểm tra lại:
id example_userKết quả cho thấy example_user đã có UID 1001.
Bước 4: Đồng bộ quyền sở hữu file
Sau khi đổi UID, cần chuyển quyền sở hữu các file của UID cũ sang người dùng mới:
sudo find / -user 1001 -exec chown -h example_user {} \;Bước này giúp đảm bảo toàn bộ file và thư mục trước đây thuộc về người dùng cũ được gán đúng cho người dùng mới.
Tạo user mới với UID chỉ định sẵn
Bạn cũng có thể tạo trực tiếp một tài khoản mới với UID xác định trước ngay từ bước khởi tạo user. Cú pháp cơ bản như sau:
sudo useradd -u <UID_muon_dat> <ten_user>Ví dụ: Tạo user user_2 với UID 1111 với lệnh sudo useradd -u 1111 user_2. Sau đó, bạn cần dùng lệnh id user_2 để kiểm tra, kết quả sẽ hiển thị UID của user_2 là 1111.
Câu hỏi thường gặp
Làm sao để lấy UID của người dùng trong Linux?
Bạn có thể dùng lệnh id -u để lấy UID của một tài khoản cụ thể hoặc chạy id không tham số để xem UID của người dùng hiện tại.
Cách đổi UID cho một user trong Linux như thế nào?
Quản trị viên thường dùng lệnh usermod -u và sau đó cập nhật lại quyền sở hữu file bằng chown hoặc find … -exec chown … để tránh lỗi phân quyền.
UID=0 trong Linux có ý nghĩa gì?
UID 0 luôn thuộc về tài khoản root, đây là tài khoản siêu quản trị có toàn quyền truy cập và chỉnh sửa hầu hết tài nguyên trên hệ thống.
Tại sao nhiều user thường có UID 1000 trên Linux?
Trên đa số distro hiện đại, UID từ 0 – 999 thường dành cho tài khoản hệ thống, còn người dùng thông thường được cấp UID bắt đầu từ 1000, nên user đầu tiên tạo ra thường mang UID 1000.
Khác biệt giữa UID và GID trong Linux là gì?
UID là mã định danh người dùng, còn GID là mã định danh nhóm, hệ thống dùng cả hai kết hợp với quyền file để quyết định ai được đọc, ghi hoặc thực thi tài nguyên.
Linux quy ước dải UID như thế nào?
Thông thường, UID 0 dành cho root, một dải UID thấp cho user hệ thống, còn UID từ khoảng 1000 trở lên được dùng cho các tài khoản người dùng thông thường.
Làm sao kiểm tra UID và GID hiện tại?
Bạn chỉ cần chạy lệnh id là sẽ thấy cả UID, GID và các group bổ sung của user đang đăng nhập.
Cách lấy đồng thời UID và GID của một user bất kỳ?
Bạn có thể dùng id để hiện đầy đủ UID, GID chính và các nhóm phụ mà tài khoản đó thuộc về.
UID Linux là nền tảng cho mọi cơ chế phân quyền và quản lý người dùng trên hệ điều hành này từ việc xác định ai sở hữu file cho tới việc kiểm soát ai được phép thực thi các lệnh nhạy cảm. Khi nắm vững cách UID được tạo, lưu trữ, tra cứu và thay đổi, bạn sẽ chủ động hơn trong việc cấu hình bảo mật, xử lý sự cố phân quyền cũng như xây dựng các script tự động hóa liên quan đến tài khoản người dùng.




