Chuyển tới nội dung chính

Hướng Dẫn Phân Quyền File và Thư Mục Linux Hiệu Quả

Giới Thiệu

Hệ điều hành Linux được xây dựng với nền tảng bảo mật mạnh mẽ, và một trong những yếu tố cốt lõi của nó là hệ thống phân quyền file và thư mục. Việc hiểu và quản lý quyền truy cập đúng cách không chỉ giúp bảo vệ dữ liệu khỏi truy cập trái phép mà còn đảm bảo hoạt động ổn định của hệ thống, đặc biệt trong môi trường đa người dùng hoặc máy chủ. Bài viết này sẽ hướng dẫn bạn các khái niệm cơ bản và các lệnh thiết yếu để quản lý quyền trên Linux một cách hiệu quả.

📋 Thời gian: 20 phút | Độ khó: Cơ bản

Yêu Cầu

Để thực hiện theo hướng dẫn này, bạn cần:

  • Một máy tính chạy hệ điều hành Linux (ví dụ: Ubuntu, CentOS, Debian, Fedora...).
  • Quyền truy cập vào terminal (dòng lệnh).
  • Hiểu biết cơ bản về cách sử dụng terminal và các lệnh Linux đơn giản.
  • Quyền sudo nếu bạn cần thay đổi quyền sở hữu hoặc quyền của các file/thư mục hệ thống.

Các Khái Niệm Cơ Bản Về Quyền Trong Linux

Hệ thống phân quyền Linux xoay quanh ba loại quyền và ba đối tượng chính:

1. Các Loại Quyền

  • Đọc (Read - r): Cho phép người dùng xem nội dung của file hoặc liệt kê nội dung của thư mục. Giá trị số học: 4.
  • Ghi (Write - w): Cho phép người dùng sửa đổi, xóa file hoặc tạo, xóa file/thư mục con trong thư mục. Giá trị số học: 2.
  • Thực thi (Execute - x): Cho phép người dùng chạy một file thực thi (script) hoặc truy cập vào một thư mục (để duyệt qua nó). Giá trị số học: 1.

2. Các Đối Tượng

  • Người sở hữu (User - u): Là người dùng đã tạo ra file hoặc thư mục đó.
  • Nhóm sở hữu (Group - g): Là một nhóm người dùng mà file hoặc thư mục đó thuộc về. Tất cả các thành viên trong nhóm này sẽ có các quyền được gán cho nhóm.
  • Người khác (Others - o): Là tất cả những người dùng không phải là người sở hữu và không thuộc nhóm sở hữu.

Khi bạn thấy các quyền được hiển thị, chúng thường theo thứ tự user, group, others. Ví dụ: rwxr-xr-- có nghĩa là:

  • Người sở hữu: rwx (đọc, ghi, thực thi)
  • Nhóm sở hữu: r-x (đọc, thực thi)
  • Người khác: r-- (đọc)

Các Bước Thực Hiện

Bước 1: Xem Quyền Hiện Tại Của File/Thư Mục

Để xem quyền của một file hoặc thư mục, bạn sử dụng lệnh ls -l.

# Xem quyền của một file
ls -l my_document.txt

# Ví dụ output:
# -rw-r--r-- 1 user group 1234 Oct 26 10:00 my_document.txt
# Ý nghĩa:
# - : Đây là một file thông thường (d: thư mục, l: symbolic link)
# rw- : Người sở hữu có quyền đọc và ghi
# r-- : Nhóm sở hữu có quyền đọc
# r-- : Người khác có quyền đọc
# 1 : Số lượng hard links
# user: Người sở hữu của file
# group: Nhóm sở hữu của file
# 1234: Kích thước file (bytes)
# Oct 26 10:00: Ngày và thời gian sửa đổi cuối cùng
# my_document.txt: Tên file

# Xem quyền của một thư mục
ls -l my_project/

# Ví dụ output:
# drwxr-xr-x 2 user group 4096 Oct 26 10:05 my_project/
# Ý nghĩa:
# d : Đây là một thư mục
# rwxr-xr-x: Quyền của thư mục (user: rwx, group: r-x, others: r-x)

Bước 2: Thay Đổi Quyền Với Lệnh chmod

Lệnh chmod (change mode) được sử dụng để thay đổi quyền truy cập của file và thư mục. Có hai cách chính để sử dụng chmod: chế độ số học (octal) và chế độ ký hiệu (symbolic).

a. Chế độ Số học (Octal Mode)

