5.3 Bài 1
Chứng chỉ: |
Linux Essentials |
---|---|
Phiên bản: |
1.6 |
Chủ đề: |
5 Bảo mật và Quyền trong Tệp |
Mục tiêu: |
5.3 Quản lý Quyền Truy cập và Quyền Sở hữu Tệp |
Bài: |
1 trên 1 |
Giới thiệu
Là một hệ thống đa người dùng, Linux cần có phương pháp để theo dõi xem ai sở hữu những tệp nào, và liệu người dùng có được phép thực hiện các thao tác trên tệp đó hay không. Điều này nhằm đảm bảo quyền riêng tư của những người dùng muốn giữ bí mật về nội dung tệp của họ, cũng như để đảm bảo sự cộng tác bằng cách cho phép nhiều người dùng có thể truy cập được một số tệp nhất định.
Điều này được thực hiện thông qua một hệ thống phân quyền ba cấp: mọi tệp trên đĩa đều được sở hữu bởi một người dùng và một nhóm người dùng và có ba bộ quyền: một cho chủ sở hữu của nó, một cho nhóm sở hữu tệp và một cho những người khác. Trong bài học này, ta sẽ học cách truy vấn quyền đối với một tệp và cách thao tác với chúng.
Truy vấn Thông tin về Tệp và Thư mục
Lệnh ls
được sử dụng để lấy một danh sách nội dung của bất kỳ thư mục nào. Ở dạng cơ bản này, tất cả những gì bạn nhận được sẽ là tên của tệp:
$ ls Another_Directory picture.jpg text.txt
Nhưng mỗi tệp đều sẽ có nhiều loại thông tin có sẵn về chúng bao gồm loại, kích thước, quyền sở hữu, v.v. Để xem các thông tin này, bạn phải yêu cầu ls
cho ra một danh sách “dạng dài” bằng cách sử dụng tham số -l
:
$ ls -l total 536 drwxrwxr-x 2 carol carol 4096 Dec 10 15:57 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Mỗi cột trong đầu ra ở trên đều mang một ý nghĩa riêng:
-
Cột đầu tiên trong danh sách cho biết loại tệp và quyền.
Ví dụ: trên
drwxrwxr-x
:-
Ký tự đầu tiên (
d
) cho biết loại tệp. -
Ba ký tự tiếp theo (
rwx
) cho biết quyền của chủ sở hữu tệp, còn được gọi là người dùng hoặcu
(user). -
Ba ký tự tiếp theo (
rwx
) cho biết quyền của nhóm sở hữu tệp, còn được gọi làg
(group). -
Ba ký tự cuối cùng (
r-x
) cho biết quyền đối với bất kỳ ai khác, còn được gọi là _ những người khác_ hoặco
(others).
-
-
Cột thứ hai cho biết số lượng liên kết cứng hướng đến tệp đó. Đối với một thư mục, điều này có nghĩa là số lượng thư mục con cộng với một liên kết đến chính nó (
.
) và thư mục mẹ (..
). -
Cột thứ ba và thứ tư tương ứng cho biết thông tin về quyền sở hữu của người dùng và nhóm sở hữu tệp.
-
Cột thứ năm cho biết kích thước tệp tính bằng byte.
-
Cột thứ sáu hiển thị ngày và giờ chính xác (tức mốc thời gian) khi tệp được sửa đổi lần cuối cùng.
-
Cột thứ bảy và cột cuối cùng cho biết tên tệp.
Nếu bạn muốn xem kích thước của tệp khi ở định dạng “con người có thể đọc được”, hãy thêm tham số -h
vào ls
. Các tệp có kích thước nhỏ hơn một kilobyte sẽ hiển thị kích thước bằng byte. Các tệp lớn hơn một kilobyte và ít hơn một megabyte sẽ có thêm ký tự K
đứng đằng sau kích thước cho biết kích thước tính bằng kilobyte. Tương tự như vậy đối với kích thước tệp trong phạm vi megabyte (M
) và gigabyte (G
):
$ ls -lh total 1,2G drwxrwxr-x 2 carol carol 4,0K Dec 10 17:59 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip -rw------- 1 carol carol 528K Dec 10 10:43 picture.jpg ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh -rwxr--r-- 1 carol carol 1,9K Dec 20 18:13 text.txt -rw-rw-r-- 1 carol carol 2,6M Dec 11 22:14 Zipped.zip
Để chỉ hiển thị thông tin về một nhóm tệp cụ thể, hãy thêm tên của những tệp này vào ls
:
$ ls -lh HugeFile.zip test.sh total 1,2G -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Còn Thư mục thì sao?
Nếu bạn thử truy vấn thông tin về một thư mục bằng cách sử dụng ls -l
, nó sẽ hiển thị cho bạn một danh sách các nội dung của thư mục thay vào thông tin bạn cần:
$ ls -l Another_Directory/ total 0 -rw-r--r-- 1 carol carol 0 Dec 10 17:59 another_file.txt
Để tránh điều này và để truy vấn thông tin về chính thư mục, hãy thêm tham số -d
vào ls
:
$ ls -l -d Another_Directory/ drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory/
Xem Tệp ẩn
Danh sách thư mục mà chúng ta đã truy xuất bằng cách sử dụng ls -l
trước đó vẫn chưa được đầy đủ:
$ ls -l total 544 drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Có ba tệp khác trong thư mục đó nhưng chúng đang bị ẩn. Trong Linux, các tệp có tên bắt đầu bằng dấu chấm (.
) sẽ tự động bị ẩn. Để xem được chúng, ta cần thêm tham số -a
vào ls
:
$ ls -l -a total 544 drwxrwxr-x 3 carol carol 4096 Dec 10 16:01 . drwxrwxr-x 4 carol carol 4096 Dec 10 15:56 .. drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt -rw-r--r-- 1 carol carol 0 Dec 10 16:01 .thisIsHidden
Tệp .thisIsHidden
chỉ bị ẩn vì tên của nó bắt đầu bằng .
.
Tuy nhiên, các thư mục .
và ..
là các thư mục đặc biệt. .
là con trỏ tới thư mục hiện tại, trong khi ..
là con trỏ tới thư mục mẹ (thư mục chứa thư mục hiện tại). Trong Linux, mọi thư mục đều chứa ít nhất hai thư mục đặc biệt này.
Tip
|
Bạn có thể kết hợp nhiều tham số cho |
Tìm hiểu các loại Tệp
Chúng ta đã đề cập tới việc chữ cái đầu tiên trong mỗi đầu ra của ls -l
sẽ mô tả loại tệp. Ba loại tệp phổ biến nhất là:
-
(tệp thông thường)-
Một tệp có thể chứa bất kỳ loại dữ liệu nào. Các tệp có thể được sửa đổi, di chuyển, sao chép và xóa.
d
(thư mục)-
Một thư mục chứa các tệp hoặc thư mục khác và giúp tổ chức hệ thống tệp. Về mặt kỹ thuật, thư mục là một loại tệp đặc biệt.
l
(liên kết mềm)-
“Tệp” này là một con trỏ tới một tệp hoặc thư mục khác ở một nơi nào đó khác trong hệ thống tệp.
Ngoài những loại trên, có ba loại tệp khác mà ít nhất bạn nên biết tới (nhưng chúng nằm ngoài phạm vi của bài học này):
b
(thiết bị khối)-
Tệp này là một thiết bị ảo hoặc một thiết bị vật lý, thường là đĩa hoặc các loại thiết bị lưu trữ khác. Ví dụ: ổ cứng đầu tiên trong hệ thống có thể được biểu thị bằng
/dev/sda
. c
(thiết bị ký tự)-
Tệp này là một thiết bị ảo hoặc vật lý. Cửa sổ dòng lệnh (như cửa sổ dòng lệnh chính trên
/dev/ttyS0
) và cổng nối tiếp là những ví dụ phổ biến về thiết bị ký tự. s
(ổ nối)-
Ổ nối đóng vai trò là “ống dẫn” truyền thông tin giữa hai chương trình.
Warning
|
Không được thay đổi bất kỳ quyền nào trên thiết bị khối, thiết bị ký tự hoặc ổ nối, trừ khi bạn biết rất rõ mình đang làm gì. Điều này có khiến hệ thống của bạn dừng hoạt động! |
Hiểu về Quyền
Trong đầu ra của ls -l
, các quyền của tệp được hiển thị ngay sau loại tệp dưới dạng ba nhóm, mỗi nhóm ba ký tự, theo thứ tự r
, w
và x
. Dưới đây là ý nghĩa của chúng. Hãy nhớ rằng dấu gạch ngang -
thể hiện việc nó đang bị thiếu một quyền cụ thể.
Quyền với Tệp
r
-
Viết tắt của read (đọc) và có giá trị bát phân là
4
(đừng lo, chúng ta sẽ thảo luận về hệ bát phân ngay sau đây). Nó đại diện cho quyền mở và đọc nội dung của một tệp. w
-
Là viết tắt của write (ghi) và có giá trị bát phân là
2
. Nó đại diện cho quyền chỉnh sửa hoặc xóa tệp. x
-
Là viết tắt của execute (thực thi) và có giá trị bát phân là
1
. Nó đại diện cho việc tệp có thể được chạy dưới dạng tệp thực thi hoặc tệp lệnh.
Vì vậy, ví dụ nếu một tệp có quyền rw-
có thể được đọc và ghi nhưng lại không thể được thực thi.
Quyền với Thư mục
r
-
Là viết tắt của read (đọc) và có giá trị bát phân là
4
. Nó đại diện cho quyền đọc nội dung của thư mục, chẳng hạn như tên tệp. Tuy nhiên, nó không đại diện cho quyền đọc các tệp. w
-
Là viết tắt của write (ghi) và có giá trị bát phân là
2
. Nó đại diện cho quyền tạo hoặc xóa các tệp trong một thư mục hoặc thay đổi tên, quyền và chủ sở hữu của chúng. Nếu người dùng có quyền ghi trên một thư mục, người dùng đó có thể thay đổi quyền của bất kỳ tệp nào trong thư mục ngay cả khi người dùng không có quyền đối với tệp hoặc nếu tệp thuộc sở hữu của người dùng khác. x
-
Là viết tắt của execute (thực thi) và có giá trị bát phân là
1
. Nó đại diện cho quyền truy cập vào một thư mục, nhưng không liệt kê các tệp của nó (việc này cần quyềnr
).
Phần cuối cùng nghe có vẻ hơi khó hiểu. Ví dụ, hãy thử tưởng tượng rằng bạn có một thư mục có tên Another_Directory
với các quyền sau:
$ ls -ld Another_Directory/ d--xr-xr-x 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Ngoài ra, hãy tưởng tượng rằng bên trong thư mục này, bạn có một tệp lệnh vỏ có tên hello.sh
với các quyền sau:
-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh
Nếu bạn là người dùng carol
và đang cố liệt kê nội dung của Another_Directory
, bạn sẽ nhận được thông báo lỗi vì người dùng của bạn thiếu quyền đọc đối với thư mục đó:
$ ls -l Another_Directory/ ls: cannot open directory 'Another_Directory/': Permission denied
Tuy nhiên, người dùng carol
có quyền thực thi, có nghĩa là họ có thể vào được thư mục. Do đó, người dùng carol
có thể truy cập vào các tệp bên trong thư mục, miễn là họ có quyền chính xác đối với tệp tương ứng. Trong ví dụ này, người dùng có toàn quyền đối với tệp lệnh hello.sh
; vì vậy, họ có thể chạy tệp lệnh ngay cả khi họ không đọc được nội dung của thư mục chứa nó. Tất cả những gì họ cần ở đây là tên đầy đủ của tệp.
$ sh Another_Directory/hello.sh Hello LPI World!
Như đã nói từ trước, các quyền được chỉ định theo trình tự: đầu tiên dành cho chủ sở hữu tệp, sau đó là dành cho nhóm sở hữu và cuối cùng là dành cho những người dùng khác. Bất cứ khi nào có một ai đó cố gắng thực hiện một hành động trên tệp, các quyền sẽ được kiểm tra theo cùng một cách. Trước tiên, hệ thống sẽ kiểm tra xem người dùng hiện tại có sở hữu tệp hay không, và nếu có thì hệ thống sẽ chỉ áp dụng nhóm quyền đầu tiên. Trường hợp ngược lại, nó sẽ kiểm tra xem người dùng hiện tại có thuộc nhóm sở hữu tệp hay không. Trong trường hợp có, nó sẽ chỉ áp dụng nhóm quyền thứ hai. Trong mọi trường hợp khác, hệ thống sẽ áp dụng nhóm quyền thứ ba. Điều này có nghĩa là nếu người dùng hiện tại là chủ sở hữu của tệp thì chỉ các quyền của chủ sở hữu mới có hiệu lực ngay cả khi quyền nhóm hoặc các quyền khác có hiệu lực cao hơn các quyền của chủ sở hữu.
Sửa đổi Quyền trong Tệp
Lệnh chmod
được sử dụng để sửa đổi các quyền đối với một tệp và nó sẽ nhận ít nhất hai tham số: tham số đầu tiên mô tả những quyền cần thay đổi và tham số thứ hai trỏ đến tệp hoặc thư mục sẽ thực hiện thay đổi. Tuy nhiên, các quyền thay đổi có thể được mô tả theo hai chế độ (hay còn gọi là hai “mode”) khác nhau.
Chế độ đầu tiên được gọi là chế độ tượng trưng; nó cung cấp khả năng kiểm soát chi tiết và cho phép bạn thêm hoặc thu hồi một quyền duy nhất mà không cần sửa đổi các quyền khác trên nhóm. Chế độ thứ hai được gọi là chế độ số; nó dễ nhớ hơn và có thể được sử dụng nhanh hơn nếu bạn muốn đặt tất cả các giá trị quyền cùng một lúc.
Cả hai chế độ sẽ dẫn đến cùng một kết quả cuối cùng. Vì vậy, ví dụ, các lệnh
$ chmod ug+rw-x,o-rwx text.txt
và
$ chmod 660 text.txt
sẽ tạo ra chính xác cùng một đầu ra - một tệp có tập quyền như sau:
-rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Bây giờ, hãy cùng tìm hiểu cách hoạt động của từng chế độ.
Chế độ Tượng trưng
Khi mô tả những quyền cần thay đổi trong chế độ tượng trưng, (các) ký tự đầu tiên cho biết (các) quyền của ai sẽ bị thay đổi: quyền của người dùng (u
), của nhóm (g
), của người khác (o
) và/hoặc cho cả ba (a
).
Sau đó, bạn cần cho lệnh biết phải làm gì: bạn có thể cấp quyền (+
), thu hồi quyền (-
) hoặc đặt quyền đó thành một giá trị cụ thể (=
).
Cuối cùng, bạn sẽ chỉ định quyền nào bạn muốn tác động: đọc (r
), ghi (w
) hoặc thực thi (x
).
Ví dụ: hãy tưởng tượng chúng ta có một tệp có tên text.txt
với tập quyền sau:
$ ls -l text.txt -rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt
Nếu bạn muốn cấp quyền ghi cho các thành viên của nhóm sở hữu tệp, bạn sẽ sử dụng tham số g+w
. Sẽ dễ dàng hơn nếu bạn nghĩ về nó theo cách này: “Đối với nhóm (g
), cấp (+
) quyền ghi (w
)”. Vì vậy, lệnh sẽ là:
$ chmod g+w text.txt
Hãy kiểm tra kết quả với ls
:
$ ls -l text.txt -rw-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Nếu bạn muốn xóa quyền đọc đối với chủ sở hữu của cùng một tệp, hãy nghĩ về nó như sau: “Đối với người dùng (u
), thu hồi (-
) quyền đọc (r
)”. Vì vậy, ta có tham số là u-r
:
$ chmod u-r text.txt $ ls -l text.txt --w-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Nếu chúng ta muốn đặt quyền chính xác là rw-
cho tất cả mọi người thì sao? Nếu vậy, hãy nghĩ về nó như sau: “Cho tất cả (a
), đặt chính xác quyền (=
), đọc (r
), ghi (w
) và không thực thi (-
)”. Vì thế nên ta có:
$ chmod a=rw- text.txt $ ls -l text.txt -rw-rw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Tất nhiên, ta có thể sửa đổi nhiều quyền cùng một lúc. Trong trường hợp này, hãy phân tách chúng bằng dấu phẩy (,
):
$ chmod u+rwx,g-x text.txt $ ls -lh text.txt -rwxrw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Ví dụ trên có thể được đọc là: “Đối với người dùng (u
), cấp (+
) quyền đọc, viết và thực thi (rwx
); đối với nhóm (g
) thu hồi (-
) quyền thực thi (x
)”.
Khi chạy trên một thư mục, chmod
sẽ chỉ sửa đổi các quyền của thư mục. chmod
có chế độ đệ quy và nó sẽ hữu ích khi bạn muốn thay đổi quyền cho “tất cả các tệp bên trong một thư mục và các thư mục con của nó”. Để sử dụng nó, hãy thêm tham số -R
sau tên lệnh và trước các quyền thay đổi, như thế này:
$ chmod -R u+rwx Another_Directory/
Lệnh này có thể được đọc là: “Đệ quy (-R
), cho người dùng (u
), cấp (+
) quyền đọc, ghi và thực thi (rwx
)”.
Warning
|
Hãy cẩn thận và suy nghĩ kỹ trước khi sử dụng khóa chuyển |
Chế độ Số
Trong chế độ số, các quyền sẽ được chỉ định theo một cách khác: dưới dạng giá trị số có ba chữ số trên ký hiệu bát phân, một hệ thống số cơ số 8.
Mỗi quyền có một giá trị tương ứng và chúng được chỉ định theo thứ tự sau: đầu tiên là đọc (r
) được đại diện bằng 4
, sau đó là ghi (w
) được đại diện bằng 2
và cuối cùng là thực thi (` x`) được đại diện bằng 1
. Nếu không có quyền, ta sẽ sử dụng giá trị không (0
). Vì vậy, quyền của rwx
sẽ là 7
(4+2+1
) và r-x
sẽ là 5
(4+0+1
).
Chữ số đầu tiên trong số ba chữ số trên tập hợp quyền sẽ đại diện cho quyền của người dùng (u
), chữ số thứ hai cho nhóm (g
) và chữ số thứ ba cho những người khác (o
). Nếu chúng ta muốn đặt quyền cho một tệp thành rw-rw----
thì giá trị bát phân sẽ là 660
:
$ chmod 660 text.txt $ ls -l text.txt -rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Bên cạnh đó, cú pháp trong chế độ số cũng giống như trong chế độ tượng trưng: tham số đầu tiên biểu thị các quyền bạn muốn thay đổi và tham số thứ hai trỏ tới tệp hoặc thư mục bạn sẽ thực hiện thay đổi.
Tip
|
Nếu giá trị quyền là số lẻ, tệp chắc chắn có thể thực thi được! |
Vậy thì cú pháp sẽ như thế nào? Chế độ số được khuyên dùng nếu bạn muốn thay đổi quyền thành một giá trị cụ thể, ví dụ như 640
(rw- r-- ---
).
Chế độ Tượng trưng sẽ hữu ích hơn khi bạn chỉ muốn lật một giá trị cụ thể, bất kể các quyền hiện tại đối với tệp là như thế nào. Ví dụ: ta có thể thêm quyền thực thi cho người dùng chỉ bằng cách sử dụng chmod u+x script.sh
mà không cần quan tâm hoặc thậm chí chạm đến các quyền hiện tại cho nhóm và những người khác.
Sửa đổi Quyền Sở hữu Tệp
Lệnh chown
được sử dụng để sửa đổi quyền sở hữu của một tệp hoặc thư mục. Cú pháp của nó khá là đơn giản:
chown username:groupname filename
Ví dụ: hãy thử kiểm tra tệp có tên text.txt
:
$ ls -l text.txt -rw-rw---- 1 carol carol 1881 Dec 10 15:57 text.txt
Người dùng sở hữu tệp là carol
và nhóm cũng là carol
. Bây giờ, hãy sửa đổi nhóm sở hữu tệp thành một số nhóm khác, chẳng hạn như students
:
$ chown carol:students text.txt $ ls -l text.txt -rw-rw---- 1 carol students 1881 Dec 10 15:57 text.txt
Hãy nhớ rằng người dùng sở hữu tệp không cần thuộc nhóm sở hữu tệp. Trong ví dụ trên, người dùng carol
không cần phải là thành viên của nhóm students
. Tuy nhiên, người dùng này phải là thành viên của nhóm để chuyển quyền sở hữu nhóm của tệp cho nhóm đó.
Người dùng hoặc nhóm có thể được bỏ qua nếu bạn không muốn thay đổi chúng. Vì vậy, để chỉ thay đổi nhóm sở hữu tệp, hãy sử dụng chown :students text.txt
. Để chỉ thay đổi người dùng, lệnh sẽ là chown carol text.txt
. Ngoài ra, bạn có thể sử dụng lệnh chgrp students text.txt
để chỉ thay đổi nhóm.
Trừ khi bạn là quản trị viên hệ thống (root), bạn sẽ không thể thay đổi quyền sở hữu tệp do người dùng khác hoặc nhóm mà bạn không thuộc về. Nếu bạn cố làm điều này, bạn sẽ nhận được thông báo lỗi Operation not permitted
(Thao tác không được phép).
Nhóm Truy vấn
Trước khi thay đổi quyền sở hữu tệp, việc biết rõ nhóm nào tồn tại trên hệ thống, người dùng nào là thành viên của nhóm và người dùng thuộc nhóm nào sẽ là khá hữu ích. Bạn có thể hoàn thành các tác vụ đó bằng hai lệnh groups
và groupmems
.
Để xem những nhóm nào tồn tại trên hệ thống của bạn, chỉ cần gõ groups
:
$ groups carol students cdrom sudo dip plugdev lpadmin sambashare
Và nếu bạn muốn biết người dùng thuộc nhóm nào, hãy thêm tên người dùng làm tham số:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Để làm ngược lại và hiển thị những người dùng nào thuộc về một nhóm, hãy sử dụng groupmems
. Tham số -g
sẽ chỉ định nhóm và -l
sẽ liệt kê tất cả các thành viên của nhóm:
$ sudo groupmems -g cdrom -l carol
Tip
|
|
Quyền Đặc biệt
Bên cạnh quyền đọc, ghi và thực thi đối với người dùng, nhóm và những người khác, mỗi tệp có thể có ba quyền đặc biệt khác có thể thay đổi cách hoạt động của một thư mục hoặc cách một chương trình chạy. Chúng có thể được chỉ định ở chế độ ký hiệu hoặc số:
Bit dính
Bit dính (hay còn được gọi là cờ xóa bị hạn chế) có giá trị bát phân là 1
và khi ở chế độ tượng trưng sẽ được biểu thị bằng t
trong các quyền của những người khác. Điều này chỉ áp dụng cho các thư mục và trên Linux, nó sẽ ngăn người dùng xóa hoặc đổi tên tệp trong thư mục trừ khi họ sở hữu tệp hoặc thư mục đó.
Các thư mục có bộ bit dính sẽ hiển thị t
thay thế x
trên các quyền dành cho những người khác trong đầu ra của ls -l
:
$ ls -ld Sample_Directory/ drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/
Ở chế độ số, các quyền đặc biệt được chỉ định bằng cách sử dụng “ký hiệu 4 chữ số” với chữ số đầu tiên biểu thị quyền đặc biệt để thực hiện theo. Ví dụ: để đặt bit dính (giá trị 1
) cho thư mục Another_Directory
ở chế độ số, với quyền 755
, lệnh sẽ là:
$ chmod 1755 Another_Directory $ ls -ld Another_Directory drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Thiết lập GID
Thiết lập GID (hay còn được gọi là bit SGID hoặc bit Đặt ID nhóm) có giá trị bát phân 2
và khi ở chế độ tượng trưng sẽ được biểu thị bằng s
trong các quyền nhóm. Điều này có thể được áp dụng cho các tệp hoặc thư mục thực thi. Trên các tệp thực thi, nó sẽ cấp cho quá trình xuất phát từ việc thực thi quyền truy cập tệp đến các đặc quyền của nhóm sở hữu tệp. Khi được áp dụng cho các thư mục, nó sẽ làm cho mọi tệp hoặc thư mục được tạo bên dưới nó kế thừa nhóm từ thư mục mẹ.
Các tệp và thư mục có bit SGID sẽ hiển thị s
thay thế x
trên các quyền đối với nhóm trong đầu ra của ls -l
:
$ ls -l test.sh -rwxr-sr-x 1 carol carol 33 Dec 11 10:36 test.sh
Để thêm quyền SGID vào tệp ở chế độ tượng trưng, lệnh sẽ là:
$ chmod g+s test.sh $ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
Ví dụ sau sẽ giúp bạn hiểu rõ hơn về tác dụng của SGID đối với một thư mục. Giả sử chúng ta có một thư mục tên là Sample_Directory
thuộc sở hữu của người dùng carol
và nhóm users
với cấu trúc quyền sau:
$ ls -ldh Sample_Directory/ drwxr-xr-x 2 carol users 4,0K Jan 18 17:06 Sample_Directory/
Bây giờ, hãy chuyển sang thư mục này và tạo một tệp trống bên trong nó bằng cách sử dụng lệnh touch
. Kết quả sẽ là:
$ cd Sample_Directory/ $ touch newfile $ ls -lh newfile -rw-r--r-- 1 carol carol 0 Jan 18 17:11 newfile
Như chúng ta có thể thấy, tệp được sở hữu bởi người dùng carol
và nhóm carol
. Tuy nhiên, nếu thư mục có tập quyền SGID, kết quả sẽ khác. Đầu tiên, hãy thêm bit SGID vào Sample_Directory
và kiểm tra kết quả:
$ sudo chmod g+s Sample_Directory/ $ ls -ldh Sample_Directory/ drwxr-sr-x 2 carol users 4,0K Jan 18 17:17 Sample_Directory/
Ký tự s
trên các quyền của nhóm cho biết rằng bit SGID đã được đặt. Bây giờ, hãy chuyển sang thư mục này và một lần nữa tạo một tệp trống bằng lệnh touch
:
$ cd Sample_Directory/ $ touch emptyfile $ ls -lh emptyfile -rw-r--r-- 1 carol users 0 Jan 18 17:20 emptyfile
Như chúng ta có thể thấy, nhóm sở hữu tệp là users
. Điều này là do bit SGID đã làm cho tệp kế thừa chủ sở hữu nhóm của thư mục mẹ của nó, tức users
.
Đặt UID
SUID (hay còn gọi là Đặt ID người dùng) có giá trị bát phân 4
và được biểu thị bằng ký tự s
trên quyền người dùng ở chế độ tượng trưng. Nó chỉ áp dụng cho các tệp và hành vi của nó cũng tương tự như bit SGID; tuy nhiên, quy trình sẽ chạy với các đặc quyền của người dùng sở hữu tệp. Các tệp có bit SUID sẽ hiển thị s
thay thế x
trên các quyền của người dùng trong đầu ra của ls -l
:
$ ls -ld test.sh -rwsr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Bạn có thể kết hợp nhiều quyền đặc biệt trong một tham số bằng cách cộng chúng lại với nhau. Vì vậy, để đặt SGID (giá trị 2
) và SUID (giá trị 4
) ở chế độ số cho tệp lệnh test.sh
với quyền 755
, ta sẽ nhập:
$ chmod 6755 test.sh
Và kết quả sẽ là:
$ ls -lh test.sh -rwsr-sr-x 1 carol carol 66 Jan 18 17:29 test.sh
Tip
|
Nếu cửa sổ dòng lệnh của bạn hỗ trợ màu (hầu hết các cửa sổ dòng lệnh ngày nay đều có hỗ trợ), bạn có thể nhanh chóng xem xem liệu các quyền đặc biệt này có được đặt hay không bằng cách nhìn lướt qua đầu ra của |
Bài tập Hướng dẫn
-
Hãy tạo một thư mục có tên
emptydir
bằng cách sử dụng lệnhmkdir emptydir
. Bây giờ, bằng cách sử dụngls
, hãy liệt kê các quyền đối với thư mụcemptydir
. -
Hãy tạo một tệp trống có tên
emptyfile
bằng lệnhtouch emptyfile
. Bây giờ, hãy sử dụngchmod
với ký hiệu tượng trưng và thêm quyền thực thi cho chủ sở hữu của tệpemptyfile
, đồng thời xóa quyền ghi và thực thi đối với những người khác. Hãy thực hiện việc này chỉ bằng một lệnhchmod
. -
Các quyền đối với tệp có tên
text.txt
sau khi bạn sử dụng lệnhchmod 754 text.txt
sẽ là gì? -
Giả sử một tệp có tên
test.sh
là một tệp lệnh vỏ với các quyền và quyền sở hữu sau:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Chủ sở hữu của tệp có những quyền gì?
-
Nếu người dùng
john
chạy tệp lệnh này, tệp lệnh sẽ được chạy theo đặc quyền của người dùng nào? -
Sử dụng ký hiệu số, cú pháp nào của chmod có thể “huỷ thiết lập” quyền đặc biệt được cấp cho tệp này?
-
-
Hãy xem tệp sau:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Loại tệp nào là
sdb1
? Và ai có thể ghi trên nó? -
Hãy xem 4 tệp sau:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Hãy viết ra các quyền tương ứng cho từng tệp và thư mục bằng cách sử dụng ký hiệu số gồm 4 chữ số.
Another_Directory
-
foo.bar
-
HugeFile.zip
-
Sample_Directory
-
Bài tập Mở rộng
-
Hãy thử điều này trên cửa sổ dòng lệnh: tạo một tệp trống có tên
emptyfile
bằng lệnhtouch emptyfile
. Bây giờ, hãy “xoá hết” quyền đối với tệp cóchmod 000 emptyfile
. Điều gì sẽ xảy ra nếu bạn thay đổi quyền choemptyfile
bằng cách chỉ chuyển một giá trị chochmod
ở chế độ số, chẳng hạn nhưchmod 4 emptyfile
? Nếu chúng ta sử dụng hai giá trị, chẳng hạn nhưchmod 44 emptyfile
, thì sẽ thế nào? Chúng ta có thể học được gì về cáchchmod
đọc giá trị số? -
Bạn có thể thực thi một tệp mà bạn đã thực thi nhưng không có quyền đọc (
--x
) không? Tại sao? -
Hãy xem các quyền đối với thư mục tạm thời
/tmp
trên hệ thống Linux:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Người dùng, nhóm và những người khác có đầy đủ quyền. Nhưng một người dùng thông thường có thể xóa bất kỳ một tệp nào trong thư mục này không? Tại sao?
-
Tệp có tên
test.sh
có các quyền sau:-rwsr-xr-x
, nghĩa là bit SUID đã được đặt. Bây giờ, hãy chạy các lệnh sau:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Chúng ta đã làm gì? Chữ hoa
S
có nghĩa là gì? -
Làm cách nào để có thể tạo một thư mục có tên
Box
mà trong đó tất cả các tệp sẽ được sở hữu tự động bởi nhómusers
và chỉ người dùng đã tạo ra chúng mới có thể xóa được?
Tóm tắt
Là một hệ thống đa người dùng, Linux cần có một phương pháp nhất định để theo dõi xem ai sở hữu và ai có thể truy cập vào từng tệp. Điều này được thực hiện thông qua hệ thống phân quyền ba cấp và trong bài học này, chúng ta đã tìm hiểu về tất cả các cách thức hoạt động của hệ thống này.
Trong bài học này, bạn đã học cách sử dụng ls
để nhận thông tin về quyền của tệp, cách kiểm soát hoặc thay đổi người có thể tạo, xóa hoặc sửa đổi tệp bằng chmod
(cả bằng ký hiệu số và tượng trưng) và cách thay đổi quyền sở hữu của các tệp bằng chown
và chgrp
.
Các lệnh sau đã được thảo luận trong bài học này:
là
-
Liệt kê các tệp, có thể tùy chọn bao gồm các chi tiết như quyền hoặc không.
chmod
-
Thay đổi quyền của một tệp hoặc thư mục.
chown
-
Thay đổi người dùng và/hoặc nhóm sở hữu của tệp hoặc thư mục.
chgrp
-
Thay đổi nhóm sở hữu của một tệp hoặc thư mục.
Đáp án Bài tập Hướng dẫn
-
Hãy tạo một thư mục có tên
emptydir
bằng cách sử dụng lệnhmkdir emptydir
. Bây giờ, bằng cách sử dụngls
, hãy liệt kê các quyền đối với thư mụcemptydir
.Thêm tham số
-d
vàols
để xem thuộc tính tệp của thư mục thay vì liệt kê nội dung của thư mục. Vì vậy, câu trả lời sẽ là:ls -l -d emptydir
Điểm cộng nếu bạn hợp nhất hai tham số thành một như trong
ls -ld emptydir
. -
Hãy tạo một tệp trống có tên
emptyfile
bằng lệnhtouch emptyfile
. Bây giờ, hãy sử dụngchmod
với ký hiệu tượng trưng và thêm quyền thực thi cho chủ sở hữu của tệpemptyfile
, đồng thời xóa quyền ghi và thực thi đối với những người khác. Hãy thực hiện việc này chỉ bằng một lệnhchmod
.Hãy nghĩ về nó theo cách này:
-
“Đối với người dùng sở hữu tệp (
u
), thêm (+
) quyền thực thi (x
)”, vậy nên sẽ làu+x
. -
“Đối với nhóm (
g
) và những người dùng khác (o
), xóa (-
) quyền ghi (w
) và thực thi (x
)”, vậy nên sẽ làgo-wx
.Để kết hợp hai bộ quyền này, ta thêm dấu phẩy giữa chúng. Vì vậy, kết quả cuối cùng sẽ là:
chmod u+x,go-wx emptyfile
-
-
Các quyền đối với tệp có tên
text.txt
sau khi bạn sử dụng lệnhchmod 754 text.txt
sẽ là gì?Hãy nhớ rằng trong ký hiệu số, mỗi chữ số sẽ đại diện cho một bộ ba quyền, mỗi quyền có một giá trị tương ứng: đọc là
4
, ghi là2
, thực thi là1
và không có quyền là0
. Chúng ta nhận giá trị cho một chữ số bằng cách thêm các giá trị tương ứng cho mỗi quyền.7
là4+2+1
hoặcrwx
,5
là4+0+1
, vì vậyr-x
và4
sẽ là chỉ được đọc, hoặcr--
. Các quyền đối vớitext.txt
sẽ làrwxr-xr--
-
Giả sử một tệp có tên
test.sh
là một tệp lệnh vỏ với các quyền và quyền sở hữu sau:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Chủ sở hữu của tệp có những quyền gì?
Quyền của chủ sở hữu (ký tự thứ 2 đến thứ 4 trong đầu ra của
ls -l
) làrwx
; vì vậy, câu trả lời sẽ là: “đọc, ghi và thực thi tệp”. -
Nếu người dùng
john
chạy tệp lệnh này, tệp lệnh sẽ được chạy theo đặc quyền của người dùng nào?Hãy chú ý đến các quyền cho nhóm. Chúng là
r-s
, có nghĩa là bit SGID đã được đặt. Nhóm sở hữu tệp này làroot
; do đó, tệp lệnh (ngay cả khi được khởi chạy bởi người dùng thông thường) sẽ được chạy với quyền gốc. -
Sử dụng ký hiệu số, cú pháp nào của chmod có thể “huỷ thiết lập” quyền đặc biệt được cấp cho tệp này?
Chúng ta có thể “huỷ thiết lập” các quyền đặc biệt bằng cách chuyển chữ số thứ 4,
0
, chochmod
. Các quyền hiện tại là755
; vì vậy, lệnh phải làchmod 0755
.
-
-
Hãy xem tệp sau:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Loại tệp nào là
sdb1
? Và ai có thể ghi trên nó?Ký tự đầu tiên của đầu ra từ
ls -l
cho biết loại tệp.b
là thiết bị khối, thường là đĩa (disk - bên trong hoặc bên ngoài), được kết nối với máy. Chủ sở hữu (root
) và bất kỳ người dùng nào trong nhómdisk
đều có thể ghi vào nó. -
Hãy xem 4 tệp sau:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Hãy viết ra các quyền tương ứng cho từng tệp và thư mục bằng cách sử dụng ký hiệu số gồm 4 chữ số.
Các quyền tương ứng như sau (trong ký hiệu số):
Another_Directory
-
Trả lời:
1755
1
cho bit dính,755
cho các quyền thông thường (rwx
cho người dùng,r-x
cho nhóm và những người khác). foo.bar
-
Trả lời:
0044
Không có quyền đặc biệt (vì vậy nên chữ số đầu tiên là
0
), không có quyền cho người dùng (---
) và quyền chỉ đọc (r—r--
) cho nhóm và những người khác. HugeFile.zip
-
Trả lời:
0664
Không có quyền đặc biệt, vì vậy nên chữ số đầu tiên là
0
.6
(rw-
) cho người dùng và nhóm,4
(r--
) cho những người khác. Sample_Directory
-
Trả lời:
2755
2
cho bit SGID,7
(rwx
) cho người dùng,5
(r-x
) cho nhóm và những người khác.
Đáp án Bài tập Mở rộng
-
Hãy thử điều này trên cửa sổ dòng lệnh: tạo một tệp trống có tên
emptyfile
bằng lệnhtouch emptyfile
. Bây giờ, hãy “xoá hết” quyền đối với tệp cóchmod 000 emptyfile
. Điều gì sẽ xảy ra nếu bạn thay đổi quyền choemptyfile
bằng cách chỉ chuyển một giá trị chochmod
ở chế độ số, chẳng hạn nhưchmod 4 emptyfile
? Nếu chúng ta sử dụng hai giá trị, chẳng hạn nhưchmod 44 emptyfile
, thì sẽ thế nào? Chúng ta có thể học được gì về cáchchmod
đọc giá trị số?Hãy nhớ rằng chúng ta đã “xoá hết” các quyền đối với “tệp trống”. Vì vậy, trạng thái ban đầu của nó sẽ là:
---------- 1 carol carol 0 Dec 11 10:55 emptyfile
Bây giờ, hãy thử lệnh đầu tiên là
chmod 4 emptyfile
:$ chmod 4 emptyfile $ ls -l emptyfile -------r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Các quyền cho những người khác đã được thay đổi. Và nếu chúng ta thử hai giá trị, chẳng hạn như
chmod 44 emptyfile
, thì sẽ thế nào?$ chmod 44 emptyfile $ ls -l emptyfile ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Bây giờ, các quyền dành cho nhóm và những người khác đã bị ảnh hưởng. Từ đó, chúng ta có thể kết luận rằng trong ký hiệu số,
chmod
sẽ đọc giá trị “ngược” từ chữ số ít quan trọng nhất (những người khác) đến chữ số quan trọng nhất (người dùng). Nếu bạn đi qua một chữ số, bạn sẽ sửa đổi quyền cho những người khác. Với hai chữ số, bạn sẽ sửa đổi quyền cho nhóm và những người khác; với ba chữ số, bạn sẽ sửa đổi quyền cho người dùng, nhóm và những người khác; với bốn chữ số, bạn sửa đổi quyền cho người dùng, nhóm, những người khác và các quyền đặc biệt. -
Bạn có thể thực thi một tệp mà bạn đã thực thi nhưng không có quyền đọc (
--x
) không? Tại sao?Ban đầu, câu trả lời có vẻ là khá hiển nhiên: Nếu bạn có quyền thực thi, tệp sẽ chạy. Điều này áp dụng cho các chương trình ở định dạng nhị phân được thực thi trực tiếp bởi nhạt hân. Tuy nhiên, có những chương trình (ví dụ: tệp lệnh vỏ) trước tiên phải được đọc và diễn giải; do đó, trong những trường hợp này, quyền đọc (
r
) cũng phải được đặt. -
Hãy xem các quyền đối với thư mục tạm thời
/tmp
trên hệ thống Linux:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Người dùng, nhóm và những người khác có đầy đủ quyền. Nhưng một người dùng thông thường có thể xóa bất kỳ một tệp nào trong thư mục này không? Tại sao?
/tmp
là thư mục luôn ghi được, nghĩa là bất kỳ người dùng nào cũng có thể ghi vào thư mục đó. Nhưng chúng ta không muốn một người dùng nào đó sửa đổi các tệp do một người khác tạo ra; vì vậy, bit dính sẽ được đặt (như được biểu thị bằngt
trên các quyền dành cho những người khác). Điều này có nghĩa là người dùng có thể xóa tệp trong/tmp
nhưng chỉ trong trường hợp họ là người đã tạo tệp đó. -
Tệp có tên
test.sh
có các quyền sau:-rwsr-xr-x
, nghĩa là bit SUID đã được đặt. Bây giờ, hãy chạy các lệnh sau:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Chúng ta đã làm gì? Chữ hoa
S
có nghĩa là gì?Chúng ta đã xóa quyền thực thi đối với người dùng sở hữu tệp.
s
(hoặct
) thay thế chox
trong đầu ra củals -l
; vì vậy, hệ thống cần một cách để hiển thị xem người dùng có quyền thực thi hay không. Điều này được thực hiện bằng cách thay đổi kiểu định dạng (chữ hoa hoặc chữ thường) của ký tự đặc biệt.Chữ thường
s
trên nhóm quyền đầu tiên có nghĩa là người dùng sở hữu tệp có quyền thực thi và bit SUID đã được đặt. Chữ hoaS
có nghĩa là người dùng sở hữu tệp thiếu (-
) quyền thực thi và bit SUID đã được đặt.Điều tương tự cũng có thể xảy ra với SGID. Chữ thường
s
trên nhóm quyền thứ hai có nghĩa là nhóm sở hữu tệp có quyền thực thi và bit SGID đã được đặt. Chữ hoaS
có nghĩa là nhóm sở hữu tệp thiếu (-
) quyền thực thi và bit SGID đã được đặt.Điều này cũng đúng với bit dính được biểu thị bằng
t
trong nhóm quyền thứ ba. Chữ thườngt
có nghĩa là bit dính đã được đặt và những những người khác có quyền thực thi. Chữ hoaT
có nghĩa là bit dính đã được đặt và những người khác không có quyền thực thi. -
Làm cách nào để có thể tạo một thư mục có tên
Box
mà trong đó tất cả các tệp sẽ được sở hữu tự động bởi nhómusers
và chỉ người dùng đã tạo ra chúng mới có thể xóa được?Đây là một quá trình gồm nhiều bước. Bước đầu tiên là tạo thư mục:
$ mkdir Box
Chúng ta muốn mọi tệp được tạo trong thư mục này sẽ tự động được gán cho nhóm
users
. Chúng ta có thể làm điều này bằng cách đặt nhóm này làm chủ sở hữu của thư mục, sau đó đặt bit SGID trên đó. Chúng ta cũng cần đảm bảo rằng bất kỳ thành viên nào trong nhóm cũng đều có thể ghi vào thư mục đó.Vì chúng ta không quan tâm đến các quyền khác là gì và chỉ muốn “lật” các bit đặc biệt nên việc sử dụng chế độ tượng trưng là điều hợp lý:
$ chown :users Box/ $ chmod g+wxs Box/
Hãy lưu ý rằng nếu người dùng hiện tại của bạn không thuộc nhóm
users
, bạn sẽ phải sử dụng lệnhsudo
trước các lệnh trên để thực hiện thay đổi với quyền gốc.Bây giờ là phần cuối cùng: đảm bảo rằng chỉ người dùng đã tạo tệp mới được phép xóa tệp đó. Điều này được thực hiện bằng cách đặt bit dính (được biểu thị bằng
t
) trên thư mục. Hãy nhớ rằng nó được đặt trên quyền của những người khác (o
).$ chmod o+t Box/
Các quyền trên thư mục
Box
sẽ xuất hiện như sau:drwxrwsr-t 2 carol users 4,0K Jan 18 19:09 Box
Tất nhiên, bạn có thể chỉ định SGID và bit dính chỉ bằng một lệnh
chmod
:$ chmod g+wxs,o+t Box/
Điểm cộng nếu bạn nghĩ tới điều này.