Linux File Permission Chmod Chown Giải Thích: Chuyên Sâu & An Toàn

Linux File Permission Chmod Chown Giải Thích: Chuyên Sâu & An Toàn

Dính lỗi “Permission denied” trên Linux hoài bực thật bạn nhỉ? Mình cũng từng vật lộn với nó suốt những năm đầu làm nghề. Hóa ra, chìa khóa để giải quyết triệt để không đâu xa lạ mà nằm gọn trong bài toán Linux file permission chmod chown giải thích cặn kẽ. Nắm vững bộ đôi này không chỉ giúp bạn sửa lỗi vặt, mà còn là bước chân đầu tiên để trở thành một admin hay DevOps cứng cựa, biết cách bảo vệ hệ thống an toàn tuyệt đối.

Giải mã ma trận quyền hạn: Ai được làm gì trên file Linux?

Phân quyền trong Linux là hệ thống quy tắc bảo mật xác định chính xác tài khoản nào có thể đọc, ghi hoặc chạy một tệp tin hay thư mục cụ thể trên server.

Khi mới chuyển từ môi trường Windows sang hệ điều hành Linux, cấu trúc phân quyền thường làm anh em lúng túng vì nó quá chặt chẽ. Tuy nhiên, ý nghĩa phân quyền file Linux thực chất rất logic. Hệ thống này được thiết kế để bảo vệ cấu trúc file Linux khỏi những can thiệp không mong muốn, ngăn chặn virus lây lan và cô lập rủi ro khi có một tài khoản bị xâm nhập. Tại Phạm Hải, mình luôn nhấn mạnh với các bạn thực tập sinh rằng: hiểu đúng quyền hạn là nền tảng số 1 của bảo mật.

Ba lớp người dùng cốt lõi: User, Group, và Others là ai?

Linux chia người dùng tương tác với file thành 3 nhóm cơ bản: User (chủ sở hữu), Group (nhóm người dùng) và Others (những người còn lại trên hệ thống).

Hiểu rõ chủ sở hữu và nhóm trong Linux sẽ giúp bạn cấp quyền đúng người, đúng tội. Cụ thể như sau:

  • User (u): Đây là người tạo ra file hoặc được gán quyền sở hữu. Họ giống như “chủ nhà”, thường có quyền lực cao nhất đối với tệp tin đó.
  • Group (g): Một tập hợp các user có chung mục đích làm việc. Ví dụ, team phát triển web của bạn có 5 người, bạn gom họ vào chung một group devteam để cùng chỉnh sửa source code mà không ảnh hưởng tới các team khác.
  • Others (o): Tất cả những tài khoản còn lại trên hệ thống không phải là chủ sở hữu, cũng không nằm trong nhóm sở hữu. Đây thường là “khách vãng lai” hoặc các tiến trình chạy ngầm.

Ba quyền năng cơ bản: Đọc (Read), Ghi (Write), và Thực thi (Execute) thực chất là gì?

Quyền đọc ghi thực thi trong Linux (viết tắt là r, w, x) quy định hành động cụ thể mà một lớp người dùng được phép thao tác trên tệp hoặc thư mục.

Mỗi quyền này có ý nghĩa khác nhau tùy thuộc vào đối tượng áp dụng là file hay thư mục:

Quyền hạn Ký hiệu Áp dụng trên File Áp dụng trên Thư mục (Directory)
Đọc (Read) r Xem được nội dung bên trong file (ví dụ cat file.txt). Liệt kê được danh sách các file bên trong thư mục (lệnh ls).
Ghi (Write) w Chỉnh sửa, thêm bớt nội dung hoặc làm rỗng file. Tạo file mới, đổi tên hoặc xóa các file bên trong thư mục đó.
Thực thi (Execute) x Chạy file như một chương trình/script (ví dụ file .sh). Cho phép dùng lệnh cd để đi vào bên trong thư mục đó.

Đọc vị nhanh quyền hạn của file và thư mục với lệnh ls -l