Đây là cách phổ biến và mạnh mẽ nhất. Bạn gán một số từ 0-7 cho mỗi đối tượng (user, group, others) bằng cách cộng các giá trị số học của quyền:

  • r (đọc) = 4
  • w (ghi) = 2
  • x (thực thi) = 1

Ví dụ:

  • rwx = 4+2+1 = 7
  • rw- = 4+2+0 = 6
  • r-x = 4+0+1 = 5
  • r-- = 4+0+0 = 4

Bạn sẽ sử dụng ba chữ số, mỗi chữ số đại diện cho quyền của User, Group và Others theo thứ tự đó.

# Gán quyền rwx cho user, r-x cho group, r-x cho others (755)
# Thường dùng cho các script hoặc thư mục có thể truy cập công khai
chmod 755 my_script.sh
chmod 755 my_website_folder/

# Gán quyền rw- cho user, --- cho group, --- cho others (600)
# Thường dùng cho các file cấu hình hoặc file cá nhân nhạy cảm
chmod 600 private_config.conf

# Gán quyền rw- cho user, r-- cho group, r-- cho others (644)
# Thường dùng cho các file văn bản thông thường
chmod 644 public_document.txt

# Thay đổi quyền đệ quy cho tất cả file và thư mục bên trong my_project/
# ⚠️ Cẩn thận khi sử dụng tùy chọn -R, nó sẽ áp dụng quyền cho tất cả
# các file và thư mục con.
chmod -R 755 my_project/

b. Chế độ Ký hiệu (Symbolic Mode)

Chế độ này cho phép bạn thêm (+), bớt (-), hoặc đặt (=) quyền cho các đối tượng cụ thể (u, g, o, a - all).

# Thêm quyền thực thi cho người sở hữu (user) của một script
chmod u+x my_script.sh

# Bỏ quyền ghi cho nhóm (group) của một file
chmod g-w my_file.txt

# Đặt quyền đọc cho người khác (others) của một tài liệu
chmod o=r my_document.pdf

# Thêm quyền đọc và ghi cho tất cả (all) các đối tượng
chmod a+rw shared_folder/

# Bỏ tất cả quyền thực thi cho nhóm và người khác
chmod go-x my_folder/

💡 Tip: Đối với các thư mục, quyền x (thực thi) là cần thiết để có thể "vào" và duyệt qua nội dung của thư mục. Nếu một thư mục không có quyền x cho một đối tượng nào đó, đối tượng đó sẽ không thể truy cập vào thư mục, ngay cả khi có quyền r.

Bước 3: Thay Đổi Người Sở Hữu Với Lệnh chown

Lệnh chown (change owner) được sử dụng để thay đổi người dùng sở hữu và/hoặc nhóm sở hữu của một file hoặc thư mục. Bạn thường cần quyền sudo để sử dụng lệnh này.

Cú pháp cơ bản: chown [OPTIONS] USER[:GROUP] FILE...

# Thay đổi người sở hữu của file sang 'newuser'
sudo chown newuser my_file.txt

# Thay đổi nhóm sở hữu của file sang 'newgroup'
sudo chown :newgroup my_file.txt

# Thay đổi cả người sở hữu và nhóm sở hữu của file
sudo chown newuser:newgroup my_file.txt

# Thay đổi người sở hữu và nhóm sở hữu đệ quy cho một thư mục và tất cả nội dung của nó
# ⚠️ Lại một lần nữa, cẩn thận với tùy chọn -R
sudo chown -R newuser:newgroup my_directory/

Bước 4: Thay Đổi Nhóm Sở Hữu Với Lệnh chgrp (Tùy chọn)

Lệnh chgrp (change group) chỉ dùng để thay đổi nhóm sở hữu của file/thư mục. Nó ít được sử dụng hơn chownchown có thể làm cả hai việc. Bạn cũng cần quyền sudo.

# Thay đổi nhóm sở hữu của file sang 'newgroup'
sudo chgrp newgroup my_file.txt

# Thay đổi nhóm sở hữu đệ quy cho một thư mục
sudo chgrp -R newgroup my_directory/

Bước 5: Hiểu Về umask

umask (user file-creation mode mask) là một mặt nạ quyền mặc định được áp dụng khi một file hoặc thư mục mới được tạo ra. Nó xác định các quyền không được gán.

Để xem giá trị umask hiện tại của bạn:

umask
# Ví dụ output: 0022

