Cách dùng lệnh Chmod trong Linux
Trong bài này chúng ta sẽ tìm hiểu lệnh chmod trong Linux, đây là lệnh dùng để phân quyền vào các file và thư mục trên Linux.
Trong Linux, để truy cập được vào file thì bạn phải được thiết lập quyền trên file đó, thông qua các thuộc tính và quyền sở hữu file. Đ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 vào file và thư mục.
1. Các quyền của file trong Linux
Trước khi học cách sử dụng lệnh chmod để phân quyền thì chúng ta hãy xem danh sách các quyền có trên file đã nhé.
Các đối tượng truy cập file
Trong Linux, mỗi file sẽ được liên kết với một chủ sở hữu và nhóm sở hữu, và được gán quyền thông qua ba cấp độ người dùng khác nhau như sau:
Bài viết này được đăng tại [free tuts .net]
- Chủ sở hữu file (owner).
- Các thành viên trong nhóm (group).
- Những người khác (other user)
Quyền sở hữu file có thể được thay đổi bằng lệnh chown
và chgrp
.
Các loại quyền trên file
Có ba loại quyền trên một file gồm:
- Quyền đọc - read (r)
- Quyền viết / sửa - write (w)
- Quyền thực thi - execute (x)
Dựa vào hai khái niệm này bạn có thể thiết lập các quyền cho các đối tượng.
Để xem thông tin chi tiết phân quyền của một file thì bạn sử dụng lệnh ls
như sau:
ls -l filename.txt
Kết quả sẽ trả về một chuỗi gồm các thông tin về phân quyền, tên file, và các thông tin hữu ích khác như sau:
-rw-r--r-- 12 freetuts users 12.0K Apr 8 20:51 filename.txt |[-][-][-]- [------] [---] | | | | | | | | | | | | | +-----------> 7. Group - nhóm sở hữu | | | | | +-------------------> 6. Owner - chủ sở hữu | | | | +--------------------------> 5. Alternate Access Method | | | +----------------------------> 4. Other users Permissions | | +-------------------------------> 3. Group Permissions | +----------------------------------> 2. Owner Permissions +------------------------------------> 1. File Type
Giải thích cụ thể như sau:
Ký tự đầu tiên hiển thị loại file (File Type). Nó có thể là một file thông thường (-
), thư mục (d
), một symbolic link (l
) hoặc bất kỳ loại file đặc biệt nào khác.
Chín ký tự tiếp theo đại diện cho việc phân quyền đối truy cập file đối với ba nhóm Owner (chủ sở hữu), Group (nhóm sở hữu), Other Users (người dùng khác). Chúng ta có ba loại quyền là r - w - x nên mỗi đối tượng sẽ có 3 ký tự, 3 nhóm là 9 ký tự.
Nếu quyền nào không có thì sẽ sử dụng dấu -
để thay thế. Như trong ví dụ trên thì (rw-r--r--
) có nghĩa là chủ sở hữu có quyền đọc và ghi (rw-
), group và những người dùng khác chỉ có quyền đọc (r--
).
Tham khảo bảng quyền trên file và thư mục dưới đây nhé.
Bảng quyền trên file Linux:
Permission | Character | Meaning on File |
---|---|---|
Read | - | Không có quyền đọc |
r | Có thể được đọc. | |
Write | - | Không được chỉnh sửa |
w | Có thể chỉnh sửa | |
Execute | - | Không thể thực thi. |
x | Có thể thực thi |
Bảng quyền trên thư mục Linux:
Read | - | Không thể hiển thị nội dung của thư mục. |
r | Có thể hiện thị nội dung của thư mục | |
Write | - | Không thể thay đổi nội dung của thư mục. |
w | Có thể thay đổi nội dung của thư mục | |
Execute | - | Không thể thay đổi thư mục hiện tại bằng lệnh cd |
x | Có thể thay đổi thư mục bằng cd |
2. Cú pháp lệnh chmod trong Linux
Cú pháp lệnh chmod trong Linux như sau:
chmod [OPTIONS] MODE FILE...
Lệnh chmod cho phép bạn thay đổi quyền bằng cách sử dụng chế độ symbolic, numeric hoặc reference file. Chúng ta sẽ lần lượt tìm hiểu ba loại này ở phần tiếp theo nhé.
Chỉ có tài khoản root, chủ sở hữu file (owner) hoặc người dùng có đặc quyền sudo mới có thể thay đổi quyền của file. Hãy hết sức cẩn thận khi sử dụng chmod
, đặc biệt là khi gán quyền cho các file trong thư mục nhiều cấp sử dụng đệ quy -R..
3. Phân quyền bằng symbolic trong Linux
Cú pháp của lệnh chmod khi sử dụng chế độ symbolic như sau:
chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...
Tham số ugoa là nhóm đối tượng nào sẽ được xử lý quyền:
- u = Chủ sở hữu (owner)
- g = Nhóm người dùng (group)
- o = Người dùng khác (other)
- a = Tất cả user (all)
Nếu bạn không truyền tham số này vào lệnh thì nó sẽ lấy giá trị mặc định là a.
Tham số thứ hai là [-+=]
, dùng để xác định quyền sẽ được xóa, thêm hoặc thiết lập mới.
- Dấu
-
là xóa bớt quyền - Dấu
+
là thêm quyền - Dấu
=
là gán lại quyền
Ví dụ 1: Cấp cho các thành viên nhóm sở hữu có quyền đọc file nhưng không được ghi và thực thi.
chmod g=r filename
Ví dụ 2: Cấp quyền thực thi cho tất cả users
chmod a-x filename
Ví dụ 3: Loại bỏ quyền ghi vào nhóm người dùng khác.
chmod -R o-w dirname
Ví dụ 4: Loại bỏ tất cả quyền đọc / ghi / thực thi cho tất cả người dùng.
chmod og-rwx filename
Hoặc
chmod og= filename
Ví dụ 5: Cấp quyền đọc, ghi và thực thi cho chủ sở hữu (owner), cấp quyền đọc cho nhóm sở hữu (group), và các đối tượng user khác không có quyền gì cả.
chmod u=rwx,g=r,o= filename
Ví dụ 6: Thêm các quyền của chủ sở hữu vào danh sách quyền của các thành viên trong nhóm sở hữu.
chmod g+u filename
4. Phân quyền bằng Numeric Method trong Linux
Cú pháp của lệnh chmod trong Linux khi sử dụng phương thức Numeric có định dạng sau:
chmod [OPTIONS] NUMBER FILE...
Khi sử dụng Numeric 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ả những người khác) cùng một lúc. Các con số có thể là 3 hoặc 4 chữ số cùng.
Khi sử dụng số có 3 chữ số thì chữ số đầu tiên thể hiện quyền của chủ sở hữu file, chữ số thứ hai là nhóm của file và chữ số cuối cùng cho 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 (read) = 4
- w (write) = 2
- x (execute) = 1
- no permissions = 0
Số quyền của một lớp người dùng được thể hiện bằng tổng giá trị của các quyền cho nhóm đó. Vậy để tìm hiểu các quyền của file ở chế độ Numeric ta chỉ cần tính tổng số cho tất cả các lớp người dùng.
Ví dụ 1: Để cấp quyền đọc, ghi và thực thi cho chủ sở hữu file, đọc và thực thi đối với nhóm của file và chỉ quyền đọc cho tất cả người dùng khác, bạn sẽ làm như sau:
- Owner: rwx=4+2+1=7
- Group: r-x=4+0+1=5
- Others: r-x=4+0+0=4
Sử dụng phương pháp cộng chuỗi như trên chúng ta tính được quyền của file đó là 754.
Ví dụ 2: Cấp quyền cho owner là đọc và viết (4 + 2), quyền của group là chỉ đọc (4), các user còn lại cũng có quyền đọc (4).
Vậy tổng quyền của file này là 644.
chmod 644 dirname
5. Phân quyền bằng Reference File trong Linux
Lệnh chmod trong Linux có một tùy chọn tên là --reference
, công dụng của nó là cấp quyền cho file y chang như file được chỉ định. Cú pháp như sau:
chmod --reference=REF_FILE FILE
Ví dụ: lệnh sau sẽ gán quyền của file1 cho file2.
chmod --reference=file1 file2
6. Lệnh chmod gán quyền đệ quy cho các file bên trong
Bạn muốn lệnh gán quyền áp dụng cho tất cả các file nằm bên trong thư mục đang gán quyền thì hãy sử dụng thêm tham số -R (--recursive).
chmod -R MODE DIRECTORY
Ví dụ: Để thay đổi quyền của tất cả các file và thư mục con trong thư mục /var/www
thành 755 thì ta chạy lệnh sau:
chmod -R 755 /var/www
7. Lệnh chmod trên Symbolic Links
Trên Symbolic Links thì các quyền luôn là 777.
Theo mặc định, khi thay đổi quyền cho Symbolic Links thì file mà Symbolic Links liên kết tới cũng thay đổi theo.
Cách sử dụng lệnh chmod trên Symbolic Links cũng tương tự như trên file.
chmod 755 symlink
8. Thay đổi quyền hàng loạt các file
Đôi khi bạn cũng muốn thay đổi quyền cho hàng loạt các file và thư mục.
Tình huống phổ biến nhất là thay đổi đệ quy quyền của các file file trong trang web thành 644 và quyền của thư mục thành 755.
Chúng ta sử dụng numeric:
find /var/www/my_website -type d -exec chmod 755 {} \; find /var/www/my_website -type f -exec chmod 644 {} \;
Sử dụng symbolic:
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 {} \;
Như vậy là chúng ta đã tìm hiểu xong cách sử dụng lệnh chmod trong Linux, đây là lệnh dùng để phân quyền rất phổ biến và được sử dụng rất nhiều khi quản trị Linux server.