Linux File Permissions: Hướng dẫn toàn diện từ cơ bản đến nâng cao

✍️ Trần Minh Trí (Chuyên gia AI & Lập trình)
⏱️ 7 phút đọcIntermediate
#linux #file permissions #chmod #chown #security
Linux File Permissions: Hướng dẫn toàn diện từ cơ bản đến nâng cao

1. Hiểu về file permissions trên Linux

Mỗi file và thư mục trên Linux có 3 loại quyền cho 3 nhóm: owner (chủ sở hữu), group (nhóm), và others (người khác).

Ba quyền cơ bản:

  • r (read): Đọc nội dung file / Liệt kê thư mục.
  • w (write): Ghi/sửa file / Tạo/xoá file trong thư mục.
  • x (execute): Chạy file / Truy cập thư mục (cd vào).

Xem permissions:

ls -l cho output: -rwxr-xr-- 1 user group 1024 Jul 24 10:00 file.txt

  • Ký tự đầu: - (file), d (directory), l (symlink).
  • 9 ký tự tiếp: 3 nhóm (owner, group, others) x 3 quyền.
  • rwx = read, write, execute. r-x = read, execute (no write). r-- = read only.
💡TIP
Dùng stat file.txt để xem chi tiết permissions ở cả dạng symbolic và numeric.

2. Chmod: Thay đổi permissions

Symbolic mode (dễ hiểu):

  • chmod u+x file - Thêm execute cho owner.
  • chmod g-w file - Bỏ write cho group.
  • chmod o=r file - Set others chỉ đọc.
  • chmod a+rx file - Thêm read+execute cho all.
  • chmod -R g+w dir/ - Đệ quy: thêm write cho group vào thư mục.

Numeric mode (nhanh):

  • r=4, w=2, x=1.

Cộng lại: rwx=7, rw-=6, r-x=5, r--=4.

  • chmod 755 file - Owner: rwx (7), Group: r-x (5), Others: r-x (5).
  • chmod 644 file - Owner: rw- (6), Group: r-- (4), Others: r-- (4).
  • chmod 700 ~/.ssh - Owner full, nobody else.
📝NOTE
755 là phổ biến nhất cho thư mục và script. 644 cho file text/thông thường. 700 cho thư mục nhạy cảm.

3. Chown và Chgrp: Đổi chủ sở hữu

Chown (change owner):

chown username file - Đổi owner.

chown username:groupname file - Đổi cả owner và group.

chown :groupname file - Chỉ đổi group (tương đương chgrp).

chown -R username:groupname dir/ - Đệ quy.

Chgrp (change group):

chgrp groupname file - Đổi group.

Ví dụ thực tế:

Khi deploy web app:

  • sudo chown -R www-data:www-data /var/www/myapp - Web server sở hữu.
  • sudo chown -R $USER:www-data /var/www/myapp - Dev sở hữu, www-data group.
  • sudo chmod 775 /var/www/myapp - Owner full, group đọc+ghi+execute.
⚠️WARNING
chown cần sudo. Chỉ user root mới được đổi owner của file không phải của mình.

4. Umask: Default permissions

Umask định nghĩa quyền mặc định khi tạo file mới. Nó là mặt nạ (mask) trừ đi từ 666 (file) hoặc 777 (directory).

Cách tính:

  • Umask mặc định: 022.
  • File mới: 666 - 022 = 644 (owner rw-, group r--, others r--).
  • Thư mục mới: 777 - 022 = 755.

Các umask phổ biến:

  • 022: Default. File 644, dir 755. An toàn.
  • 002: File 664, dir 775. Cho shared project.
  • 077: File 600, dir 700. Maximum security.
  • 007: File 660, dir 770. Chỉ owner và group.

Thiết lập:

umask 022 trong ~/.bashrc hoặc ~/.zshrc.

💡TIP
Shared project trong team: umask 002. Tất cả member trong cùng group có thể ghi.

5. Special Permissions: SUID, SGID, Sticky Bit

SUID (Set User ID) - 4xxx:

Khi set trên executable, nó chạy với quyền của owner, không phải người chạy.

chmod u+s /usr/bin/passwd

Ví dụ: passwd có SUID: user thường chạy nhưng được ghi vào /etc/shadow (root owned).

SGID (Set Group ID) - 2xxx:

  • Trên file: chạy với quyền group của file.
  • Trên thư mục: file mới tạo trong thư mục kế thừa group của thư mục.

chmod g+s shared_dir/

Sticky Bit - 1xxx:

Chỉ owner (hoặc root) mới xoá được file trong thư mục.

chmod +t /tmp

Ví dụ: /tmp: ai cũng ghi được, nhưng chỉ xoá được file của mình.

IMPORTANT
SUID rất nguy hiểm nếu dùng sai. Không set SUID cho script (shell script). Chỉ dùng cho binary cần thiết.

6. ACL (Access Control Lists): Permissions chi tiết hơn

ACL cho phép set permissions cho nhiều user/group khác nhau, vượt quá giới hạn owner/group/others.

Cài đặt:

sudo apt install acl

Xem ACL:

getfacl file.txt

Set ACL:

  • setfacl -m u:alice:rwx file.txt - Cho alice quyền rwx.
  • setfacl -m g:devteam:rw file.txt - Cho group devteam quyền rw.
  • setfacl -m o::--- file.txt - Others không quyền gì.
  • setfacl -R -m u:bob:rx shared_dir/ - Đệ quy.
  • setfacl -x u:alice file.txt - Xoá ACL entry.

Default ACL:

setfacl -d -m g:devteam:rwx shared_dir/

File mới tạo trong thư mục tự động kế thừa ACL này.

💡TIP
Dùng ACL khi cần hơn 3 nhóm (owner, group, others). Lý tưởng cho server nhiều user và dự án.

🙋 Câu hỏi thường gặp

Sự khác nhau giữa chmod 777 và 755?

777 là full permission cho tất cả: rất nguy hiểm vì ai cũng có thể ghi và execute. 755 là owner full, group và others chỉ đọc và execute: an toàn hơn.

Tại sao chmod u+s không hoạt động trên script?

Linux kernel bỏ qua SUID/SGID trên script (shebang script) vì lý do bảo mật (dễ exploit). SUID chỉ hoạt động trên binary (compiled).

Permission denied nhưng là owner?

Kiểm tra: (1) lsattr file xem immutable flag (i).

(2) ls -ld $(dirname file) xem thư mục có write permission không.

(3) File system có mounted read-only? mount | grep /mount_point.


Kiến thức liên quan