Tư học LPI 1, 2: Bài 8 Permissions

Permissions trên Centos

1/ Quyền hạn

Do Linux là một hệ điều hành đa nhiệm (multitasking) và đa người dùng (multiuser), nhiều người có thể cùng sử dụng một máy Linux và một người có thể cho chạy nhiều chương trình khác nhau. Có 2 vấn đề lớn được đặt ra: quyền sở hữu các dữ liệu trên đĩa và phân chia tài nguyên hệ thống như CPU, RAM giữa các tiến trình (process).

Tất cả các tập tin và thư mục của Linux đều có quyền sở hữu và quyền truy cập. Bạn có thể thay đổi các tính chát này đối với tập tin hay thư mục. Quyền của tập tin còn cho phép xác định tập tin có phải là một chương trình hay không. Ví dụ với lệnh ls -l:

linux12_81 Tư học LPI 1, 2: Bài 8 Permissions

Cột đầu chỉ ra quyền hạn truy cập của tập tin. Linux cho phép người sử dụng xác định các quyền đọc (read), viết (write) và thực thi (execute) cho từng đối tượng. Có 3 dạng đối tượng:

Người sở hữu (owner)

Nhóm sở hữu (group owner)

Người khác (other users)

Quyền read cho phép đọc nội dung của tập tin. Đối với thư mục, quyền đọc cho phép bạn di chuyển vào thư mục và xem nội dung của thư mục.

Quyền write cho phép bạn thay đổi nội dung hay xóa tập tin. Đối với thư mục, quyền write cho phép tạo, xóa, thay đổi tên các tập tin trong thư mục không phục thuộc vào quyền cụ thể của tập tin trong thư mục. Như vậy, quyền write của thư mục sẽ vô hiểu hóa các quyền truy cập của tập tin trong thư mục.

Quyền execute cho phép gọi chương trình lên bộ nhớ bằng cách nhập từ bàn phím tên của tập tin. Đối với thư mục, bạn chỉ có thể vào thư mục bởi lệnh cd nếu bạn có quyền thực thi với thư mục.

Ký tự đầu tiên của quyền là ký tự “-” cho biết đó là một tập tin. Nếu ký tự “d” thay thế cho dấu “-” thì là một thư mục. Ngoài ra còn có “c” cho biết thiết bị ngoại vi dạng ký tự (như bàn phím), “b” cho thiêt bị ngoài vi dạng block (như ổ đĩa cứng).

9 ký tự tiếp theo chia thành 3 nhóm, cho phép xác định quyền của 3 nhóm: owner, group owner, other. Mỗi cặp này phép xác định quyền đọc, viết và thực thi theo thứ tự kể trên. Quyền read viết tắt là “r” ở vị trí đầu, quyền write viết tắt bằng “w” ở vị trí thứ 2 và vị trí thứ 3 là quyền execute ký hiệu bằng chữ “x”. Nếu một quyền không được chó thì tại vị trí đó sẽ có ký tự “-“.

linux12_82 Tư học LPI 1, 2: Bài 8 Permissions

Trong trường hợp của tập tin, owner có quyền rw tức là read và write. Group owner và other users chỉ có quyền read-only. Bên cạnh đó, bạn viết đó không phải là một chương trình.

Song song với các ký hiệu miêu tà bằng ký tự ở trên, quyền hạn truy cập còn có thể biểu diễn dưới dạng 3 số. Quyền hạn cho từng loại người dùng sử dụng một số có 3 bit tương ứng cho 3 quyền read, write và execute. Theo đó nếu cấp quyền thì bit đó là 1, ngược lại là 0. Giá trị nhị phần của số 3 bit này xác định các quyền cho nhóm người đó.

linux12_83 Tư học LPI 1, 2: Bài 8 Permissions

Ví dụ:

Chỉ có quyền read: 100 có giá trị là 4

Có quyền read và execute: 101 có giá trị là 5

Theo cách tính số thập phân, bạn cũng có thể xác định số quyền hạn bằng cách tính tổng giá trị của các quyền. Theo quy định trên ta có giá trị tương ứng như sau:

linux12_84 Tư học LPI 1, 2: Bài 8 Permissions

Ví dụ: Nếu có quyền read và execute thì số của quyền là: 4+1 =5

read, write, execute: 4 + 2 + 1 = 7

Tổ hợp của 3 quyền trên có giá trị từ 0 đến 7.

+ 0 or —: không có quyền

+ 1 or –x: execute

+ 2 or -w-: write

