Trong Linux, quyền truy cập vào các tệp được quản lý thông qua các quyền tệp, thuộc tính và quyền sở hữu. Điều này đảm bảo rằng chỉ những người dùng và quy trình được ủy quyền mới có thể truy cập các tệp và thư mục.

Hướng dẫn này bao gồm cách sử dụng lệnh chmod để thay đổi quyền truy cập của các tệp và thư mục.

Quyền Tệp Linux

Trước khi đi xa hơn, chúng ta hãy giải thích mô hình quyền Linux cơ bản.

Trong Linux, mỗi tệp được liên kết với một chủ sở hữu và một nhóm và được gán quyền truy cập quyền cho ba lớp người dùng khác nhau:

  • Chủ sở hữu tệp.
  • Các thành viên trong nhóm.
  • Những người khác (mọi người khác).

Quyền sở hữu tệp có thể được thay đổi bằng cách sử dụng các lệnh chown và chgrp.

Có ba loại quyền tệp áp dụng cho mỗi lớp:

  • Quyền đọc.
  • Quyền viết.
  • Quyền thực thi.

Khái niệm này cho phép bạn chỉ định người dùng nào được phép đọc tệp, ghi vào tệp hoặc thực thi tệp.

Có thể xem quyền tệp bằng lệnh ls:

ls -l filename.txt
-rw-r--r-- 12 hocdevops 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

Ký tự đầu tiên hiển thị loại tệp. Nó có thể là một tập tin thông thường (-), thư mục (d), một liên kết biểu tượng (l), hoặc bất kỳ loại tệp đặc biệt nào khác.

Chín ký tự tiếp theo đại diện cho các quyền tập tin, ba bộ ba của ba ký tự mỗi. Bộ ba đầu tiên hiển thị quyền của chủ sở hữu, quyền nhóm thứ hai và bộ ba cuối cùng hiển thị mọi quyền khác. Các quyền có thể có ý nghĩa khác nhau tùy thuộc vào loại tệp.

Trong ví dụ trên ( rw-r–r– ) có nghĩa là chủ sở hữu tệp đã đọc và ghi quyền (rw-), nhóm và những người khác chỉ đọc quyền (r–).

Mỗi bộ ba quyền có thể được xây dựng từ các ký tự sau đây và có các hiệu ứng khác nhau, tùy thuộc vào việc chúng được đặt thành tệp hay thư mục:

Ảnh hưởng của Quyền đối với Tệp

PermissionCharacterÝ nghĩa trên Tệp
Read-Tệp không thể đọc được. Bạn không thể xem nội dung tệp.
rTệp có thể đọc được.
Write-Tệp không thể thay đổi hoặc sửa đổi.
wTệp có thể được thay đổi hoặc sửa đổi.
Execute-Tệp không thể thực hiện được.
xTệp có thể được thực hiện.
sNếu được tìm thấy trong user bộ ba, nó đặt setuid bit. Nếu được tìm thấy trong group bộ ba, nó đặt setgid bit. Nó cũng có nghĩa là x flag được đặt.

Khi setuid hoặc setgid được đặt trên tệp thực thi, tệp được thực hiện với quyền chủ sở hữu và/hoặc nhóm của tệp.
SCũng giống như s nhưng x không được đặt. Flag này hiếm khi được sử dụng trên các tệp.
tNếu được tìm thấy trong others bộ ba, nó đặt sticky bit.

Nó cũng có nghĩa là x được đặt. Flag này là vô dụng trên các tập tin.
TCũng giống như t nhưng flag x không được đặt. Lá cờ này là vô dụng trên các tập tin.

Ảnh hưởng của Quyền đối với Thư mục (Thư mục)

Trong Linux, Thư mục là các loại tệp đặc biệt có chứa các tệp và thư mục khác.

PermissionCharacterÝ nghĩa về Thư mục
Read-Nội dung của thư mục không thể hiển thị.
rNội dung của thư mục có thể được hiển thị.

(ví dụ: Bạn có thể liệt kê các tệp bên trong thư mục bằng ls.)
Write-Nội dung của thư mục không thể thay đổi.
wNội dung của thư mục có thể được thay đổi.

(ví dụ: Bạn có thể tạo tệp mới, xóa tệp .. v.v.)
Execute-Thư mục không thể thay đổi.
xThư mục có thể được điều hướng bằng cd.
sNếu tìm thấy trong user bộ ba, nó đặt setuid. Nếu tìm thấy trong group bộ ba nó đặt setgid. Nó cũng có nghĩa là x được thiết lập. Khi các setgid được thiết lập trên một mục các tập tin mới được tạo ra trong nó thừa hưởng mục nhóm ID, thay vì chính nhóm ID của các người, người đã tạo ra các tập tin.

setuid không có hiệu lực trên các thư mục.
SGiống như s , nhưng x là không được thiết lập. Flag này là vô dụng trên các thư mục.
tNếu tìm thấy trong others bộ ba nó đặt sticky.

Nó cũng có nghĩa là x cờ được thiết lập. Khi các sticky được thiết lập trên một mục, chỉ là thấy chủ sở hữu của các mục chủ sở hữu của chính hoặc người có thể xóa hay thay đổi tên của các tập tin trong danh mục.
TGiống như t , nhưng x  là không được thiết lập. 
Lá cờ này là vô dụng trên các thư mục.

Sử dụng chmod

Lệnh có dạng chung như sau:

chmod [OPTIONS] MODE FILE...

Lệnh cho phép bạn thay đổi các quyền trên tệp bằng chế độ tượng trưng hoặc số hoặc tệp tham chiếu. Chúng ta sẽ giải thích chi tiết hơn các chế độ sau trong bài viết này. Lệnh có thể chấp nhận một hoặc nhiều tệp và/hoặc thư mục được ngăn cách bởi không gian dưới dạng đối số.

Chỉ root, chủ sở hữu tệp hoặc người dùng có đặc quyền sudo mới có thể thay đổi quyền của tệp. Hãy cẩn thận hơn khi sử dụng, đặc biệt là khi thay đổi các quyền đệ quy.

Phương pháp tượng trưng (Văn bản)

Cú pháp của lệnh khi sử dụng chế độ tượng trưng có định dạng sau:

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

Bộ cờ đầu tiên ( [ugoa…] ), cờ người dùng, xác định người dùng nào lớp quyền cho tệp được thay đổi.

  • u – Chủ sở hữu hồ sơ.
  • g – Người dùng là thành viên của nhóm.
  • o – Tất cả những người dùng khác.
  • a – Tất cả người dùng, giống ugo

Nếu cờ người dùng bị bỏ qua, cờ mặc định là a và các quyền được đặt bởi umask không bị ảnh hưởng.

Bộ cờ thứ hai ( [-+=] ), cờ hoạt động, xác định xem các quyền có được gỡ bỏ, thêm hoặc đặt hay đặt:

  • - Loại bỏ các quyền đã chỉ định.
  • + Thêm các quyền được chỉ định.
  • = Thay đổi các quyền hiện tại đối với các quyền đã chỉ định. Nếu không có quyền nào được chỉ định sau ký hiệu =, tất cả các quyền từ lớp người dùng được chỉ định sẽ bị xóa.

Các quyền ( perms… ) có thể được thiết lập rõ ràng bằng cách sử dụng bằng không hoặc một hoặc nhiều chữ cái sau: rwxXs, và t. Sử dụng một chữ cái duy nhất từ tập hợp ug, và o khi sao chép quyền từ lớp người dùng này sang lớp người dùng khác.

Khi đặt quyền cho nhiều lớp người dùng ( [,…] ), hãy sử dụng dấu phẩy (không có khoảng trống) để tách các chế độ biểu tượng.

Dưới đây là một số ví dụ về cách sử dụng lệnh ở chế độ biểu tượng:

  • Cung cấp cho các thành viên của nhóm sự cho phép để đọc những tập tin, nhưng không phải để viết và thực hiện nó:
chmod g=r filename
  • Bỏ thực hiện sự cho phép cho tất cả người sử dụng:
chmod a-x filename
  • Đệ quy bỏ viết cho phép người khác:
chmod -R o-w dirname
  • Bỏ đọc, viết, và thực hiện phép cho tất cả mọi người ngoại trừ các tập tin của chủ nhân:
chmod og-rwx filename
  • Điều tương tự cũng có thể được thực hiện bằng hình thức sau đây:
chmod og= filename
  • Cho đọc, viết và thực hiện phép các tập tin là chủ sở hữu, đọc quyền của tập tin và không có quyền cho tất cả các người khác:
chmod u=rwx,g=r,o= filename
  • Thêm các tập tin là chủ sở hữu quyền để các quyền mà các thành viên của các tập tin của nhóm có:
chmod g+u filename
  • Thêm sticky bit vào một mục:
chmod o+t dirname

Phương pháp số

Cú pháp của lệnh khi sử dụng phương pháp số có định dạng sau:

chmod [OPTIONS] NUMBER FILE...

Khi sử dụng chế độ số, bạn có thể đặt quyền cho cả ba lớp người dùng (chủ sở hữu, nhóm và tất cả các lớp khác) cùng một lúc.

Số có thể là số 3 hoặc 4 chữ số.

Khi 3 chữ số được sử dụng, chữ số đầu tiên đại diện cho quyền của chủ sở hữu tệp, chữ số thứ hai của nhóm tệp và chữ số cuối cùng tất cả những người dùng khác.

Mỗi quyền ghi, đọc và thực thi có giá trị số sau:

  • r (đọc) = 4
  • w (viết) = 2
  • x (thực hiện) = 1
  • không có quyền = 0

Số quyền của một lớp người dùng cụ thể được thể hiện bằng tổng giá trị của các quyền cho nhóm đó.

Để tìm hiểu quyền của tệp ở chế độ số, chỉ cần tính tổng số cho tất cả các lớp người dùng. Ví dụ: để cấp quyền đọc, viết và thực thi quyền cho chủ sở hữu tệp, hãy đọc và thực thi quyền cho nhóm tệp và chỉ đọc quyền cho tất cả những người dùng khác mà bạn sẽ làm như sau:

  • Chủ sở hữu: rwx =4 +2 + 1 = 7
  • Nhóm: r-x =4+0+1=5
  • Những người khác: r-x = 4 + 0 + 0 = 4

Sử dụng phương pháp ở trên, chúng ta đưa ra số 754 , đại diện cho các quyền mong muốn.

Để thiết lập setuid , setgidsticky bit cờ sử dụng bốn chữ số số.

Khi số 4 chữ số được sử dụng, chữ số đầu tiên có ý nghĩa sau:

  • setuid=4
  • setgid=2
  • dính=1
  • không thay đổi = 0

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

Nếu chữ số đầu tiên là 0, nó có thể bị bỏ qua và chế độ có thể được thể hiện bằng 3 chữ số. Chế độ số 0755 cũng giống như 755 .

Để tính toán chế độ số, bạn cũng có thể sử dụng một phương pháp khác (phương pháp nhị phân), nhưng nó phức tạp hơn một chút. Biết cách tính chế độ số bằng cách sử dụng 4, 2 và 1 là đủ cho hầu hết người dùng.

Bạn có thể kiểm tra quyền của tệp trong ký hiệu số bằng lệnh stat:

stat -c "%a" filename

Output:

644

Dưới đây là một số ví dụ về cách sử dụng lệnh chmod ở chế độ số:

  • Cung cấp cho chủ sở hữu của tệp quyền đọc và ghi và chỉ đọc quyền cho các thành viên nhóm và tất cả người dùng khác:
chmod 644 dirname
  • Cung cấp cho chủ sở hữu tệp đọc, viết và thực thi quyền, đọc và thực thi quyền cho các thành viên nhóm và không có quyền cho tất cả người dùng khác:
chmod 750 dirname
  • Cung cấp cho các quyền đọc, viết và thực thi, và một chút dính vào một thư mục nhất định:
chmod 1777 dirname
  • Thiết lập đệ quy đọc, ghi và thực thi quyền cho chủ sở hữu tệp và không có quyền cho tất cả người dùng khác trên một thư mục nhất định:
chmod -R 700 dirname

Sử dụng Tệp Tham chiếu

Tùy chọn –reference=ref_file này cho phép bạn đặt quyền của tệp giống như các quyền của tệp tham chiếu được chỉ định (ref_file).

chmod --reference=REF_FILE FILE

Ví dụ: lệnh sau đây sẽ gán quyền của file 1 cho file2:

chmod --reference=file1 file2

Đệ quy Thay đổi Quyền của Tệp

Để hoạt động đệ quy trên tất cả các tệp và thư mục theo thư mục nhất định, hãy sử dụng tùy chọn -R (–recursive):

chmod -R MODE DIRECTORY

Ví dụ: để thay đổi quyền của tất cả các tệp và định hướng con dưới thư mục /var/www thành 755 bạn sẽ sử dụng:

chmod -R 755 /var/www

Các liên kết mang tính biểu tượng luôn có quyền.777

Theo mặc định, khi thay đổi quyền của symlink, sẽ thay đổi các quyền trên tệp mà liên kết đang trỏ đến.

chmod 755 symlink

Rất có thể thay vì thay đổi quyền sở hữu mục tiêu, bạn sẽ nhận được lỗi “không thể truy cập ‘symlink’: Quyền bị từ chối”.

Lỗi xảy ra vì theo mặc định trên hầu hết các bản phân phối Linux symlinks được bảo vệ và bạn không thể hoạt động trên các tệp đích. Tùy chọn này được chỉ định trong /proc/sys/fs/protected_symlinks. 1 có nghĩa là được kích hoạt và 0 vô hiệu hóa. Không nên vô hiệu hóa bảo vệ symlink.

Thay đổi Quyền Tệp với số lượng lớn

Đôi khi có những tình huống mà bạn sẽ cần phải thay đổi số lượng lớn các tập tin và quyền thư mục.

Kịch bản phổ biến nhất là đệ quy thay đổi quyền của tệp trang web 644 và quyền của thư mục thành 755.

Sử dụng 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 {} \;

Sử dụng 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 {} \;

Lệnh find sẽ tìm kiếm các tệp và thư mục bên dưới /var/www/my_websitechmod và chuyển từng tệp và thư mục được tìm thấy đến lệnh để đặt quyền.

Kết thúc

Lệnh chmod thay đổi quyền của tệp. Các quyền có thể được đặt bằng chế độ tượng trưng hoặc số.

Để tìm hiểu thêm về trang chmod man.

Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, hãy để lại bình luận.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments