NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
22/05/2024
Lượt xem

Hướng dẫn sử dụng lệnh Chmod trong Linux

22/05/2024
14 phút đọc
Lượt xem

Đánh giá

5/5 - (123 bình chọn)

Lệnh chmod trong Linux là một trong cách lệnh phổ biến chuyên dùng để phân quyền cho người dùng được phép truy cập, sở hữu file trong Linux. Lệnh này có vai trò rất quan trọng, đảm bảo các chương trình cũng như các thao tác sử dụng được đầy đủ quyền truy cập vào các file cần thiết. Bài viết này sẽ hướng dẫn cách sử dụng lệnh chmod trong Linux để quản lý quyền truy cập file vào thư mục hiệu quả.

Quyền truy cập file trong Linux

Trước khi bắt đầu, hãy cùng tìm hiểu sơ qua về mô hình phân quyền cơ bản của Linux. Mỗi file trong Linux được liên kết với một người dùng hay một nhóm chủ sở hữu, đồng thời được chỉ định quyền cho ba lớp người dùng (user class) khác nhau:

  • Chủ sở hữu file.
  • Các thành viên trong group.
  • Những người khác.

Quyền sở hữu file có thể được thay đổi bằng nhóm lệnh chownchgrp trong Linux.

Có ba loại quyền truy cập vào file:

  • Quyền đọc (read).
  • Quyền ghi (write).
  • Quyền thực thi (execute).

Dựa vào những khái niệm trên, ta có thể chỉ định những người dùng cụ thể nào được phép đọc, viết hay thực thi file.

Các quyền truy cập của file có thể được kiểm tra bằng lệnh ls:

ls -l filename.txt

Output:

-rw-r--r-- 12 linuxize users 12.0K Apr  8 20:51 filename.txt |[-][-][-]-   [------] [---] | |  |  | |      |       | | |  |  | |      |       +-----------> 7. Group | |  |  | |      +-------------------> 6. Owner | |  |  | +--------------------------> 5. Alternate Access Method | |  |  +----------------------------> 4. Others Permissions | |  +-------------------------------> 3. Group Permissions | +----------------------------------> 2. Owner Permissions +------------------------------------> 1. File Type

Trong output, ký tự đầu tiên cho biết kiểu của file, có thể là file thường (-), thư mục (d), symbolic link (l) hay các kiểu file khác. 9 ký tự tiếp theo lần lượt biểu diễn quyền truy cập file, chia thành 3 nhóm (gọi là các bộ ba), mỗi nhóm chứa có 3 ký tự. Nhóm đầu tiên cho biết quyền của chủ sở hữu, nhóm thứ hai là quyền của group, và nhóm còn lại là quyền của những user khác đối với file.

Ở ví dụ trên, rw-r--r-- cho biết chủ sở hữu file có quyền đọc và viết (rw-), group và những người dùng khác chỉ có quyền đọc (r--).

1. Quyền truy cập file

  1. Quyền đọc:
    • -: File không được được.
    • r: File được phép đọc.
  2. Quyền ghi:
    • -: File không được phép chỉnh sửa.
    • w: Cho phép chỉnh sửa, thay đổi file.
  3. Quyền thực thi:
    • -: File không thực thi được.
    • x: File có thể được thực thi.
    • s: Nếu có trong bộ ba user thì sẽ đặt bit setuid. Nếu tìm thấy trong group thì đặt bit setgid, tức là có đặt cả flag x. Khi flag setuid hay setgid được đặt trong file thực thi được thì file sẽ được thực thi với quyền của chủ sở hữu và/hoặc group.
    • S: Tương tự như s, nhưng không đặt flag x.
    • t: Nếu có trong bộ ba others thì đặt bit sticky và flag x.
    • T: Tương tự như t nhưng không đặt flag x.

2. Quyền truy cập thư mục (directory/folder)

  1. Quyền đọc:
    • -: Thư mục không được được.
    • r: Thư mục được phép đọc (có thể xem file bên trong bằng lệnh ls).
  2. Quyền ghi:
    • -: Thư mục không được phép chỉnh sửa.
    • w: Cho phép chỉnh sửa, thay đổi thư mục (tạo, xóa file,…).
  3. Quyền thực thi:
    • -: Không thể điều hướng đến thư mục.
    • x: Cho phép điều hướng đến thư mục bằng lệnh cd.
    • s: Nếu có trong bộ ba user thì sẽ đặt bit setuid. Nếu tìm thấy trong group thì đặt bit setgid, tức là có đặt cả flag x. Khi flag setuid hay setgid được đặt trong thư mục, các file mới được tạo bên trong sẽ kế thừa group ID (GID) của thư mục thay vì ID của primary group của người dùng tạo file. setuid không có ảnh hưởng gì đến thư mục.
    • S: Tương tự như s, nhưng không đặt flag x.
    • t: Nếu có trong bộ ba others thì đặt bit sticky và flag x. Khi đặt sticky bit lên thư mục thì chỉ chủ sở hữu file, thư mục hoặc quản trị viên mới có thể xóa và đổi tên file bên trong thư mục.
    • T: Tương tự như t nhưng không đặt flag x.