+ 3 or -wx: write và execute

+ 4 or r–: read

+ 5 or r-x: read và execute

+ 6 or rw-: read và write

+ 7 or rwx: read, write và execute

Như vậy khi cấp quyền trên một tập tin/thư mục, bạn có thể dùng số thập phân gồm 3 cno số. Số đầu tiên miêu tả quyền của owner, số thứ 2 cho group onwer và thứ 3 cho other users.

Ví dụ: Một tập tin với quyền 751 có nghĩa là owner có quyền read, write, execute bằng 4 + 2 + 1 =7. Group owner có quyền read và execute bằng 4 + 1 = 5 và những other users có quyền execute bằng 1.

2/ Quyền mặc định (Default Permissions)

umask (user mask) được sử dụng để kiểm soát quyền mặc định của các files, thư mục mới khi nó được tạo ra.

Bạn có thể gán umask mặc định trong /etc/bashrc hoặc /etc/profile cho tất cả các users. Phần lớn các distro đều gán là 0022 hoặc 0002. Để gán umask cho một user xác định nào đó, bạn có thể chỉnh sửa ~/.bashrc của user đó và thêm vào dòng sau:

umask 022

Trong Linux, khi một file hay một thư mục được tạo ra thì các quyền hạn truy cập đối với chúng là (read, write, execute) cho các chủ thể (owner, group, other) sẽ được xác định dựa trên hai giá trị là quyền truy nhập cơ sở (base permission) và mặt nạ (mask).. Đối với thư mục, quyền truy cập cơ sở là 0777(rwxrwxrwx), còn đối với files là 0666 (rw-rw-rw).

Giá trị “mask” được thiết lập nhờ lệnh umask. Tất cả các file và thư mục được tạo ra sau đó sẽ chịu ảnh hưởng của giá trị mask mới.

Quyền truy cập chính thức được tính bằng cách lấy “giá trị nhị phân của Base permission ”AND“ dạng biểu diễn bù 1 của mask”

<=> “quyền truy cập mặc định” AND (NOT (Giá trị umask))

Ví dụ:

Bash permission của file: 666 = 110110110

umask: 022 = 000010010

NOT (umask) = NOT (000010010 ) = 111101101

110 110 110 AND 111 101 101 = 110 100 100 = 644 Cũng có thể tính quyền truy cập chính thức đơn giản hơn bằng cách lấy Bash permission – umask (666 – 022 = 644). Nhưng chỉ đúng với thư mục.

Với file thì  Bash permission – umask. Sau đó số nào chẵn giữ nguyên, số nào lẻ thì giảm đi 1.

Giá trị umask mặc định cho user thường là 0002

Với mask này thì quyền hạn truy cập mặc định cho thư mục là 775 và file là 664

Giá trị umask mặc định cho user thường là 0022

Với mask này thì quyền hạn truy cập mặc định cho thư mục là 755 và file là 644

3/ Các lệnh sử dụng:

a/Chmod

Đây là lệnh được sử dụng rất phổ biến, dùng cấp phép quyền hạn truy cập của tập tin hay thư mục. Chỉ có chủ sở hữu và superuser mới có quyền thực hiện lệnh này.

Cú pháp: $chmod [nhóm_người_dùng] [thao_tác] [quyền_hạn] [tên_tập_tin]

linux12_85 Tư học LPI 1, 2: Bài 8 Permissions

Ví dụ: Gán quyền trên tập tin test

Gán thêm quyền write cho group:

[[email protected] ~]# chmod g+w test

Xóa quyền read trên group và other:

[[email protected] ~]# chmod go-r test

Gán ngang quyền group và other bằng onwer:

[[email protected] ~]# chmod go=u test

Ngoài cách gán quyền trên, chúng ta cũng có thể gán quyền trực tiếp thông qua 3 chữ số xác định quyền như sau:

$chmod [giá_tri_quyền] [tên_tập_tin/thư_mục]

Quyền -wrx-r-xr-x

[[email protected] ~]# chmod 755 test

Quyền -r-x-r–r–

[[email protected] ~]# chmod 544 test

Quyền -rwxrwxrwx

[[email protected] ~]# chmod 777 test

b/ Chown

Lệnh chown dùng để thay đổi người sở hữu trên tập tin, thư mục

Cú pháp: $chown [tên_user:tên_nhóm] [tên_tập_tin/thư_mục]

Ta có thể thêm tùy chọn -R để thay đổi người sở hữu của thư mục và tất cả các thư mục con của nó. Cũng có thể sử dũng với lệnh chmod, chgrp.