Giá trị umask là 4 chữ số octal. Chữ số đầu tiên thường là 0 và liên quan đến các quyền đặc biệt (sticky bit, SUID, SGID), mà chúng ta sẽ không đi sâu vào ở đây. Ba chữ số còn lại áp dụng cho user, group, và others.

Để tính quyền mặc định:

  • Đối với file: Quyền mặc định ban đầu là 666 (rw-rw-rw-). Bạn lấy 666 trừ đi umask.
    • Ví dụ: umask 022. Quyền file = 666 - 022 = 644 (rw-r--r--)
  • Đối với thư mục: Quyền mặc định ban đầu là 777 (rwxrwxrwx). Bạn lấy 777 trừ đi umask.
    • Ví dụ: umask 022. Quyền thư mục = 777 - 022 = 755 (rwxr-xr-x)

Bạn có thể thay đổi umask tạm thời trong phiên hiện tại:

# Đặt umask để file mới có quyền 600, thư mục mới có quyền 700
umask 0077

💡 Tip: Để thay đổi umask vĩnh viễn, bạn cần chỉnh sửa file cấu hình shell của mình (ví dụ: ~/.bashrc hoặc ~/.profile).

Troubleshooting

  • Lỗi "Permission denied" khi truy cập hoặc chỉnh sửa file/thư mục:

    • Nguyên nhân: Bạn không có đủ quyền (đọc, ghi, thực thi) đối với file hoặc thư mục đó.
    • Cách xử lý:
      • Kiểm tra quyền hiện tại bằng ls -l.
      • Đảm bảo bạn là người sở hữu hoặc thuộc nhóm sở hữu có quyền phù hợp.
      • Sử dụng chmod để cấp quyền cần thiết.
      • Nếu bạn đang cố gắng chạy một script, hãy đảm bảo nó có quyền thực thi (x).
      • Nếu là thư mục, bạn cần quyền x để truy cập vào nó.
      • Sử dụng sudo nếu bạn cần quyền root để thay đổi quyền hoặc sở hữu.
  • Không thể thay đổi quyền hoặc sở hữu của file/thư mục:

    • Nguyên nhân: Bạn không có quyền sudo hoặc file/thư mục thuộc về một hệ thống file chỉ đọc (read-only filesystem).
    • Cách xử lý:
      • Đảm bảo bạn đang sử dụng sudo trước các lệnh chown hoặc chgrp khi cần.
      • Kiểm tra xem hệ thống file có phải là chỉ đọc không (ví dụ: ổ USB được mount ở chế độ read-only).
  • File/thư mục mới tạo không có quyền như mong muốn:

    • Nguyên nhân: Giá trị umask của bạn đang hạn chế quyền mặc định.
    • Cách xử lý:
      • Kiểm tra umask của bạn bằng lệnh umask.
      • Thay đổi umask nếu cần thiết để có các quyền mặc định mong muốn.

Kết Luận

Việc quản lý quyền file và thư mục trên Linux là một kỹ năng cơ bản nhưng cực kỳ quan trọng đối với bất kỳ người dùng hoặc quản trị viên hệ thống nào. Nắm vững các lệnh ls -l, chmod, chown, và khái niệm umask sẽ giúp bạn duy trì bảo mật hệ thống, kiểm soát truy cập dữ liệu và đảm bảo các ứng dụng hoạt động đúng cách.

Best Practices:

  • Nguyên tắc ít đặc quyền nhất (Least Privilege): Luôn cấp quyền tối thiểu cần thiết cho người dùng, nhóm hoặc ứng dụng. Không bao giờ cấp 777 (rwxrwxrwx) trừ khi thực sự cần thiết và bạn hiểu rõ rủi ro.
  • Cẩn thận với -R: Khi sử dụng tùy chọn -R (recursive) với chmod hoặc chown, hãy kiểm tra kỹ đường dẫn để tránh thay đổi quyền của các file hoặc thư mục quan trọng một cách không mong muốn.
  • Kiểm tra thường xuyên: Định kỳ kiểm tra quyền của các file và thư mục nhạy cảm để đảm bảo chúng vẫn được bảo vệ đúng cách.
  • Sử dụng sudo có trách nhiệm: Chỉ sử dụng sudo khi thực sự cần thiết và luôn kiểm tra lại lệnh trước khi nhấn Enter.

✅ Bạn đã nắm vững các kiến thức cơ bản về phân quyền file và thư mục trong Linux, sẵn sàng áp dụng chúng để tăng cường bảo mật và kiểm soát hệ thống của mình.