Bài viết này giới thiệu các bạn về cách phân quyền tập tin hay thư mục trong hệ điều hành Linux và các lệnh liên quan như chmod, chown và chgrp.
1. Quyền sở hữu (Ownership) tập tin
Trên Linux và các hệ điều hành Unix khác. Tất cả tệp đều được liên kết với người dùng. Mỗi tệp cũng được liên kết với một nhóm có mối liên quan đến tệp và các quyền nhất định hoặc quyền: đọc, viết và thực thi.
Các quyền sở hữu và quyền của người dùng và nhóm:
Lệnh | Chức năng |
---|---|
chown | Sử dụng để thay đổi quyền sở hữu của người dùng đối với tệp hoặc thư mục. |
chgrp | Sử dụng để thay đổi quyền sở hữu nhóm. |
chmod | Sử dụng để thay đổi các quyền trên tệp, có thể được thực hiện riêng cho chủ sở hữu, nhóm và người dùng khác. |
2. Quyền (Permission) có thể cấu hình cho tập tin
Mỗi tệp và thư mục trong hệ thống UNIX có các chế độ cơ bản sau:
Chế độ | Tên | Mô tả |
---|---|---|
r | read | Đọc tập tin/ liệt kê các tập tin trong một thư mục. |
w | write | Ghi vào tập tin/ tạo tập tin mới trong thư mục. |
x | execute | Thực thi tập tin/ xem đệ quy một cây thư mục. |
s | setuid hoặc setgid | Xem chế độ đặc biệt. |
t | sticky | Xem chế độ đặc biệt. |
Chúng được đại diện như rwx. Các quyền này ảnh hưởng đến ba nhóm chủ sở hữu: người dùng hoặc chủ sở hữu (u), nhóm (g) và những người khác (o).
Chúng ta có ba nhóm ba quyền sau đây:
rwx: rwx: rwx
u: g: o
Lệnh chmod
Lệnh chmod
cho phép chúng ta thay đổi quyền (permission) của một file hay folder.
Để phân lại quyền cho cả file (tập tin) / thư mục (folder) trên Linux thì chúng ta sẽ sử dụng lệnh chmod
. Cấu trúc lệnh này là:
chmod [tùy chọn] [biểu diễn phân quyền] [tên file hoặc thư mục]
Trong đó mục tuỳ chọn thường sử dụng các tùy choọ sau:
-v: hiển thị báo cáo sau khi chạy lệnh. Nếu bạn
chmod
nhiều file (tập tin) / thư mục (folder) cùng lúc thì cứ mỗi lần nó đổi quyền của một file (tập tin) / thư mục (folder) xong là sẽ hiện báo cáo.-c: Giống như trên, nhưng chỉ hiện khi nó đã làm xong tất cả.
-f: Bắt buộc chạy, nếu có lỗi xảy ra nó cũng không thông báo.
-R: Nếu bạn
chmod
một folder thì kèm theo -R nghĩa là áp dụng luôn vào các file (tập tin) / thư mục (folder) nằm bên trong nó.--help: Hiển thị thông báo trợ giúp.
Ví dụ: Để xem quyền của một thư mục hay một tệp ta dùng: ls -l
[dang@test1 ~]# ls -l
total 0
-rw-r--r-- 1 dang dang 0 Jul 28 15:17 $
Từ kết quả của ví dụ trên đây chúng ta sẽ phân tích các chỉ số phân quyền -rw-r--r--
Ở vị trí đầu tiên của kết quả -rw-r--r--, vị trí đầu tiên bạn có thể thấy nó dấu gạch ngang (-) đây là một tệp tin. Trong một số trường hợp nó là thư mục thì kí tự bắt đầu là (d). Cụ thể:
rw-: Đối tượng thứ nhất chính là quyền dành cho user sở hữu nó.
r--: Đối tượng thứ hai chính là quyền dành cho các user thuộc group đang sở hữu nó.
r--: Đối tượng thứ ba chính là quyền dành cho mọi user không thuộc quyền sở hữu và không thuộc group sở hữu.
Vậy cái đoạn -rw-r--r-- nghĩa là: User dang được phép đọc và sửa file, các user thuộc group dang có thể đọc file, còn những người còn lại là chỉ được đọc file.
Để phân quyền cho tập tin có 2 cách để sử dụng lệnh chmod
:
Phân quyền theo chế độ tượng trưng (Symbolic)
Lệnh chmod sử dụng các kí tự toán học để gáng quyền cho tập tin hay thư mục. Chế độ tượng trưng gồm 3 thành phần kết hợp lại thành một chuỗi:
chmod [tham chiếu][toán tử][chế độ] file
Tham chiếu dùng xác định những người dùng nào sẽ được điều chỉnh quyền truy cập. Tham chiếu mặc định sử dụng là 'all' cho tất cả các nhóm nếu không có tham chiếu được chỉ định. Tham chiếu được biểu diển bởi các kí tự sau:
Tham chiếu | Nhóm | Mô tả |
---|---|---|
u | Người dùng | Chủ sở hữu tập tin |
g | Nhóm | Các người dùng thuộc nhóm của tập tin |
o | Người dùng khác | Các người dùng không thuộc nhóm cũng không phải chủ sở hữu |
a | Tất cả | Tất cả ba lớp trên tương ứng với ugo |
Chương trình chmod
sử dụng một toán tử để quy định cách thay đổi chế độ của tập tin:
Toán tử | Chức năng |
---|---|
+ | Thêm quyền vào một tập tin hoặc thư mục. |
- | Xóa quyền. |
= | Đặt quyền và ghi đè các quyền được đặt trước đó. |
Ví dụ: Dùng lệnh chmod
bằng chữ
[root@test1 ~]# ls -l file
-rw-r--r-- 1 root root 10 Jan 19 08:51 file
[root@test1 ~]# chmod uo+x,g-w file
[root@test1 ~]# ls -l file
-rwxr--r-x 1 root root 10 Jan 19 08:51 file
Phân quyền theo chế độ số (Numeric)
Ở chế độ này, chmod sử dụng các số thuộc hệ bát phân. Loại cú pháp trên có thể khó gõ và nhớ. Vì vậy chúng ta thường sử dụng định dạng số của chmod cung cấp một cách biểu diễn và gán chế độ truy cập bằng 4 số bát phân. 3 số bên phải là quyền truy cập của chủ sở hữu, nhóm và người dùng khác số thứ 4 từ phải sang trái biểu diễn các cờ đặc biệt setuid, setgid và sticky.
Bảng các số chỉ định 3 quyền:
Số | Loại quyền | Kí hiệu |
---|---|---|
0 | Không cho phép | --- |
1 | Thực thi | --x |
2 | Viết | -w- |
3 | Viết và thực thi | -wx |
4 | Đọc | r-- |
5 | Đọc và thực thi | r-w |
6 | Đọc và viết | rw- |
7 | Đọc viết và thực thi | rwx |
Ví dụ: Dùng lệnh chmod
đưa các số trên vào phân quyền cho thư mục hay tệp:
[root@test1 ~]# chmod 755 file
[root@test1 ~]# ls -l file
-rwxr-xr-x 1 root root 10 Jan 19 08:51 file
Do các cờ setuid, setgid và sticky không được đặt nên lệnh tương đương với:
chmod 0755 file
Chế độ đặc biệt của lệnh chmod
Lệnh chmod có khả năng thay đổi các quyền bổ sung hoặc các chế độ đặc biệt của tệp và thư mục. Các chế độ biểu tượng sử dụng 's' để thể hiện chế độ setuid và setgid và 't' để thể hiện chế độ sticky.
Hầu hết các hệ điều hành hỗ trợ đặc điểm kỹ thuật của phân quyền các chế độ đặc biệt bằng cách sử dụng chế độ số, nhưng một số thì không. Trên các hệ thống này, chỉ có các chế độ tượng trưng có thể được sử dụng.
Ví dụ dòng lệnh chmod:
Lệnh | Chức năng |
---|---|
chmod a+r file | Thêm quyền đọc cho tất cả các lớp (ví dụ: chủ sở hữu, nhóm và những người khác) |
chmod +r file | Thêm quyền đọc cho tất cả các lớp phụ thuộc vào umask |
chmod a-x file | Xóa quyền thực thi cho tất cả các lớp |
chmod a+rx file | Thêm quyền đọc và thực thi cho tất cả các lớp |
chmod u=rw,g=r,o= file | Quyền đọc và ghi cho chủ sở hữu,quyền đọc cho nhóm và từ chối quyền truy cập cho người khác |
chmod -R u+w,go-w file | Thêm quyền ghi vào thư mục và tất cả nội dung của nó |
chmod ug=rw file | Quyền đọc và ghi cho chủ sở hữu và nhóm |
chmod 664 file | Quyền đọc và ghi cho chủ sở hữu và nhóm và quyền đọc cho người khác |
chmod 0744 file | Quyền đọc, ghi và thực thi quyền cho chủ sở hữu và quyền đọc cho nhóm và những người khác ( 0 chỉ định không có chế độ đặc biệt ) |
chmod 1755 file | Quyền đọc, ghi và thực thi quyền cho chủ sở hữu và đặt quyền đọc và thực thi quyền cho nhóm và những người khác. |
chmod 4755 file | Đặt UID, quyền đọc, ghi và thực thi cho chủ sở hữu và đặt quyền đọc và thực thi cho nhóm và những người khác |
chmod 2755 file | Đặt GID, quyền đọc, ghi và thực thi cho chủ sở hữu và đặt quyền đọc và thực thi quyền cho nhóm và những người khác |
chmod -R u+rwX,g-rwx,o-rx file | Recursively (trên tất cả các tệp và thư mục bên trong) thêm quyền đọc, ghi và quyền thực thi đặc biệt cho chủ sở hữu, xóa quyền đọc, ghi và thực thi cho nhóm và xóa quyền đọc và thực thi cho người dùng khác |
chmod -R a-x+X file | Recursively (trên tất cả các tệp và thư mục bên trong) xóa quyền thực thi cho tất cả các lớp và thêm quyền thực thi đặc biệt cho tất cả các lớp |
Kết hợp lệnh find với chmod
Chúng ta có thể kết hợp lệnh chmod
với lệnh tìm kiếm find
. Cách sử dụng như sau
Chỉ chmod thư mục :
find . -type d -exec chmod 755 {} \;
Chỉ chmod tập tin :
find . -type f -exec chmod 644 {} \;
Chỉ chmod tập tin có phần mở rộng là .php:
find . -type f -name ‘*.php’ -exec chmod 600 {} \;
4. Lệnh chown và lệnh chgrp
Lệnh chown
Lệnh chown
sử dụng rất đơn giản. Chúng ta chỉ cần nhớ trong lệnh có user và group được ngăn cách bằng dấu “:”, đầu tiên là user sau đó là group.
Thay đổi người dùng chủ sở hữu của một tập tin hoặc thư mục:
chown user file
Thay đổi người dùng chủ sở hữu và nhóm của một tập tin hoặc thư mục:
chown user:group file
Thay đổi đệ quy chủ sở hữu của một thư mục và tất cả nội dung bên trong của nó:
chown -R user folder
Thay đổi chủ sở hữu của một liên kết tượng trưng:
chown -h user symlink
Ví dụ: Thay đổi quyền sở hữu user tệp bằng cách sử dụng lệnh chown
[dang@test1]$ touch file1 file2
[dang@test1]$ ls -l file?
-rw-r--r-- 1 dang dang 0 Jan 19 09:39 file1
-rw-r--r-- 1 dang dang 0 Jan 19 09:39 file2
[dang@test1]$chown root file2
[dang@test1]$ ls -l file?
-rw-r--r-- 1 dang dang 0 Jan 19 09:39 file1
-rw-r--r-- 1 root dang 0 Jan 19 09:39 file2
[dang@test1]$chown root:root file?
ls -l file?
-rw-r--r-- 1 root root 0 Jan 19 09:39 file1
-rw-r--r-- 1 root root 0 Jan 19 09:39 file2
Lệnh chgrp
Các file và người dùng thuộc vào các nhóm, đây là cách truy cập file thuận tiện cho nhiều người dùng. Khi đăng nhập, mặc định sẽ là thành viên của một nhóm được thiết lập khi người dùng root tạo tài khoản người dùng. Cho phép một người dùng thuộc nhiều nhóm khác nhau, nhưng mỗi lần đăng nhập chỉ là thành viên của một nhóm. Để thay đổi quyền sở hữu nhóm của các tập tin và thư mục. Cấu trúc lệnh này là:
chgrp [tùy chọn] [nhóm] file
Các tuỳ chọn của lệnh là:
-c : hiển thị thông báo chỉ với các file mà lệnh làm thay đổi sở hữu
-f : Bỏ qua hầu hết các lỗi
-R : Thực hiện thay đổi quyền sở hữu đối với thư mục và file theo đệ quy
--help: Hiển thị thông báo trợ giúp.
Thay đổi chủ sở hữu của một tập tin hoặc thư mục:
chgrp group file
Thay đổi đệ quy chủ sở hữu của một thư mục và tất cả nội dung bên trong của nó:
chgrp -R group folder
Thay đổi chủ sở hữu của một liên kết tượng trưng:
chgrp -h user symlink
Ví dụ: Thay đổi quyền sở hữu nhóm tệp bằng cách sử dụng lệnh chgrp
.
[dang@test1]$ touch file1
[dang@test1]$ ls -l file1
-rw-r--r-- 1 dang dang 0 Jan 19 21:45 file1
[dang@test1]$chgrp root file1
ls -l file1
-rw-r--r-- 1 dang root 0 Jan 19 21:45 file1
Đối với chown và chgrp chúng ta cần lưu ý:
Lưu ý: Khi change qua user hay group nào, thì user dùng lệnh phải có quyền trên user/group đó, hoặc chạy lệnh từ root.