Cách sử dụng lệnh chmod trong Linux

Lệnh chmod trong Linux có cú pháp chung như sau:

chmod [OPTIONS] MODE FILE...

Lệnh này cho phép thay đổi quyền truy cập của file bằng phương pháp (mode) tượng trưng hoặc số học, hoặc sử dụng file tham chiếu. Lệnh này nhận tham số và một hoặc nhiều file/thư mục, mỗi file/thư mục được phân cách nhau bởi một khoảng trắng.

Lưu ý rằng chỉ người dùng root, chủ sở hữu hoặc user có quyền sudo mới có thể thay đổi quyền truy cập của file.

1. Sử dụng phương pháp tượng trưng

Với chế độ tượng trưng (symbolic/text) thì lệnh chmod có cú pháp như sau:

chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...

Trong đó, nhóm flag [ugoa...] là flag dành cho user, dùng để chỉ định các lớp user nào sẽ thay đổi quyền truy cập file.

  • u: Chủ sở hữu file.
  • g: User thuộc group.
  • o: Mọi user khác.
  • a: Mọi user (tương đương với ugo).

Nếu không truyền flag user vào thì mặc định sẽ là a.

Nhóm flag thứ hai là flag toán tử ([-+=]), định nghĩa xem lệnh cần xóa, thêm hay đặt quyền truy cập của file:

  • -: Xóa quyền được chỉ định.
  • +: Thêm quyền truy cập cho file.
  • =: Thay đổi sang một quyền truy cập cụ thể. Nếu không chỉ định quyền nào sau dấu = thì theo mặc định, mọi quyền từ user class sẽ bị xóa.

Phần quyền truy cập (perms...) có thể được thiết lập cụ thể bằng cách sử dụng các ký tự: r, w, x, X, st. Ngoài ra ta cũng có thể dùng một ký tự (trong nhóm u, g, o) để copy quyền truy cập từ một user class khác.

Khi thiết lập quyền truy cập cho một hay nhiều user class ([, ...]), hãy sử dụng dấu phẩy (không có khoảng trắng) để phân tách các mode tượng trưng.

Dưới đây là một số ví dụ minh họa cho việc sử dụng lệnh chmod trong Linux với phương pháp tượng trưng:

  • Cho phép thành viên trong group có quyền đọc file, nhưng không được ghi và thực thi:
chmod g=r filename
  • Xóa quyền thực thi đối với mọi người dùng:
chmod a-x filename
  • Xóa quyền ghi cho những user còn lại (theo kiểu đệ quy):
chmod -R o-w dirname
  • Xóa quyền đọc, ghi và thực thi cho mọi user, ngoại trừ chủ sở hữu file:
chmod og-rwx filename # OR chmod og= filename
  • Cấp quyền đọc, ghi và thực thi cho chủ sở hữu file, cấp quyền đọc cho group và không cấp quyền nào cho mọi user khấc:
chmod u=rwx, g=r, o= filename
  • Thêm quyền truy cập của chủ sở hữu file vào danh sách quyền của các thành viên có trong group:
chmod g+u filename
  • Thêm bit sticky vào directory:
chmod o+t dirname

2. Phương pháp số

Cú pháp sử dụng lệnh chmod trong Linux theo phương pháp dùng số:

chmod [OPTIONS] NUMBER FILE...

Đối với phương pháp số, ta có thể đặt quyền cập cho cả ba user class (owner, group và những user khác) cùng một lúc. Trong đó, NUMBER có thể là một số có 3 hoặc 4 chữ số.

Nếu sử dụng số có 3 chữ số, thì ký tự đầu tiên dùng để biểu diễn quyền của chủ sở hữu file, các ký tự sau lần lượt biểu diễn quyền của group và các user khác.

Biểu diễn số của các quyền đọc, ghi và thực thi file như sau:

  • r (read) = 4
  • w (write) = 2
  • x (execute) = 1
  • không có quyền (no permission) = 0

