Bài 03: User, group và phân quyền Linux

Chốt ý nhanh

Chủ đề Điểm cần nhớ
User và group Quy định ai là người sở hữu tài nguyên và ai được tham gia truy cập.
Permission Đọc, ghi, thực thi phải được hiểu theo cả file lẫn thư mục.
Nguyên tắc an toàn Không dùng 777 để chữa cháy nếu chưa hiểu nguyên nhân gốc.

Bài 03: User, group và phân quyền Linux

Bài này đi sâu vào user, group, permission và cách thực hành phân quyền an toàn cho file/thư mục trên Linux.

Sau bài này anh sẽ biết:

  • Linux quản lý user/group như thế nào.
  • Hiểu quyền rwx và số quyền 644/755.
  • Dùng chown, chmod, groups.
  • Phân quyền đúng cho thư mục web/app.

1. User và group là gì?

Mỗi process/file trong Linux đều gắn với user và group. Quyền truy cập quyết định ai được đọc, ghi hoặc chạy file.

whoami
id
groups

id cho biết UID, GID và các group mà user thuộc về.

2. Hiểu quyền rwx

ls -l

Ví dụ output:

-rw-r--r-- 1 root root 1200 May 03 config.txt
drwxr-xr-x 2 www-data www-data 4096 May 03 public
Ký hiệu Ý nghĩa
r read: đọc file/list thư mục
w write: sửa file/tạo xóa trong thư mục
x execute: chạy file/đi vào thư mục

3. Quyền số 644, 755 là gì?

Số Quyền Thường dùng
644 owner đọc/ghi, group/others chỉ đọc File config, file web tĩnh
600 chỉ owner đọc/ghi Private key, secret
755 owner full, group/others đọc/chạy Thư mục public, script cần chạy
700 chỉ owner full Thư mục riêng tư

4. Lab thực hành phân quyền

Mục tiêu: tạo file/thư mục và đổi quyền để hiểu tác dụng.
mkdir -p ~/sysadmin-lab/day03
cd ~/sysadmin-lab/day03
echo "secret" > secret.txt
ls -l secret.txt
chmod 600 secret.txt
ls -l secret.txt
chmod 644 secret.txt
ls -l secret.txt

Khi file là 600, chỉ owner đọc/ghi. Khi là 644, người khác có thể đọc nhưng không ghi.

Đổi owner/group

sudo chown root:root secret.txt
ls -l secret.txt
sudo chown $USER:$USER secret.txt
ls -l secret.txt

chown user:group file đổi chủ sở hữu file. Trên production phải rất cẩn thận vì đổi sai owner có thể làm service không đọc/ghi được.

5. Tình huống thực tế: web không upload được ảnh

Ứng dụng web cần ghi vào thư mục uploads/, nhưng thư mục thuộc root nên process web không ghi được.

ls -ld /var/www/site/uploads
# nếu app chạy bằng user www-data
sudo chown -R www-data:www-data /var/www/site/uploads
sudo chmod -R 755 /var/www/site/uploads

6. Lỗi thường gặp

  • Dùng chmod 777 để “cho nhanh”. Đây là thói quen nguy hiểm.
  • chown -R nhầm thư mục quá rộng.
  • Không biết service chạy bằng user nào.
  • Private key để quyền quá mở, SSH từ chối dùng key.
Lưu ý production: Trước khi chmod -R hoặc chown -R, hãy chạy pwdls -ld để chắc chắn đúng thư mục.

7. Checklist phân quyền

  • Biết file/thư mục thuộc user/group nào.
  • Biết service chạy bằng user nào.
  • File nhạy cảm dùng 600/640.
  • Thư mục public thường 755, file thường 644.
  • Tránh 777 trừ lab tạm thời.

8. Bài tập

  1. Tạo file private.txt và đặt quyền 600.
  2. Tạo thư mục public và đặt quyền 755.
  3. Giải thích khác nhau giữa 644 và 600.
  4. Tìm user đang chạy service SSH hoặc Nginx nếu máy có cài.

Kết bài

Đây là một trong những bài nền tảng nhất của cả phase 1. Khi hiểu đúng user, group và permission, anh sẽ tránh được rất nhiều lỗi kiểu app không ghi được file, service không đọc được config hoặc thư mục chia sẻ bị mở quyền quá tay. Từ đây trở đi, mọi bài về service, log, web server hay deploy đều sẽ dễ hiểu hơn vì anh đã nắm được lớp quyền bên dưới.

Phần thực hành mở rộng: user, group và phân quyền bằng các tình huống thật

Đây là phần người mới nên làm chậm và kỹ. Nếu hiểu user, group và permission ngay từ đầu, sau này anh sẽ ít gây lỗi hơn khi đụng đến web server, backup, deploy và bảo mật.

Lab 1: Tạo user và group mới

sudo groupadd devops
sudo useradd -m -s /bin/bash alice
sudo usermod -aG devops alice
id alice
getent group devops

Điều cần hiểu:

  • useradd -m tạo luôn home directory.
  • -s /bin/bash đặt shell mặc định.
  • usermod -aG thêm user vào group phụ.

Lab 2: Tạo thư mục dùng chung cho nhóm

sudo mkdir -p /srv/shared-project
sudo chown root:devops /srv/shared-project
sudo chmod 775 /srv/shared-project
ls -ld /srv/shared-project

Output ví dụ:

drwxrwxr-x 2 root devops 4096 May 20 18:10 /srv/shared-project

Phân tích:

  • owner: root
  • group: devops
  • owner và group có quyền đọc/ghi/thực thi
  • others chỉ được đọc và đi vào thư mục

Lab 3: Kiểm tra quyền bằng hai user khác nhau

sudo -u alice touch /srv/shared-project/alice.txt
sudo -u nobody touch /srv/shared-project/test.txt

Kết quả mong đợi:

  • alice tạo file được vì thuộc group devops
  • nobody bị từ chối vì không có quyền ghi

Đây là cách tốt nhất để hiểu permission: tạo tình huống rồi quan sát ai làm được gì.

Lab 4: Chmod cơ bản và ký hiệu số

mkdir -p ~/perm-lab
cd ~/perm-lab
touch script.sh
chmod 644 script.sh
ls -l script.sh
chmod 755 script.sh
ls -l script.sh

Giải thích:

  • 644 = owner đọc/ghi, group đọc, others đọc
  • 755 = owner đọc/ghi/thực thi, group đọc/thực thi, others đọc/thực thi

Nếu là shell script, quyền execute quyết định file có chạy trực tiếp được hay không.

Lab 5: Chown và rủi ro production

sudo mkdir -p /srv/web-demo
sudo touch /srv/web-demo/index.html
sudo chown alice:devops /srv/web-demo/index.html
ls -l /srv/web-demo/index.html

Hãy tự hỏi: nếu một file cấu hình quan trọng bị đổi owner sang sai user thì chuyện gì có thể xảy ra? Ví dụ:

  • dịch vụ không đọc được file
  • ứng dụng không ghi log được
  • file bị sửa bởi người không nên có quyền

Lab 6: setgid cho thư mục nhóm

Nếu nhiều người cùng làm việc trong một thư mục chung, dùng setgid để file mới tự mang group của thư mục:

sudo chmod 2775 /srv/shared-project
ls -ld /srv/shared-project

Khi đó file mới tạo trong thư mục này sẽ tự mang group devops, giúp cộng tác dễ hơn.

Tình huống thực tế

Một web app triển khai xong nhưng không ghi được file upload. Nguyên nhân thường không phải app hỏng, mà là thư mục upload có owner/group hoặc chmod sai. Nếu anh hiểu user/group/permission, anh sẽ debug rất nhanh bằng ls -lah, id, namei -l.

Lệnh nên thực hành thêm

umask
namei -l /srv/shared-project/alice.txt
stat /srv/shared-project/alice.txt
sudo -l -U alice

Lỗi phổ biến

  • Dùng chmod 777 để “chữa cháy”.
  • Quên -a khi thêm group làm mất group cũ của user.
  • Nhầm owner và group.
  • Không hiểu thư mục cần quyền execute để đi vào.

Bài tập cuối phần

  1. Tạo 2 user và 2 group khác nhau.
  2. Dựng một thư mục chỉ một nhóm được ghi.
  3. Chứng minh bằng test thực tế user nào ghi được, user nào bị từ chối.
  4. Viết lại bằng lời ý nghĩa của các mode: 644, 755, 600, 700, 775.

Phần đào sâu thêm: hiểu quyền theo tình huống deploy và chia sẻ dữ liệu

Permission chỉ thật sự “ngấm” khi anh nhìn nó dưới góc deploy, upload, backup và cộng tác giữa nhiều user/service.

Lab bổ sung: mô phỏng thư mục upload của web app

sudo mkdir -p /srv/app/uploads
sudo chown root:devops /srv/app/uploads
sudo chmod 2775 /srv/app/uploads
ls -ld /srv/app/uploads
sudo -u alice touch /srv/app/uploads/test-upload.txt

Nếu mô hình quyền đúng, user thuộc group phù hợp sẽ ghi được file mà không cần mở tung quyền ra 777.

Vì sao 777 là thói quen xấu?

  • Ai cũng ghi được, rủi ro bị sửa/xóa ngoài ý muốn.
  • Che lấp nguyên nhân thật: sai owner, sai group, sai execute bit hoặc sai thiết kế thư mục.
  • Khi vào production, 777 thường là dấu hiệu cấu hình cẩu thả.

Lab bổ sung: đọc quyền theo từng lớp thư mục

namei -l /srv/app/uploads/test-upload.txt
stat /srv/app/uploads/test-upload.txt

Lệnh namei -l rất đáng luyện vì nhiều lỗi không nằm ở file cuối cùng, mà nằm ở một thư mục cha không cho đi qua.

Tình huống thực tế hơn

Một app PHP hoặc Node có thể chạy bằng user dịch vụ riêng như www-data. Nếu thư mục upload thuộc owner khác và group không khớp, app sẽ báo lỗi ghi file. Lúc đó người biết permission sẽ xử lý đúng gốc vấn đề thay vì vá tạm.

Tác giả: Mạnh Hoàng

Tôi là Hoàng Mạnh, người sáng lập blog SysadminSkills.com. Tôi viết về quản trị hệ thống, bảo mật máy chủ, DevOps và cách ứng dụng AI để tự động hóa công việc IT. Blog này là nơi tôi chia sẻ những gì đã học được từ thực tế – đơn giản, ngắn gọn và áp dụng được ngay.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *