Quản Lý Quyền Tập Tin & Thư Mục Trong Linux

Cẩm nang toàn diện về phân quyền Linux: Giải mã rwx, phân quyền dạng số (755, 644), lệnh chmod, chown, chgrp, quyền đặc biệt SUID/SGID/Sticky Bit và umask chuẩn SRE.

Trong Linux, phương châm cốt lõi là "Everything is a file" (Mọi thứ đều là tập tin). Do đó, hệ thống bảo mật của Linux phụ thuộc phần lớn vào cơ chế phân quyền truy cập tập tin và thư mục: Ai được phép đọc (Read), ghi (Write) và thực thi (Execute)?

Bài viết này giúp bạn làm chủ từ bảng mã quyền cơ bản đến các kỹ thuật phân quyền nâng cao trong môi trường Production.


1. Cấu Trúc Quyền Cơ Bản: rwx

Khi chạy lệnh ls -l, mỗi dòng tập tin hiển thị chuỗi 10 ký tự quyền ở đầu:

- rwx r-x r--   1 darktuan developers 4096 Oct 11 10:00 script.sh
drwxr-xr-x   2 darktuan developers 4096 Oct 11 10:00 my_folder/
graph LR
    P["Chuỗi 10 ký tự: - rwx r-x r--"]
    P --> T["Ký tự 1: Loại file (-: File thường, d: Thư mục, l: Link)"]
    P --> U["Ký tự 2-4: Owner / User (rwx)"]
    P --> G["Ký tự 5-7: Group (r-x)"]
    P --> O["Ký tự 8-10: Others (r--)"]

1.1. Ý Nghĩa Của 3 Quyền: Read, Write, Execute

QuyềnKý tựGiá trị số (Octal)Ý nghĩa trên Tập Tin (File)Ý nghĩa trên Thư Mục (Directory)
Readr4Đọc/xem nội dung file (cat, less)Liệt kê danh sách file bên trong (ls)
Writew2Chỉnh sửa, ghi đè nội dung fileThêm, xóa, đổi tên file bên trong thư mục
Executex1Chạy file như chương trình (./script.sh)Truy cập vào thư mục (cd /path/to/folder)

[!WARNING] ⚠️ Lưu ý quan trọng về quyền x trên thư mục: Nếu một thư mục có quyền r nhưng thiếu quyền x, bạn có thể thấy tên file bên trong nhưng không thể cd vào và cũng không thể đọc nội dung của các file đó!


2. Thay Đổi Quyền Bằng Lệnh chmod

Có hai cách để phân quyền bằng lệnh chmod (Change Mode):

2.1. Phân Quyền Dạng Số (Octal Notation - Khuyến Nghị)

Mỗi nhóm quyền (User, Group, Others) là tổng điểm của các quyền thành phần:

  • r = 4, w = 2, x = 1, - = 0

Ví dụ: rwxr-xr-- $ ightarrow$ User: $4+2+1=7$, Group: $4+0+1=5$, Others: $4+0+0=4$ $ ightarrow$ 754.

⚡ Các Bộ Quyền Chuẩn Kinh Điển Cần Nhớ:

  • 755 (rwxr-xr-x): Chuẩn mực cho thư mục và các file thực thi (Script, Binary). Chủ sở hữu toàn quyền, người khác chỉ đọc và vào xem.
  • 644 (rw-r--r--): Chuẩn mực cho tập tin cấu hình và dữ liệu thông thường. Chủ sở hữu sửa được, người khác chỉ xem.
  • 700 (rwx------): Riêng tư tuyệt đối cho thư mục cá nhân (như ~/.ssh/).
  • 600 (rw-------): Chuẩn bảo mật bắt buộc cho SSH Private Key (id_ed25519) và chứng chỉ SSL.
  • 777 (rwxrwxrwx): ❌ CẤM DÙNG TRÊN PRODUCTION! Mọi người trên hệ thống đều có thể sửa/xóa/chạy file.
# Phân quyền 755 cho file script
chmod 755 deploy.sh

# Phân quyền bảo mật 600 cho SSH Private Key
chmod 600 ~/.ssh/id_rsa

# Phân quyền đệ quy cho toàn bộ thư mục và file con bên trong (-R)
chmod -R 755 /var/www/html

2.2. Phân Quyền Dạng Ký Tự (Symbolic Notation)

  • Đối tượng: u (User/Owner), g (Group), o (Others), a (All).
  • Toán tử: + (Thêm quyền), - (Bớt quyền), = (Gán chính xác).
# Thêm quyền thực thi cho chủ sở hữu
chmod u+x run.sh

# Bỏ quyền ghi của nhóm và người ngoài
chmod go-w sensitive.txt

# Thêm quyền thực thi cho tất cả mọi người
chmod +x start.sh

3. Đổi Chủ Sở Hữu: chown & chgrp

# 1. Đổi chủ sở hữu (Owner) của file
sudo chown nginx /var/log/nginx/access.log

# 2. Đổi CẢ chủ sở hữu VÀ nhóm sở hữu cùng lúc (cú pháp: user:group)
sudo chown -R www-data:www-data /var/www/my-app

# 3. Chỉ đổi nhóm sở hữu
sudo chgrp developers project_docs/
# (hoặc dùng chown với dấu hai chấm ở đầu: sudo chown :developers project_docs/)

4. Quyền Đặc Biệt: SUID, SGID và Sticky Bit

Ngoài rwx, Linux còn trang bị 3 bit quyền đặc biệt cực kỳ mạnh mẽ:

Quyền đặc biệtGiá trị sốKý hiệu hiển thịÁp dụng trênTác dụngVí dụ thực tế
SUID (Set UID)4000s ở vị trí User (rwsr-xr-x)File thực thiTiến trình chạy với quyền của Owner của file (thường là root) thay vì quyền của người gọi lệnh/usr/bin/passwd (user thường đổi pass ghi vào /etc/shadow)
SGID (Set GID)2000s ở vị trí Group (rwxrwsr-x)Thư mụcMọi file mới tạo trong thư mục sẽ tự động thừa kế Group của thư mục chaThư mục dùng chung cho nhóm Dev (/data/shared)
Sticky Bit1000t ở vị trí Others (rwxrwxrwt)Thư mụcMọi người đều ghi được, nhưng chỉ ai tạo ra file mới được xóa file đóThư mục tạm /tmp
# Thiết lập SGID cho thư mục làm việc chung của nhóm
sudo chmod 2775 /data/shared-team/

# Thiết lập Sticky Bit cho thư mục chia sẻ
sudo chmod 1777 /public_uploads/

5. Giá Trị umask (Mặt Nạ Quyền Mặc Định)

umask quyết định quyền mặc định của một tập tin hoặc thư mục ngay khi vừa được tạo ra:

  • Quyền tối đa của Thư mục: 777
  • Quyền tối đa của Tập tin: 666 (mặc định không có quyền x)
  • Công thức tính: Quyền thực tế = Quyền tối đa - umask
# Xem umask hiện tại (mặc định thường là 0022 hoặc 0002)
umask
# 0022

# Với umask 022:
# - Thư mục mới tạo: 777 - 022 = 755 (drwxr-xr-x)
# - Tập tin mới tạo: 666 - 022 = 644 (-rw-r--r--)

Bài tiếp theo đề xuất: Ngôn Ngữ Kịch Bản Bash & Shell Scripting – Làm chủ biến, câu lệnh điều kiện if-else, vòng lặp for/while và tự động hóa tác vụ hệ thống bằng Shell Script.