Lệnh ls -l hiển thị chi tiết quyền truy cập file/thư mục dưới dạng một chuỗi 10 ký tự ở đầu mỗi dòng, giúp bạn nắm bắt nhanh tình trạng phân quyền hiện tại.

Mở terminal lên và gõ ls -l, bạn sẽ thấy một danh sách trả về với cột đầu tiên trông giống như -rwxr-xr--. Việc đọc thành thạo chuỗi này là kỹ năng bắt buộc. Nếu bạn đang học Quản trị Linux server cơ bản cho developer, hãy tập phân tích chuỗi này mỗi ngày:

  • Ký tự 1: Loại tệp (- là file thông thường, d là thư mục, l là symlink).
  • 3 ký tự tiếp theo (rwx): Quyền của User (Chủ sở hữu có quyền đọc, ghi, chạy).
  • 3 ký tự tiếp theo (r-x): Quyền của Group (Nhóm chỉ được đọc và chạy, không được ghi).
  • 3 ký tự cuối cùng (r--): Quyền của Others (Người ngoài chỉ được phép đọc).

chmod – “Phù thủy” ban phát quyền lực trong Linux

Lệnh chmod (viết tắt của change mode) được sử dụng để thay đổi quyền truy cập (r, w, x) của các đối tượng user, group và others trên một file hoặc thư mục cụ thể.

Cách sử dụng lệnh chmod trong Linux rất linh hoạt và mạnh mẽ. Là một quản trị hệ thống, bạn sẽ dùng lệnh này gần như mỗi ngày. Có hai phương pháp chính để ra lệnh cho chmod: dùng số (bát phân) hoặc dùng chữ (tượng trưng). Mình khuyên bạn nên thành thạo cả hai.

Dùng số để ra lệnh: Giải thích các chế độ chmod số và ký hiệu dễ hiểu nhất

Chế độ số (Octal Mode) sử dụng giá trị bát phân từ 0 đến 7 để đại diện cho tổng các quyền r (4), w (2), và x (1) cho từng nhóm người dùng.

Nhiều bạn mới thấy giải thích các chế độ chmod số và ký hiệu rất rối rắm. Thực ra, nguyên lý của giá trị bát phân cực kỳ đơn giản. Bạn chỉ cần nhớ bảng giá trị cố định này:

  • Quyền Đọc (r) = 4
  • Quyền Ghi (w) = 2
  • Quyền Thực thi (x) = 1
  • Không có quyền (-) = 0

Để thiết lập quyền, bạn cộng các số này lại. Ví dụ: Quyền đọc và ghi (r+w) sẽ là 4 + 2 = 6. Quyền đọc, ghi, thực thi (r+w+x) là 4 + 2 + 1 = 7.
Khi gõ lệnh chmod 644 config.php, hệ thống sẽ hiểu:

  • Số 6 đầu tiên (User): 4+2 (Đọc và Ghi).
  • Số 4 thứ hai (Group): 4 (Chỉ đọc).
  • Số 4 thứ ba (Others): 4 (Chỉ đọc).

Chmod 777 – Quyền lực tối thượng hay con dao hai lưỡi? Tại sao mình khuyên bạn đừng bao giờ dùng?

Chmod 777 cấp toàn quyền (đọc, ghi, thực thi) cho tất cả mọi người (User, Group, Others) trên hệ thống, tạo ra lỗ hổng bảo mật cực kỳ nghiêm trọng.

Hồi mới vào nghề, hễ cứ web lỗi không upload được ảnh là mình lại gõ chmod -R 777. Nhiều bạn cũng hay thắc mắc chmod 777 là gì có an toàn không? Câu trả lời từ kinh nghiệm xương máu của mình là: Tuyệt đối KHÔNG. Khi bạn cấp quyền 777, bất kỳ ai truy cập vào server (kể cả một đoạn mã độc chạy ẩn) cũng có thể xóa sạch file của bạn. Để hệ thống sống sót, bạn nên ưu tiên tìm hiểu các phương pháp Bảo mật VPS Linux chống hack tấn công đúng chuẩn thay vì lạm dụng 777 để chữa cháy tạm thời.

