CHMOD THAM KHẢO NHANH
Quyền file, chế độ số & ký hiệu, bit đặc biệt, umask
Chế Độ Số
Chữ Số Quyền Octal
| 4 | Đọc (r) |
| 2 | Ghi (w) |
| 1 | Thực thi (x) |
| 0 | Không có quyền |
Định Dạng Ba Chữ Số
chmod 755 file # rwxr-xr-x
chmod 644 file # rw-r--r--
chmod 700 file # rwx------
chmod 600 file # rw-------
Tính Toán Chữ Số
| 7 (4+2+1) | rwx — đọc, ghi, thực thi |
| 6 (4+2) | rw- — đọc, ghi |
| 5 (4+1) | r-x — đọc, thực thi |
| 4 | r-- — chỉ đọc |
| 3 (2+1) | -wx — ghi, thực thi |
| 2 | -w- — chỉ ghi |
| 1 | --x — chỉ thực thi |
| 0 | --- — không có quyền |
Chế Độ Ký Hiệu
Cú Pháp: [ugoa][+-=][rwxXst]
| u | User (chủ sở hữu) |
| g | Group |
| o | Others (người khác) |
| a | All (u + g + o) |
| + | Thêm quyền |
| - | Xóa quyền |
| = | Đặt quyền chính xác |
Ví Dụ Ký Hiệu
chmod u+x file # chủ sở hữu: thêm thực thi
chmod g-w file # group: bỏ ghi
chmod o=r file # others: chỉ đọc
chmod a+r file # tất cả: thêm đọc
chmod u+x,g-w,o= file # thao tác kết hợp
Quyền Thường Dùng
Preset Quyền File
| 644 rw-r--r-- | File mặc định — chủ sở hữu rw, người khác đọc |
| 755 rwxr-xr-x | Script/binary — chủ sở hữu rwx, người khác rx |
| 600 rw------- | File riêng tư — chỉ chủ sở hữu |
| 400 r-------- | Chỉ đọc riêng tư (SSH keys) |
| 666 rw-rw-rw- | File ai cũng ghi được (tránh dùng) |
| 777 rwxrwxrwx | Toàn quyền cho tất cả (tránh dùng) |
Tham Khảo Nhanh
chmod 644 *.html # web files: chủ sở hữu rw, công cộng r
chmod 755 *.sh # scripts: chủ sở hữu rwx, công cộng rx
chmod 600 ~/.ssh/id_* # SSH keys: chỉ chủ sở hữu
chmod 400 secret.pem # certificate: chỉ đọc
Quyền Thư Mục
Ý Nghĩa Quyền Với Thư Mục
| r (4) | Liệt kê nội dung thư mục (ls) |
| w (2) | Tạo/xóa file trong thư mục |
| x (1) | Truy cập (cd vào) thư mục |
| rx (5) | Liệt kê + truy cập (thông thường để đọc) |
| rwx (7) | Toàn quyền |
Quyền Thư Mục Thường Dùng
chmod 755 dir/ # chuẩn: chủ sở hữu rwx, người khác rx
chmod 700 dir/ # riêng tư: chỉ chủ sở hữu
chmod 750 dir/ # group truy cập: chủ sở hữu rwx, group rx
chmod 1777 /tmp # sticky bit: chỉ chủ sở hữu mới xóa được
Bit Đặc Biệt
Setuid, Setgid, Sticky
| Setuid (4xxx) | Chạy với quyền của chủ sở hữu file (vd: passwd) |
| Setgid (2xxx) | Chạy với group của file / kế thừa group thư mục |
| Sticky (1xxx) | Chỉ chủ sở hữu mới xóa được file (vd: /tmp) |
Đặt Bit Đặc Biệt
chmod 4755 program # setuid: -rwsr-xr-x
chmod 2755 dir/ # setgid: drwxr-sr-x
chmod 1755 dir/ # sticky: drwxr-xr-t
chmod u+s program # setuid dạng ký hiệu
chmod g+s dir/ # setgid dạng ký hiệu
chmod +t dir/ # sticky bit dạng ký hiệu
Đệ Quy
Thay Đổi Quyền Đệ Quy
chmod -R 755 dir/ # đặt tất cả thành 755 đệ quy
chmod -R u+rwX dir/ # chủ sở hữu rw, +x chỉ cho thư mục
chmod -R go-w dir/ # bỏ quyền ghi của group/others
File vs Thư Mục với find
# đặt thư mục thành 755, file thành 644
find /path -type d -exec chmod 755 {} +
find /path -type f -exec chmod 644 {} +
X Hoa — Thực Thi Có Điều Kiện
| x (thường) | Thêm thực thi cho tất cả file và thư mục |
| X (hoa) | Thêm thực thi chỉ cho thư mục và file đã có thực thi |
umask
Cách umask Hoạt Động
| umask | Hiển thị umask hiện tại |
| umask 022 | Files: 644, Dirs: 755 |
| umask 077 | Files: 600, Dirs: 700 |
| umask 002 | Files: 664, Dirs: 775 |
Tính Toán umask
# quyền mặc định trừ umask = quyền thực tế
# Files: 666 - 022 = 644 (rw-r--r--)
# Dirs: 777 - 022 = 755 (rwxr-xr-x)
umask # hiển thị umask hiện tại
umask 022 # mặc định thường dùng
umask -S # hiển thị dạng ký hiệu
Các Pattern Thường Gặp
Tình Huống Hằng Ngày
| Web root | chmod -R 755 /var/www/html |
| File cấu hình | chmod 600 app.conf |
| Thư mục SSH | chmod 700 ~/.ssh |
| SSH authorized_keys | chmod 600 ~/.ssh/authorized_keys |
| Thư mục chia sẻ | chmod 2775 /shared (setgid) |
| Log files | chmod 640 /var/log/app.log |
| Cron scripts | chmod 755 /etc/cron.daily/myjob |
| Thư mục tạm | chmod 1777 /tmp (sticky) |
Xem Quyền
ls -l file.txt # xem quyền
ls -ld dir/ # xem quyền thư mục
stat -c '%A %a %n' * # ký hiệu + số + tên
getfacl file.txt # xem ACL (nếu đang dùng)