User, group và phân quyền Linux là chủ đề bắt buộc nếu anh muốn vận hành máy chủ an toàn. Rất nhiều sự cố production đến từ quyền sai: web server không đọc được file, backup không truy cập được thư mục, hoặc ngược lại user có quyền quá rộng dẫn đến xóa nhầm dữ liệu.
Bài này đi thẳng vào thực hành: tạo user, thêm group, dùng chmod/chown và kiểm tra sudo theo hướng dễ hiểu nhưng sát môi trường vận hành.
1. Tư duy đúng về quyền trên Linux
- mỗi process chạy dưới một user / group
- quyền nên cấp tối thiểu đủ dùng
- đừng cấp
777để “chữa cháy” nếu chưa hiểu nguyên nhân
2. Tạo user và group trong lab
sudo groupadd ops
sudo useradd -m -s /bin/bash alice
sudo usermod -aG ops alice
id alice
Output sẽ cho biết user thuộc những group nào. Đây là bước đầu để cấp quyền theo nhóm thay vì theo từng người.
3. Hiểu quyền rwx
Một file thường có ba lớp quyền:
- owner
- group
- others
ls -l /etc/passwd
Ký tự như -rw-r--r-- nghĩa là owner được đọc/ghi, group được đọc, others được đọc.
4. Thực hành chmod và chown
mkdir -p ~/perm-lab
cd ~/perm-lab
echo "demo" > app.env
ls -l
chmod 640 app.env
sudo chown alice:ops app.env
ls -l app.env
Thực chiến:
chmod 640phù hợp cho file cấu hình có thông tin nhạy cảmchown alice:opsđổi owner và group- sau khi đổi quyền, luôn xem lại bằng
ls -l
5. Thư mục và bit execute
Trên thư mục, quyền execute nghĩa là được đi vào thư mục đó. Một thư mục 640 thường không truy cập được. Ví dụ:
mkdir shared
chmod 750 shared
sudo chown alice:ops shared
Đây là mẫu khá hợp lý cho thư mục chia sẻ nội bộ: owner toàn quyền, group đọc/đi vào được, người khác không có quyền.
6. Kiểm tra sudo một cách an toàn
sudo -l -U alice
Nếu cần cấp quyền vận hành hạn chế, ưu tiên cấu hình sudoers theo command cụ thể thay vì toàn quyền root. Cách này liên hệ trực tiếp với thực tế production.
7. Kịch bản lỗi thường gặp
- Nginx báo 403 vì file web root thuộc owner/group sai
- cron backup fail vì user chạy job không đọc được thư mục dữ liệu
- dev không deploy được vì thư mục release không cho group ghi
- nhiều đội tạm sửa bằng
chmod -R 777rồi để nguyên rất nguy hiểm
8. Lab step-by-step
- Tạo user
alicevà groupops. - Tạo một file
secret.txtrồi thử các mức quyền 600, 640, 644. - Đăng nhập bằng user khác hoặc dùng
sudo -uđể thử đọc file. - Tạo thư mục
sharedvới quyền 750 và xác minh group truy cập được. - Ghi lại trường hợp nào đọc được, trường hợp nào bị từ chối.
9. Tài liệu chính thống
10. Checklist production
- không dùng
777trừ khi thật sự hiểu rủi ro và chỉ tạm thời trong lab - quyền được cấp theo group thay vì user đơn lẻ khi có thể
- file nhạy cảm dùng quyền tối thiểu
- mọi thay đổi quyền đều được kiểm tra lại bằng
ls -l - sudo được cấp theo lệnh cần dùng, không cấp tràn lan
11. Numeric mode và symbolic mode
Ngoài cách viết số như 640, anh cũng nên biết symbolic mode:
chmod u=rw,g=r,o= app.env
chmod g+w shared
chmod o-rwx secret.txt
Numeric mode nhanh và gọn, symbolic mode dễ đọc khi cần chỉnh từng phần nhỏ.
12. Case thực tế: web server đọc được nhưng dev không ghi được
Một tình huống hay gặp là web server chạy dưới user www-data, còn dev deploy bằng user khác. Nếu thư mục release thuộc owner sai hoặc group không đúng, app có thể chạy được nhưng deploy fail, upload fail hoặc cache không ghi được.
Cách nghĩ đúng là xác định:
- process nào đang chạy dưới user nào
- thư mục nào cần quyền ghi thật sự
- nên giải bằng owner/group, ACL hay quy trình deploy
13. Thư mục dùng chung và setgid
sudo mkdir -p /srv/shared
sudo chown root:ops /srv/shared
sudo chmod 2775 /srv/shared
Bit 2 đầu tiên trong 2775 là setgid trên thư mục, giúp file mới tạo bên trong tự kế thừa group ops. Đây là kỹ thuật rất hữu ích cho thư mục dùng chung của team.
14. Lab mở rộng: kiểm tra quyền bằng góc nhìn của đúng user
sudo -u alice cat /path/to/file
sudo -u alice touch /path/to/file
namei -l /path/to/file
namei -l rất hay khi cần lần từng lớp quyền trên cả đường dẫn thư mục cha, không chỉ file đích.
15. Khi nào nên nghĩ tới ACL?
Nếu mô hình owner/group cơ bản không đủ linh hoạt, anh có thể tìm hiểu ACL với getfacl và setfacl. Bài nhập môn chưa cần đi sâu, nhưng nên biết nó tồn tại để tránh cố bẻ mọi thứ bằng chmod 777.
Kết luận: nắm chắc User, group và phân quyền Linux giúp anh xử lý lỗi “permission denied” đúng cách và giảm rủi ro bảo mật rất nhiều.