Dùng chữ để giao tiếp: Chế độ ký hiệu (Symbolic Mode) cho người thích sự rõ ràng

Chế độ tượng trưng (Symbolic Mode) dùng các chữ cái đại diện (u, g, o, a) kết hợp với các toán tử (+, -, =) để thêm, bớt hoặc gán quyền một cách chính xác.

Nếu bạn không thích nhẩm tính cộng trừ các con số, chế độ tượng trưng chính là chân ái. Cú pháp của nó rất gần gũi với ngôn ngữ tự nhiên:

  • Đối tượng: u (user), g (group), o (others), a (all – tất cả).
  • Toán tử: + (thêm quyền), - (tước quyền), = (gán quyền tuyệt đối, xóa các quyền cũ).
    Ví dụ thực tế: Bạn muốn thêm quyền chạy file cho chủ sở hữu, hãy gõ chmod u+x script.sh. Nếu muốn tước quyền ghi của những người ngoài, gõ chmod o-w data.txt.

“Quét” toàn bộ thư mục: Đừng quên tùy chọn -R thần thánh

Tùy chọn -R (Recursive) áp dụng lệnh chmod đệ quy cho thư mục hiện tại và toàn bộ các file, thư mục con nằm sâu bên trong nó.

Khi thực hiện phân quyền thư mục trong Linux, đặc biệt là các thư mục chứa mã nguồn với hàng ngàn file, bạn không thể gõ lệnh cho từng tệp được. Lệnh chmod -R và chown -R sinh ra để tự động hóa việc này. Chẳng hạn, lệnh chmod -R 755 /var/www/html/ sẽ “quét” từ trên xuống dưới, áp dụng quyền 755 cho mọi thứ bên trong thư mục html. Tuy nhiên, hãy dùng cẩn thận vì nó có thể làm sai lệch quyền của các file cấu hình nhạy cảm.

chown – Trao quyền sở hữu, xác định “chủ nhân” của file

Lệnh chown (viết tắt của change owner) giúp quản trị viên thay đổi chủ sở hữu (user) và nhóm sở hữu (group) của một tệp hoặc thư mục.

Trong công việc hàng ngày của một kỹ sư DevOps, cách dùng lệnh chown trong Linux luôn song hành với chmod. Nếu chmod quy định “được làm những gì”, thì chown quyết định “ai là người làm chủ”. Bạn không thể phân quyền hiệu quả nếu file đang thuộc về sai người.

Ai là chủ file? Cách thay đổi chủ sở hữu (user) và nhóm (group)

Bạn sử dụng cú pháp chown new_user filename để đổi chủ sở hữu, hoặc lệnh chgrp new_group filename nếu chỉ muốn đổi nhóm sở hữu của file.

Mặc định, tài khoản nào tạo ra file thì tài khoản đó là chủ sở hữu. Nhưng trong thực tế, bạn thường xuyên phải giao file cho user khác quản lý. Lưu ý quan trọng: vì việc đổi “sổ đỏ” của file ảnh hưởng đến bảo mật, bạn luôn phải thêm lệnh sudo phía trước để có đủ thẩm quyền root thực thi. Ví dụ: sudo chown john report.pdf.

Cú pháp user:group – Bí quyết thay đổi cả chủ và nhóm chỉ bằng một lệnh

Cú pháp chown user:group filename cho phép bạn thay đổi đồng thời cả chủ sở hữu và nhóm sở hữu chỉ trong một dòng lệnh duy nhất.

Đây là “tuyệt chiêu” giúp anh em admin tiết kiệm thời gian gõ phím. Thay vì dùng hai lệnh rời rạc, bạn gộp chúng lại bằng dấu hai chấm :. Ví dụ, khi bạn thực hành Cấu hình VPS Ubuntu chạy WordPress từ đầu, một thao tác bắt buộc là phải trao quyền sở hữu toàn bộ thư mục web cho user của web server bằng lệnh: sudo chown www-data:www-data /var/www/html.

Thay đổi chủ sở hữu hàng loạt với chown -R

Tương tự như chmod, việc thêm cờ -R vào lệnh chown sẽ thay đổi chủ sở hữu cho toàn bộ cây thư mục bên trong một cách đệ quy.

Cú pháp thực hiện cực kỳ gọn gàng: sudo chown -R alice:devteam /var/projects/. Sau khi nhấn Enter, toàn bộ file cũ, file mới, thư mục con nằm trong projects sẽ lập tức đổi chủ sang user alice và thuộc về nhóm devteam.

Tình huống thực chiến: Sửa lỗi “Permission denied” và các kịch bản thường gặp

Lỗi “Permission denied” xảy ra khi tài khoản hiện tại không có đủ quyền hạn (đọc/ghi/thực thi) hoặc không đúng chủ sở hữu để thao tác trên file/thư mục mục tiêu.

Với kinh nghiệm cấu hình hàng trăm server, mình thấy việc sửa lỗi Permission denied trên Linux là công việc “như cơm bữa”. Dưới đây là cách mình bắt bệnh và xử lý các ca thường gặp nhất.

Case study 1: Cấp quyền thực thi cho một file script vừa tải về

File script cài đặt tải từ internet mặc định không có quyền thực thi để bảo vệ an toàn. Bạn cần dùng chmod +x để cấp quyền trước khi chạy.

Bạn dùng wget tải một file install.sh về, gõ ./install.sh và hệ thống báo lỗi từ chối truy cập. Đừng hoảng! Linux làm vậy để ngăn virus tự động chạy. Cách giải quyết chuẩn xác nhất là gõ chmod +x install.sh để thêm quyền (x) cho file, sau đó chạy lại.

Case study 2: Phân quyền cho thư mục web server (ví dụ: /var/www/html) sao cho an toàn

Thiết lập chuẩn bảo mật cho web server là gán quyền 755 cho toàn bộ thư mục, quyền 644 cho toàn bộ file, và đặt chủ sở hữu là user của web service.

Tuyệt đối không cấp quyền bừa bãi cho thư mục web. Tùy thuộc vào việc bạn đang dùng công nghệ nào, user sở hữu sẽ khác nhau. Nếu bạn đang nghiên cứu Nginx vs Apache so sánh web server 2026, hãy nhớ: Apache thường dùng user www-data (trên Ubuntu) hoặc apache (trên CentOS), trong khi Nginx thường dùng nginx. Lệnh chuẩn để set quyền hàng loạt là:

  • Đổi chủ: sudo chown -R www-data:www-data /var/www/html
  • Set quyền thư mục: find /var/www/html -type d -exec chmod 755 {} ;
  • Set quyền file: find /var/www/html -type f -exec chmod 644 {} ;

Case study 3: User không ghi được file vào thư mục dù đã cấp quyền?

Thư mục cha thiếu quyền thực thi (x) hoặc file bị khóa bởi các thuộc tính mở rộng (chattr) sẽ ngăn user ghi dữ liệu dù file đó đã được cấp quyền w.

Gặp ca này anh em rất hay vò đầu bứt tai. Mình gợi ý bạn kiểm tra ngược lên thư mục chứa file đó. Nếu thư mục cha bị mất quyền x (truy cập), hệ thống sẽ chặn đứng bạn từ vòng ngoài, bạn không thể chạm tới file bên trong dù file đó có quyền 777 đi nữa. Ngoài ra, hãy dùng lệnh lsattr để xem file có bị gán cờ i (immutable – không thể sửa đổi) hay không.

Nâng cao tay nghề: Những khái niệm phân quyền “Pro” bạn nên biết

Nâng cao tay nghề: Những khái niệm phân quyền "Pro" bạn nên biết

Ngoài r-w-x cơ bản, Linux còn cung cấp umask, SUID, SGID và Sticky Bit để kiểm soát luồng quyền hạn phức tạp trong môi trường đa người dùng.

Để thực sự làm chủ hệ thống, bạn cần vượt qua mức gõ lệnh cơ bản. Nắm vững các khái niệm nâng cao này sẽ giúp bạn thiết kế kiến trúc bảo mật chuyên nghiệp, tách biệt bạn khỏi phần đông người dùng phổ thông.

umask là gì? Thiết lập quyền mặc định cho file và thư mục mới tạo

User mask (umask) là giá trị bị trừ đi từ quyền tối đa (666 cho file, 777 cho thư mục) để quyết định quyền mặc định khi một tệp mới được sinh ra.

Mỗi khi bạn tạo một file mới, Linux không hỏi bạn muốn gán quyền gì. Nó dùng umask để tự quyết định. Giá trị user mask mặc định trên hầu hết các distro thường là 022.
Cách tính toán như sau:

  • Thư mục mới tạo: 777 – 022 = 755 (rwxr-xr-x).
  • File mới tạo: 666 – 022 = 644 (rw-r–r–).
    Bạn có thể gõ lệnh umask trong terminal để kiểm tra, hoặc thêm lệnh umask 027 vào file ~/.bashrc để siết chặt bảo mật hơn cho tài khoản của mình.

Các bit quyền đặc biệt: SetUID (SUID), SetGID (SGID) và Sticky Bit

Đây là 3 cờ đặc biệt cho phép thực thi file với quyền của chủ sở hữu (SUID/SGID) hoặc ngăn chặn việc xóa file trái phép trong các thư mục chia sẻ (Sticky Bit).

Trong các hệ thống lớn, bạn sẽ bắt gặp các cờ này liên tục:

  • setuid (SUID – Ký hiệu s ở quyền User): Khi chạy file này, tiến trình sẽ mượn quyền của người tạo ra file. Ví dụ điển hình là lệnh passwd. Dù bạn là user thường, nhờ có setuid, lệnh này tạm thời mượn quyền root để sửa file /etc/shadow nhằm đổi mật khẩu.
  • setgid (SGID – Ký hiệu s ở quyền Group): Đặt trên thư mục, bất kỳ file nào tạo bên trong sẽ tự động kế thừa group của thư mục cha, thay vì group của người tạo. Rất hữu ích cho thư mục làm việc chung của team.
  • sticky bit (Ký hiệu t ở quyền Others): Đặt trên các thư mục public (như /tmp). Nó quy định luật chơi: “Ai tạo file thì người đó mới được xóa”. Điều này ngăn chặn user A xóa nhầm hoặc cố tình xóa file của user B trong thư mục chung.

Phân quyền trong Linux không hề khô khan và phức tạp như bạn nghĩ. Nó giống như việc bạn là người bảo vệ cho ngôi nhà của mình, quyết định ai được vào, ai được dùng đồ và ai chỉ được đứng nhìn. Nắm vững bản chất của Linux file permission chmod chown giải thích chính là bạn đang nắm trong tay chiếc chìa khóa vạn năng để vừa làm chủ hệ thống, vừa xây dựng một hàng rào bảo mật vững chắc. Đừng chỉ đọc, hãy mở terminal lên và thử ngay bạn nhé!

Bạn có tình huống phân quyền nào “khoai” hơn không? Hãy chia sẻ ở phần bình luận, mình và mọi người sẽ cùng nhau mổ xẻ nhé!

Lưu ý: Các thông tin trong bài viết này chỉ mang tính chất tham khảo. Để có lời khuyên tốt nhất, vui lòng liên hệ trực tiếp với chúng tôi để được tư vấn cụ thể dựa trên nhu cầu thực tế của bạn.

Danh mục: Bảo Mật Wordpress

mrhai

Để lại bình luận