Phân quyền tệp
Xem thửLinux kiểm soát truy cập tệp/thư mục bằng chủ sở hữu (owner), nhóm (group) và other, cùng các bit r/w/x (và bit đặc biệt SUID/SGID/sticky). Hiểu mô hình này là nền tảng xử lý Permission denied.
Đọc ls -l
ls -l /etc/passwd
# -rw-r--r-- 1 root root 3200 Mar 12 10:00 /etc/passwd
| Cột | Ý nghĩa |
|---|---|
-rw-r--r-- | Loại + quyền (owner/group/other) |
1 | Số hard link |
root root | Owner và group |
3200 | Kích thước (byte) |
| Thời gian | mtime |
| Tên | Đường dẫn/tên |
Ký tự đầu: - file thường, d thư mục, l symlink, c/b device...
Ba bộ ba tiếp theo: owner | group | other, mỗi bộ gồm rwx hoặc -.
-rwxr-x---
│└┬┘└┬┘└┬┘
│ │ │ └ other: ---
│ │ └──── group: r-x
│ └─────── owner: rwx
└────────── loại tệp (- file, d dir, l link, ...)
Ví dụ: -rwxr-x--- = owner rwx, group r-x, other ---.
Đang tải sơ đồ…
Cách đọc sơ đồ. Chuỗi quyền tách thành loại tệp và ba bộ ba owner, group, other, mỗi bộ cộng r=4, w=2, x=1. Vì vậy -rwxr-x--- tương ứng chmod 750. Đọc từng bộ ba độc lập, đừng gộp chúng lại.
Ai được áp dụng quy tắc nào?
Kernel chọn một trong ba lớp, theo thứ tự:
- Nếu UID process = owner thì dùng quyền owner.
- Else nếu GID (hoặc supplementary group) khớp group của file thì dùng quyền group.
- Else thì dùng quyền other.
Không “cộng dồn” owner+group.
Bit đặc biệt (khái quát)
| Bit | Trên file | Trên thư mục |
|---|---|---|
| SUID | Chạy process với EUID = owner (ví dụ passwd) | (ít dùng / không mang nghĩa quen thuộc) |
| SGID | Chạy với EGID = group của file | File mới inherit group của thư mục |
| Sticky (t) | — | Chỉ owner file (hoặc root) mới xóa được entry — điển hình /tmp |
ls -ld /tmp /usr/bin/passwd
# drwxrwxrwt ... /tmp
# -rwsr-xr-x ... /usr/bin/passwd
umask — quyền mặc định khi tạo mới
umask
# thường 0022, nên file mới 644, dir mới 755
touch /tmp/a; mkdir /tmp/d; ls -l /tmp/a; ls -ld /tmp/d
umask tắt các bit tương ứng khỏi mặc định (file base 666, dir base 777).
Sơ đồ quyết định quyền
Đang tải sơ đồ…
Cách đọc sơ đồ. Kernel chọn đúng một lớp quyền: owner nếu UID khớp, nếu không thì group (gồm cả nhóm phụ) nếu khớp, còn lại là other. Sau đó mới so sánh bit cần thiết. Lưu ý root thường được bỏ qua các kiểm tra này, và ACL hoặc SELinux có thể thêm quy tắc ngoài mode Unix, nên khi mode đúng mà vẫn bị chặn hãy kiểm tra chúng.
Troubleshooting Permission denied
ls -lfile đích — thiếur/w/x?ls -ldtừng thư mục cha — thiếuxđể traverse?- Đang chạy user nào?
id - Có ACL không?
getfacl file(nếu dùng ACL). - Trên hệ có SELinux/AppArmor, đôi khi bị chặn ngoài mode Unix — xem log audit/
journalctlnếu mode đã đúng mà vẫn fail.
namei -l /var/www/app/secret.env
id
namei -l in quyền từng thành phần path — cách nhanh nhất tìm khâu thiếu x.
Lỗi thường gặp
- Chmod file
644nhưng khôngcdđược vào dir vì dir thiếux. - Tưởng thuộc group là được quyền owner.
- World-writable (
777) “cho xong” trên web root — rủi ro bảo mật lớn.