Trong Linux, quyền là khái niệm được sử dụng để chỉ quyền hạn và phạm vi truy cập của người dùng đến các tài nguyên (file, thư mục, thiết bị, …) trên hệ thống. Các quyền truy cập được xác định bởi các cờ được gán cho chủ sở hữu (owner), nhóm (group) và người dùng khác (others).
Các quyền cơ bản được sử dụng trong Linux là:
- read (r): cho phép đọc nội dung của file hoặc thư mục.
- write (w): cho phép sửa đổi nội dung của file hoặc thư mục.
- execute (x): cho phép thực thi file hoặc thực thi chạy các lệnh trong thư mục.
Các quyền trên các file và thư mục có thể được thiết lập bằng lệnh chmod (change mode) hoặc thông qua giao diện đồ họa của trình quản lý file. Ngoài ra, quyền trên file và thư mục cũng có thể được thiết lập thông qua Access Control List (ACL) để cung cấp quyền truy cập cho các người dùng cụ thể hoặc nhóm người dùng cụ thể.
Cách để phân quyền trong Linux
Trong Linux, để phân quyền truy cập vào các tài nguyên (file, thư mục, thiết bị…) cho người dùng và nhóm người dùng, chúng ta sử dụng lệnh chmod (change mode) để thay đổi các quyền truy cập của file hoặc thư mục.
Cú pháp của lệnh chmod như sau:
# chmod <tùy chọn> <chỉ số phân quyền> <tên tập tin/thư mục>
Ý nghĩa các tùy chọn:
- -v : Hiển thị báo cáo sau khi chạy lệnh, mỗi lần đổi quyền là hiển thị một lần
- -c : Giống như trên, nhưng chỉ hiện khi nó đã làm xong tất cả.
- -R : Áp dụng luôn vào các file/folder nằm bên trong folder được phân quyền (chỉ áp dụng cho thư mục)
Ví dụ: Bạn muốn phân quyền cho file test1
Ví dụ, để cấp quyền đọc, ghi và thực thi cho tất cả các người dùng cho một file, ta sử dụng lệnh:
chmod ugo+rwx file.txt
Trong đó, u
là user, g
là group và o
là other, r
là quyền đọc, w
là quyền ghi và x
là quyền thực thi.
Ngoài ra, chúng ta còn có thể sử dụng các số để chỉ định các quyền tương ứng. Ví dụ, 4
tương ứng với quyền đọc, 2
tương ứng với quyền ghi và 1
tương ứng với quyền thực thi. Ta có thể tính tổng của các số này để đặt quyền cho user, group và other. Ví dụ, chmod 777 file.txt
tương đương với cấp quyền đọc, ghi và thực thi cho tất cả user, group và other.
Các mode quyền dùng trong Linux
Trong Linux, có 3 mode quyền cơ bản được sử dụng để kiểm soát quyền truy cập vào tài nguyên trên hệ thống:
- Mode quyền dạng ký hiệu (Symbolic mode): Được sử dụng để thay đổi hoặc cập nhật quyền của file hoặc thư mục thông qua các ký hiệu như
u
(user – chủ sở hữu),g
(group – nhóm),o
(others – người dùng khác) vàa
(all – tất cả). Các ký hiệu được sử dụng để thêm (+
), xóa (-
) hoặc thiết lập (=
) quyền truy cập. - Mode quyền dạng số (Numeric mode): Được sử dụng để thiết lập quyền truy cập theo cách truyền số vào. Ví dụ, 7 là quyền đầy đủ (rwx), 6 là quyền đọc và ghi (rw-), 5 là quyền đọc và thực thi (r-x), 4 là quyền chỉ đọc (r–), 2 là quyền chỉ ghi (-w-) và 1 là quyền chỉ thực thi (–x).
- Access Control Lists (ACLs): Được sử dụng để kiểm soát quyền truy cập theo cách cấp phép hoặc từ chối truy cập cho các người dùng hoặc nhóm người dùng cụ thể. ACLs cung cấp khả năng kiểm soát quyền truy cập chính xác hơn so với mode quyền thông thường.
Tìm hiểu hệ thống quản lý file trong linux
Mỗi tập tin (file) có một chủ sở hữu (owner), xác định người dùng (user) sở hữu của file. Mỗi file cũng có một nhóm (group), xác định nhóm người dùng của file. Bất kỳ người dùng hệ thống nào không phải là chủ sở hữu và không thuộc cùng một nhóm đều được xác định là thuộc lớp khác (others).
Mỗi người dùng thuộc 1 trong ba nhóm owner, group, other sẽ được chỉ định các quyền read (đọc – khả năng mở và xem nội dung của file), write (ghi – khả năng mở và sửa đổi nội dung của file) và execute (thực thi – khả năng chạy file như một chương trình thực thi khác nhau.
Để xem cấu trúc của một tập tin, thư mục, chúng ta gõ lệnh sau:
-rw-r--r-- 1 root root 0 Mar 6 21:04 .autofsck
-rw-r--r-- 1 root root 0 Dec 2 11:41 .autorelabel
dr-xr-xr-x. 2 root root 4096 Mar 6 21:06 bin
dr-xr-xr-x. 4 root root 4096 Dec 2 11:38 boot
__________________________________________
^ ^ ^ ^ ^ ^ ^ ^ ^-- Ngày tháng tạo ra file và tên file
| | | | | | | |
| | | | | | | \--- Dung lượng của file/folder
| | | | | | \-------- Tên group sở hữu
| | | | | \--------------- Tên user sở hữu
| | | | \---------------------- Hard link, thể hiện nhiều file hoặc thư mục có cùng sử dụng chung inode
| | | |
| \--\--\----------------------------- Các chỉ số phân quyền
\------------------------------------- Loại file (chữ d nghĩa là thư mục)
Phân quyền cho tập tin và thư mục
Trong Linux có 3 quyền cơ bản của 1 user và group đó là:
- r (read) – quyền đọc file/folder
- w (write) – quyền ghi/sửa nội dung file/folder
- x (execute) – quyền thực thi (truy cập) thư mục. Đối với thư mục thì bạn cần phải có quyền execute thì mới dùng lệnh cd để truy cập vào được
- – (Deny) – Không có quyền
Các quyền này cũng có thể xác định bằng các con số tương ứng:
- r (read) – được biểu diễn bằng số 4.
- w (write) – được biểu diễn bằng số 2.
- x (execute) – được biểu diễn bằng số 1.
- – (Deny) – được biểu diễn bằng số 0
Cấu trúc chỉ số phân quyền
- u (owner): Quyền của user mà chủ sở hữu của file này.
- g (group): Quyền của những users thuộc group mà chủ sở hữu của file này.
- o (other): Quyền của tất cả các user khác trên máy.
- a (all): tất cả user
Ví dụ file test1 có thông số như sau
- owner có quyền r+w+- = 4+2+0 = 6
- group có quyền r+-+- = 4+0+0 = 4
- other có quyền r+-+- = 4+0+0 = 4
Thông số file test2 như sau
- owner có quyền r+w+x = 4+2+1 = 7
- group có quyền r+-+x = 4+0+1 = 5
- other có quyền r+-+x = 4+0+1 = 5
Thông số file test3 như sau
- owner có quyền r+w+x = 4+2+1 = 7
- group có quyền r+w+- = 4+2+0 = 6
- other có quyền r+w+- = 4+2+0 = 6
Chỉ số phân quyền của 3 file sẽ là test1=644, test2=755, test3=766
Để thay đổi phân quyền cho file và thư mục ta sẽ dử dụng lệnh chmod
Ví dụ 1
Bạn muốn phân quyền cho file test1
# chmod 777 test1 <Cấp quyền truy cập đầy đủ cho mọi đối tượng người dùng.>
# chmod 775 test1 <Cấp quyền truy cập đầy đủ cho chủ hệ thống và nhóm quản trị, đối tượng người dùng chỉ có quyền đọc (read) và chạy (execute) file.>
# chmod 755 test1 <Cấp quyền truy cập đầy đủ cho chủ hệ thống, chỉ cho phép nhóm quản trị và đối tượng người dùng đọc và chạy các file trong thư mục.>
# chmod 700 test1 <Chỉ cấp quyền truy cập đầy đủ cho chủ hệ thống và chặn truy cập với mọi đối tượng khác.>
# chmod 500 test1 <Không cho phép nhóm quản trị và người dùng truy cập vào file trong thư mục, đồng thời giới hạn quyền chủ hệ thống chỉ đọc và chạy để tránh xóa và thay đổi các file trong thư mục này.>
# chmod 660 test1 <Cho phép chủ hệ thống và nhóm quản trị đọc, sửa, xóa và ghi dữ liệu vào file, nhưng không phân quyền truy cập cho những người dùng khác.>
Ngoài cách phân quyền thông qua chỉ số, chúng ta có thể sử dụng cách phân quyền qua các ký hiệu tượng trưng:
Ví dụ:
Cho chủ sở hữu quyền đọc/ghi/thực thi nhưng nhóm và các người dùng khác chỉ có quyền đọc/thực thi:
# chmod u=rwx,g=rw,o=rw test1
Khi gán cùng một quyền cho nhiều lớp, bạn có thể kết hợp chúng:
# chmod u=rwx,go=rw test1
Nhưng lợi ích của việc sử dụng ký hiệu tượng trưng sẽ được thấy rõ khi bạn chỉ muốn thêm hoặc xóa quyền cho một hành động cụ thể đối với một lớp.
Ví dụ, lệnh sau thêm quyền thực thi cho chủ sở hữu file:
# chmod u+x test1
Và lệnh này loại bỏ quyền ghi và thực thi cho người dùng khác:
# chmod o-wx tes1
Nếu bạn cần cấp quyền cho toàn bộ 1 thư mục thì nhớ thêm tuỳ chọn -R
Cho phép toàn bộ file và thư mục con trong thư mục dir1 có toàn quyền với tất cả mọi user
# chmod -R a+rws dir1
Ví dụ kiểm tra quyền của thư mục .ssh
hoanghd@Has-iMac .ssh % ls -al
total 32
drwx------ 6 hoanghd staff 192 Feb 28 20:47 .
drwxr-xr-x+ 33 hoanghd staff 1056 Apr 4 19:59 ..
-rw------- 1 hoanghd staff 762 Feb 28 20:49 authorized_keys
-rw-r--r-- 1 hoanghd staff 929 Apr 2 13:57 config
-rw------- 1 hoanghd staff 3350 Feb 28 20:49 id_rsa
-rw-r--r-- 1 hoanghd staff 1253 Mar 31 20:35 known_hosts
Kết quả trên mô tả các file trong thư mục .ssh
của người dùng hoanghd
trên hệ điều hành macOS.
Các file trong thư mục bao gồm:
authorized_keys
: chứa các khóa công khai được sử dụng để xác thực người dùng khi đăng nhập vào máy chủ từ xa.config
: chứa các cấu hình cho kết nối SSH, ví dụ như tên miền, cổng và khóa riêng tư sử dụng.id_rsa
: chứa khóa riêng tư của người dùng để xác thực đối với các máy chủ từ xa.known_hosts
: chứa danh sách các máy chủ từ xa đã được xác thực và được lưu trữ trong quá khứ.
Các file có các quyền truy cập khác nhau, trong đó file authorized_keys
, id_rsa
và known_hosts
có quyền truy cập là rw-------
(chỉ cho phép người dùng hoanghd
có quyền truy cập đọc và ghi), trong khi file config
có quyền truy cập là rw-r--r--
(cho phép người dùng hoanghd
đọc file và có quyền ghi file cấu hình của mình, nhưng cho phép tất cả các người dùng khác chỉ đọc file). Thư mục .ssh
có quyền truy cập là drwx------
, chỉ cho phép người dùng hoanghd
truy cập và thực thi các file trong thư mục này.
Thay đổi chủ sở hữu cho tập tin thư mục
Mặc định tập tin và thư mục đều có user group riêng của nó, nếu bạn muốn thay đổi bạn sẽ dùng lệnh chown
# chown <tùy chọn> <tên user>:<tên group> <tên tập tin/thư mục>
Các tùy chọn
- -v : Hiển thị báo cáo sau khi chạy lệnh, mỗi lần đổi chủ sở hữu là hiển thị một lần
- -c : Giống như trên, nhưng chỉ hiện khi nó đã làm xong tất cả.
- -R : Áp dụng luôn vào các file/folder nằm bên trong folder được đổi chủ (chỉ áp dụng cho thư mục)
Ví dụ:
Bạn muốn thay đổi chủ sở hữu cho file test1
# chown user1:group1 test1 <Thay đổi cả user và group cho test1>
# chown user1 test1 <Thay đổi user cho test1>
# chown :group1 test1 <Thay đổi group cho test1>
Thay đổi chủ sở hữu cho một thư mục dir1
#chown -R user1:group1 dir1