Giá trị số cho quyền của một user class được xác định bằng tổng của các giá trị quyền trong group đó. Để xác định được quyền truy cập một file ở dạng số thì ta có thể tính tổng giá trị của mọi user class. Chẳng hạn, để gán quyền đọc, ghi và thực thi cho chủ sở hữu của file, đồng thời gán quyền chỉ đọc cho mọi user khác thì ta có thể tính như sau:

  • Chủ sở hữu file: rwx=4+2+1=7
  • Group: r-x=4+0+1=5
  • Khác: r-x=4+0+0=4

Từ đó ta tính được quyền truy cập vào file có giá trị là 754.

Để đặt các flag setuid, setgid và bit sticky thì ta sẽ sử dụng các số có 4 chữ số. Trong đó ý nghĩa của từng chữ số như sau:

  • setuid = 4
  • setgid = 2
  • sticky = 1
  • không thay đổi (no changes) = 0

Ba chữ số tiếp theo có ý nghĩa tương tự như khi dùng số có 3 chữ số.

Nếu chữ số đầu tiên là 0 thì ta có thể bỏ qua và biểu diễn theo số có 3 chữ số. Chẳng hạn 0775 sẽ có ý nghĩa tương tự như 755.

stat -c "%a" filename

Ví dụ nếu cần kiểm tra quyền truy cập file ở dạng biểu diễn số thì có thể dùng lệnh stat như sau:

Output:

644

Một số ví dụ minh họa việc sử dụng lệnh chmod trong Linux theo phương pháp số:

  • Cấp quyền đọc và ghi cho chủ sở hữu file, cấp quyền chỉ đọc cho thành viên trong group và những user còn lại:
chmod 644 dirname
  • Cấp quyền đọc, ghi và thực thi cho chủ sở hữu, cấp quyền đọc và thực thi cho thành viên group và không cấp quyền cho những user khác:
chmod 750 dirname
  • Cấp quyền đọc, ghi và thực thi, kèm theo một bit sticky cho directory:
chmod 1777 dirname
  • Thiết lập quyền đọc, ghi và thực thi cho chủ sở hữu file, không cấp quyền cho mọi user khác (theo kiểu đệ quy):
chmod -R 700 dirname

3. Sử dụng file tham chiếu

Option (tuỳ chọn) --reference=ref_file cho phép ta thiết lập quyền truy cập file tương tự với file tham chiếu được chỉ định trong ref_file:

chmod --reference=REF_FILE FILE

Giả sử ta cần gán quyền của file1 cho file2:

chmod --reference=file1 file2

4. Thay đổi quyền truy cập theo kiểu đệ quy

Để xử lý mọi file và directory trong thư mục hiện tại theo phương pháp đệ quy, ta có thể dùng option -R (--recursive) như sau:

chmod -R MODE DIRECTORY

Giả sử ta cần thay đổi quyền của mọi file và thư mục con có trong /var/www thành 755:

chmod -R 755 /var/www

Trong Linux thì các symbolic link (liên kết tượng trưng) luôn có quyền truy cập là 777. Để thay đổi quyền của symlink thì theo mặc định, chmod sẽ thay đổi quyền của file mà link đang trỏ đến:

chmod 755 symlink

Tuy nhiên, ta có thể sẽ gặp lỗi cannot access ‘symlink’: Permisssion denied vì symlink trên hầu hết các bản phân phối đều được bảo vệ, do đó ta không thể thực hiện thay đổi quyền trên các file. Bạn đọc có thể disable tính năng bảo vệ này trong /proc/sys/fs/protected_symlinks, đổi giá trị 1 thành 0. Tuy nhiên việc này không được khuyến khích.

6. Thay đổi quyền cho nhiều file cùng lúc

Đôi khi ta có thể cần thay đổi quyền truy cập cho nhiều file hay directory cùng một lúc. Trường hợp phổ biến nhất là thay đổi quyền truy cập của file website thành 644 và directory thành 755.

Ta có thể sử dụng lệnh chmod trong Linux theo hai phương pháp như đã đề cập ở trên:

  • Phương pháp số:
find /var/www/my_website -type d -exec chmod 755 {} \; find /var/www/my_website -type f -exec chmod 644 {} \;
  • Phương pháp tượng trưng:
find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \; find /var/www/my_website -type f -exec chmod u=rw,go=r {} \;

Trong đó, lệnh find dùng để tìm các file và thư mục có trong /var/www/my_websites, sau đó truyền từng file và thư mục tìm được vào lệnh chmod để thiết lập quyền truy cập.

Lời kết

Lệnh chmod trong Linux là một lệnh cơ bản để thay đổi quyền truy cập cho file, có thể được sử dụng theo phương pháp tượng trưng hoặc số học. Nếu bạn có bất kỳ câu hỏi hay góp ý nào, đừng ngần ngại để lại ở phần comment bên dưới nhé. Chúc bạn thành công.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG