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.
- Linux quản lý user/group như thế nào.
- Hiểu quyền
rwxvà 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
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 -Rnhầ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.
chmod -R hoặc chown -R, hãy chạy pwd và ls -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
- Tạo file
private.txtvà đặt quyền 600. - Tạo thư mục
publicvà đặt quyền 755. - Giải thích khác nhau giữa 644 và 600.
- 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 -mtạo luôn home directory.-s /bin/bashđặt shell mặc định.usermod -aGthê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:
alicetạo file được vì thuộc groupdevopsnobodybị 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 đọc755= 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
-akhi 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
- Tạo 2 user và 2 group khác nhau.
- Dựng một thư mục chỉ một nhóm được ghi.
- Chứng minh bằng test thực tế user nào ghi được, user nào bị từ chối.
- 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.
