Phân quyền tập tin trong Linux Image Phân quyền tập tin trong Linux

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ệnhChức năng
chownSử 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.
chgrpSử dụng để thay đổi quyền sở hữu nhóm.
chmodSử 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ênMô tả
rreadĐọc tập tin/ liệt kê các tập tin trong một thư mục.
wwriteGhi vào tập tin/ tạo tập tin mới trong thư mục.
xexecuteThực thi tập tin/ xem đệ quy một cây thư mục.
ssetuid hoặc setgidXem chế độ đặc biệt.
tstickyXem chế độ đặc biệt.

Quyền đọc viết và thực thi

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)
  • Phân quyền theo chế độ số (Numeric)

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ếuNhómMô tả
uNgười dùngChủ sở hữu tập tin
gNhómCác người dùng thuộc nhóm của tập tin
oNgười dùng khácCác người dùng không thuộc nhóm cũng không phải chủ sở hữu
aTấ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ềnKí hiệu
0Không cho phép---
1Thực thi--x
2Viết-w-
3Viết và thực thi-wx
4Đọcr--
5Đọc và thực thir-w
6Đọc và viếtrw-
7Đọc viết và thực thirwx

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ệnhChức năng
chmod a+r fileThê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 fileThêm quyền đọc cho tất cả các lớp phụ thuộc vào umask
chmod a-x fileXóa quyền thực thi cho tất cả các lớp
chmod a+rx fileThêm quyền đọc và thực thi cho tất cả các lớp
chmod u=rw,g=r,o= fileQuyề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 fileThêm quyền ghi vào thư mục và tất cả nội dung của nó
chmod ug=rw fileQuyền đọc và ghi cho chủ sở hữu và nhóm
chmod 664 fileQuyền đọc và ghi cho chủ sở hữu và nhóm và quyền đọc cho người khác
chmod 0744 fileQuyề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 fileQuyề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 fileRecursively (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 fileRecursively (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.