Đổi owner tập tin test thành b1

[[email protected] ~]# chown b1 test

 Đổi owner tập tin test thành b1 và group owner thành b2

[[email protected] ~]# chown b1:b2 test

c/ Chgrp

Lệnh chgrp dùng để thay đổi group owner của tập tin, thư mục

Cú pháp: $chgrp [nhóm_sở_hữu] [tên_tập_tin/thư_mục]

Đổi group owner tập tin test thành root

[[email protected] ~]# chgrp root test

4/ Quyền đặc biệt (Special Permissions)

linux12_898 Tư học LPI 1, 2: Bài 8 Permissions

a/ SUID (Set User ID)

SUID (Set User ID): Nếu SUID bit được thiết lập cho một ứng dụng, những file có thể thực thi bằng người nào đó, điều này có nghĩa là một người dùng khác không phải là chủ sở hữu của ứng dụng cũng có thể sử chạy như chính chủ sở hữu. Hãy xem một ví dụ:

$ ls /usr/bin/passwd

-rwsr-xr-x 1 root root 30768 Feb 22 2012 /usr/bin/passwd

rws: nghĩa là câu lệnh thay đổi mật khẩu passwd đã được thiết lập SUID bit. Tuy passwd thuộc root nhưng vì đã được thiết lập SUID bit nên người dùng khác cũng có thể thực hiện passwd (tất nhiên chỉ có thể thay đổi mật khẩu của chính user thực hiện passwd).

Ví dụ: liệt kê thư mục /root bằng tài khoản thường

linux12_86 Tư học LPI 1, 2: Bài 8 Permissions

Thiết lập SUID bit

linux12_87 Tư học LPI 1, 2: Bài 8 Permissions

Hoặc

[[email protected] ~]# chmod u+s /bin/ls

Thử lại liệt kê thư mục /root bằng tài khoản thường

linux12_88 Tư học LPI 1, 2: Bài 8 Permissions

Khi có quyền thực thi

linux12_892 Tư học LPI 1, 2: Bài 8 Permissions

Khi không có quyền thực thi

linux12_893 Tư học LPI 1, 2: Bài 8 Permissions

b/ SGID (Set Group ID)

SGID (Set Group ID) Bit: SGID bit rất hữu ích khi bạn phải trao quyền truy cập directory cho một nhóm các users trong 1 group. Khi SGID bit được kích hoạt trên 1 directory, toàn bộ file/directory cấp dưới được tạo bởi bất cứ người dùng nào đều có group permission giống với parent directory.

Ví dụ: tạo thư mục testSGID

Phân quyền

linux12_89 Tư học LPI 1, 2: Bài 8 Permissions

Hoặc

[[email protected] test]# chmod g+s testSGID

Vào tài khoản thường tạo thư mục và kiểm tra.

linux12_891 Tư học LPI 1, 2: Bài 8 Permissions

Khi có quyền thực thi

linux12_895 Tư học LPI 1, 2: Bài 8 Permissions

Khi không có quyền thực thi

linux12_894 Tư học LPI 1, 2: Bài 8 Permissions

c/ Sticky bit

Một khi sticky bit được kích hoạt, chỉ owner của file đó mới có thể remove hoặc rename file, bất chấp những người sử dụng khác có full permission trên file đó.

Ví dụ: tạo thư mục dữ liệu và phân quyền Sticky bit cho thư mục dữ liệu

linux12_8991 Tư học LPI 1, 2: Bài 8 Permissions

Vào tài khoản b1, tạo 1 file trong thư mục dữ liệu và nhìn owner và group owner.

linux12_8992 Tư học LPI 1, 2: Bài 8 Permissions

Đổi group owner thành b2

[[email protected] dulieu]# chgrp b2 b1

Vào tài khoản b2 xóa và đổi tên tập tin được tạo bởi b1

linux12_8993 Tư học LPI 1, 2: Bài 8 Permissions

Khi có quyền thực thi

linux12_896 Tư học LPI 1, 2: Bài 8 Permissions

Khi không có quyền thực thi

linux12_897 Tư học LPI 1, 2: Bài 8 Permissions

Dưới đây, chúng ta có bảng tổng kết cách chmod SUID, SGID, Sticky Bit (Cả thư mục và file)

linux12_899 Tư học LPI 1, 2: Bài 8 Permissions

BÌNH LUẬN

Please enter your comment!
Please enter your name here