Giới Thiệu Về Phân Quyền Trên Linux - 123HOST
Có thể bạn quan tâm
Giới thiệu
Chắc bạn đã biết trong một phần mềm quản lý nhân viên, mỗi nhóm người hay một một người sẽ có một quyền hạn nhất định. Ví dụ như quản lý sẽ có quyền chia công việc, quản lý nhân viên của mình, còn giám đốc thì có thể thay đổi, thêm hoặc bớt các bộ phân trong công ty. Việc phân chia như vậy sẽ giúp cho việc quản lý dễ dàng và bảo mật hơn.
Điều đấy cũng sẽ đúng trong phân quyền trên Linux. Vì Linux là một bản sao được phát triển từ UNIX nên nó có khả năng chạy đa người dùng và ta có thể sử dụng việc phân quyền để đặt ra các giới hạn nhất định cho mỗi người. Trong bài này chúng ta sẽ đi qua một số khái niệm cũng như cách xem về phân quyền trên Linux nhé.
User
Đầu tiên, User (hay còn gọi là người dùng) là tài khoản dùng để đăng nhập vào hệ thống. Mỗi User sẽ chứa một mã UID (Unique identification number) hay mã xác định danh tính duy nhất, từ đó hệ thống có thể phân biệt được các người dùng với nhau.
Tất cả các thông tin về các User trong hệ thống được lưu tại địa chỉ /etc/passwd còn mật khẩu thì sẽ được hash (mã băm - mã hoá một chiều) và lưu tại /etc/shadow
Dựa vào quyền hạn truy cập thì User được chia theo 2 loại chính:
- Superuser/root/administrator : Loại User có quyền hạn cao nhất. Có khả năng truy cập vào mọi file có trong hệ thống.
- Normal user: Là loại User thường, bị giới hạn một số quyền (Ta có thể tuỳ chọn các quyền mà user này có thể làm).
Superuser
Theo như ở trên thì bạn đã biết Superuser (hay còn được gọi là root) là một User hệ thống. Ta sử dụng Superuser khi muốn sử dụng các đặc quyền mà chỉ Superuser làm được còn User thường thì không.
Thông tin: UID của Superuser/ root/ administrator trong các hệ điều hành tương tự Unix sẽ là 0 bất kể nó có tên gì.
Các đặc quyền mà Superuser có thể làm:
- Đặc quyền thay đổi read/write/exectue
- Tạo, tải file hay phần mềm
- Sửa đổi files và cài đặt
- Xoá thông tin User và data
Chú ý: Bạn phải cẩn trọng khi sử dụng Superuser vì lúc này bạn có thể thay đổi ở cấp cao nhất. Nếu bạn không biết mình đang làm gì thì không nên sử dụng.
Để đăng nhập với Superuser (root user) có 2 cách:
Cách 1. su [command]: Cho phép bạn tạm thời chuyển sang Superuser.
Lệnh này sẽ cho phép bạn đăng nhập vào Superuser. Điều đó cũng đồng nghĩa với việc tất cả các lệnh bạn nhập vào đều chạy bằng quyền cao nhất - root. Sau khi hoàn thành các câu lệnh, bạn sẽ phải đăng xuất bằng lệnh logout. Đó cũng chính là lý do su ít được sử dụng. Hãy thử tưởng tượng vào một ngày tồi tệ, bạn quên đăng xuất và vô tình thực hiện câu lệnh xoá file hệ thống. Kết cục, hệ điều hành không thể boot và data quan trọng bị xoá. Rất tệ đúng không nào. Thế nên, mình sẽ giới thiệu bạn cách thứ 2 mang tính "an toàn" hơn.
Cách 2. sudo [command]: Cho phép bạn thực thi câu lệnh dưới quyền Superuser. (Khuyên dùng)
Khác với su thì sudo không yêu cầu đăng nhập mà thay vào đó, cứ mỗi lần bạn muốn thực thi một câu lệnh bằng đặc quyền của root thì bạn phải để tiền tố sudo trước đó. Điều này giúp bạn kiểm soát được mình đang xài user nào và tránh các hậu quả đáng tiếc.
Dưới đây là 2 ví dụ tải package bằng sudo và su:
Sử dụng sudo để tải package python3-pip:
Đầu tiên xem mình là user nào bằng whoami (tuỳ vào mỗi người thì Normal User sẽ có một tên khác nhau tuỳ vào bạn đặt gì vào lúc tạo).
bash (non-root)whoami _ Kết quảnormalUserSử dụng sudo cài package:
bash (non-root)sudo apt install python3-pip _ Kết quả[sudo] password for normalUserBạn chỉ cần nhập mật khẩu của User hiện tại (normalUser) là câu lệnh sẽ được thực thi.
Sử dụng su để tải package pip:
Đầu tiên xem mình là user nào bằng whoami.
bash (non-root)whoami _ Kết quảnormalUserChuyển sang Superuser bằng su:
bash (non-root)su _ Kết quảPassword:Lúc này bạn cần nhập mật khẩu của root (Đối với một số hệ điều hành, Superuser sẽ bị khoá). Sau khi nhập xong bạn sẽ thấy Terminal của bạn sẽ chuyển tiền tố $ sang # (đây cũng là một dấu hiệu nhận biết mình đang ở user thường hay root).
Kết quả#whoami rootBây giờ ta sẽ tải package, nhưng lần này sẽ không cần tiền tố sudo nữa.
bash (root)apt install python3-pip _Sau khi tải xong, hay nhớ đăng xuất nhé.
bash (root)logout _Linux Group
Trong Linux, Group (nhóm) là một tập hợp các user. Trong Linux, theo mặc định thì Normal User thường được xếp vào Default Group. Mục đính chính của Group là phân quyền của một hay nhiều tài nguyên cho các thành viên trong Group. Ta có thể thêm, bớt thành viên trong Group để phù hợp với mục đích. Có 2 loại group chính:
- Primary/ Login group (Nhóm chính/ Nhóm đăng nhập): Là nhóm được gán cho files được tạo bởi User. Thông thường, tên của nhóm chính giống với tên của người dùng. Người dùng bắt buộc phải nằm trong một nhóm chính nào đó.
- Secondary/ Supplementary group (Nhóm phụ/ nhóm bổ sung): Được sử dụng để cung cấp các đặc quyền nhất định cho một nhóm người dùng. Các User có thể là thành viên của không hoặc nhiều nhóm phụ.
Nhóm của người dùng chính được lưu trữ trong tệp /etc/passwd và các nhóm bổ sung (nếu có) sẽ được liệt kê trong tệp /etc/group.
Ví dụ: Bạn có một file helloworld.txt và 5 User (A, B, C, D, E). Bạn muốn phân quyền cho A, B, C được đọc nội dung, còn B, C, D được thay đổi nội dung. Lúc này phương pháp Group sẽ vô cùng hiệu quả. Ta sẽ cho A, B, C vào nhóm 1 còn B, C, D vào nhóm 2 sau đó thực hiện phân quyền. Nếu tương lai bạn muốn E cũng có khả năng đọc nội dung thì bạn chỉ cần thêm E vào nhóm 1 là xong. Rất tiện lợi và hiệu quả!
Read, write, execute trong phân quyền file
Trong linux, tất cả các file, tài nguyên đều có 3 loại quyền chính:
- READ (Đọc): Quyền đọc cho phép bạn mở file và xem nội dung của nó. Trong trường hợp thư mục thì bạn có thể xem các thành phần con trong nó.
- WRITE (Viết): Quyền viết hay ghi cho phép bạn thay đổi nội dung của file. Trong trường hợp thư mục thì bạn có thể thay đổi vị trí, xoá, thêm các thành phần con trong nó
- EXECUTE (Thực thi): Quyền thực thi cho phép bạn chạy file.
Lưu ý rằng, bạn có quyền viết thư mục nhưng không có nghĩa là bạn có thể thay đổi các nội dung file con của nó và ngược lại. Ví dụ bạn có quyền viết một file /abc/bbc/helloworld.txt nhưng chỉ có quyền đọc thư mục /abc/bbc/, lúc đó bạn chỉ có thể thay đổi nội dung file helloworld.txt nhưng không thể thay đổi vị trí, xoá hay đổi tên của nó được.
Xem phân quyền của một file
Xem thông tin phân quyền của một file hay thư mục bạn có thể sử dụng lệnh ls. Để biết thêm các thông số khác thì thêm -l ở phía sau, lúc này thông tin sẽ thể hiện dưới dạng long format như sau:
bash (non-root)ls -l test.txt _Ta sẽ thu được kết quả theo định dạng sau:
Kết quả-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txtTrong đó:
- Permission: Các quyền của file.
- Owner: Chủ sở hữu của file.
- Group: Nhóm mà chủ sở hữu thuộc vào.
- Date created: Ngày tạo file
Ở trong Permission sẽ là chi tiết các quyền của các loại user khác nhau:
- File Type (loại têp): Có ba loại là Tệp thông thường (-)/ Thư mục (d)/ Liên kết (i).
- User: Quyền đối với người dùng (chủ sở hữu)
- Group: Quyền đối với nhóm của chủ sở hữu
- Other: Quyền đối với những người dùng khác
Ở ví dụ trên ta có thể thấy User và Group có quyền read, write còn Other chỉ có quyền read.
Để hiểu thêm thì chúng ta cùng xem thêm một vài ví dụ:
- - rw- --- --- : File thường, User read, write.
- - rwx r-x r-x : File thường, User read,write, execute, Group read, execute, Other read,execute.
- d rw- r-x --- : Thư mục, User read, write, Group read, execute.
- i rwx r-- r-- : Link, User read,write, execute, Group read, Other read.
Các mode (chế độ) chỉnh sửa phân quyền
Để thay đổi phân quyền của một file hay một thư mục ta có thể sử dụng lệnh chmod. Dựa vào cách trình bày thì ta có thể chia thành 2 chế độ
- Symbolic Mode: Sử dụng ký tự để phân puyền.
- Numeric Mode: Sử dụng mã bát phân để phân quyền
2 mode này hoạt động khác nhau nhưng đều sử dụng chung một syntax:
bash (non-root)chmod [permission] [file_name] _SYMBOLIC MODE
Đây là một mode rất được ưa thích cho người mới sử dụng vì cách trình bày rất dễ học. Symbolic sử dụng các ký tự để quy ước loại user.:
- User (u)
- Group (g)
- Other (o)
- All (a)
Và các quyền hạn:
- Read (r)
- Write (w)
- Execute (x)
Ngoài ra ta còn có thêm các signs (biểu thị toán học) + - = để phục vụ cho mục đích tinh chỉnh theo ý muốn từng loại quyền với từng loại user khác nhau:
- (+): Thêm quyền lên đầu các quyền hiện có.
- (-): Xoá quyền khỏi các quyền hiện có.
- (=): Ghi đè lên các quyền hiện có
Bây giờ ta sẽ đi qua các ví dụ để hiểu hơn cách Symbolic mode hoạt động nhé:
Ví dụ 1: u+w,o-r
Đầu tiên sẽ là User kí hiệu là (u) thêm quyền write (+w), sau đó Other kí hiệu là (o) bị xoá quyền read (-r).
Ví dụ 2: a=rwx
All User(a) được ghi đè (=) quyền read(r), write(w), execute(x).
Thực hành: Để thực hiện thay đổi các quyền trên Linux bằng chế độ Symbolic thì ta sử sụng cú pháp sau:
bash (non-root)chmod [user_type][signs][permission] [file_name] _Ví dụ bạn muốn thay đổi quyền file helloworld.txt như ví dụ 1 (u+w,o-r : User thêm write, Other xoá read.):
bash (non-root)chmod u+w,o-r helloworld.txt _ Kết quảnormalUser@ubuntu:~/Desktop$ ls -l helloworld.txt -rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 06:05 helloworld.txt normalUser@ubuntu:~/Desktop$ chmod u+w,o-r helloworld.txt normalUser@ubuntu:~/Desktop$ ls -l helloworld.txt -rw-rw---- 1 ubuntu ubuntu 0 Nov 23 06:05 helloworld.txtNUMERIC MODE
Tiếp theo ta sẽ được tiếp xúc với một chế độ nâng cao hơn là Numeric mode. Vì sử dụng 3 chữ số bát phân thay vì ký tự như Symbolic nên chế độ này khá khó cho người mới. Tuy nhiên đây là cách khá nhanh khi chỉ sử dụng 3 chữ số để phân quyền trong khi đó Symbolic phải ghi đầy đủ ra. Nếu không có nhu cầu thêm hay xoá quyền thì mình khuyến khích các bạn sử dụng chế độ này, tuy khó nhưng sử dụng nhiều bạn sẽ quen mà thôi.
Đây là bảng thể hiện các phân quyền trên Linux trong chế độ Numeric:
Hoặc đơn giản hơn bạn có thể nhớ như sau:
- Read (r) = 4
- Write (w)=2
- Execute (x)=1
Ta thử nhé Read + Wite = 6, Read + Write + Execute = 4 + 2 + 1=7,... kết quả thu được sẽ giống như trên bảng đúng không nào. Việc phân quyền trên Linux cho các loại user sẽ được thể hiện dưới dạng 3 chữ số XXX thứ tự là User, Group, Other. Bây giờ mình sẽ cho các bạn một số ví dụ:
Ví dụ 1: Owner read, write, execute, group read
- User: Read + write + execute = 4 + 2 + 1 = 7
- Group: Read = 4
- Other: =0
- Ta thu được: 740
Ví dụ 2: Owner read, write, group read, execute, other read
- User: Read + write = 4 + 2 = 6
- Group: Read + execute = 4 + 1 = 5
- Other: Read = 4
- Ta thu được: 654
Thực hành: Để thực hiện thay đổi các quyền bằng chế độ Numeric thì ta sử sụng syntax sau:
bash (non-root)chmod [first digit][second digit][third digit] [file_name] _Bây giờ giả sử bạn muốn thay đổi quyền file helloworld.txt như Ví dụ 1 (Owner read, write, execute, group read), bạn nhập như sau:
bash (non-root)chmod 740 helloworld.txt _ Kết quảnormalUser@ubuntu:~/Desktop$ ls -l helloworld.txt -rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 06:05 helloworld.txt normalUser@ubuntu:~/Desktop$ chmod 740 helloworld.txt normalUser@ubuntu:~/Desktop$ ls -l helloworld.txt -rwxr----- 1 ubuntu ubuntu 0 Nov 23 06:05 helloworld.txtSpecial Permission
Ngoài 3 permission cơ bản là read, write, execute thì file/ thư mực còn có thêm 3 Special Permission (Quyền đặc biệt) khác đó là: SUID, SGID và sticky bits
SUID (Set user id):
- Sử dụng trên các file (thường là các file thực thi - executable files) .
- Cung cấp các đặc quyền của Owner cho User hiện tại khi thực thi file.
- Kí hiệu của SUID là s theo Symbolic và số 4 theo Numeric.
Ví dụ: Một file có chủ sở hữu là root và được set SUID bit, lúc này nếu một user khác thực thi file này thì nó luôn được chạy với đặc quyền root. Cụ thể dưới đây là file passwd sở hữu bởi root, khi thực thi lệnh ls -l, bạn có thể dễ dàng thấy kí tự s , dấu hiệu của SUID.
Kết quảubuntu@ubuntu:~/Desktop$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 68208 Jul 14 15:08 /usr/bin/passwdCó 2 cách để gán SUID vào file:
- Sybolic mode: chmod u+s [file name]
- Numeric mode: chmod 4555 [file name] ( thêm 4 vào trước permissons)
Nếu file chưa có quyền thực thi (executing file as program), SUID sẽ là chữ S (S in hoa). Để thay đổi S thành s (s in thường) bạn phải cấp quyền thực thi cho file bằng lệnh dưới đây: chmod u+x [file name].
SGID (Set group id):
Theo như tên gọi thì quyền này giống như SUID chỉ khác nó cung cấp các đặc quyền của Group Owner.
Kí hiệu của SUID là s theo Symbolic và số 2 theo Numeric.
Ví dụ: Một file có nhóm chủ sở hữu là STAFF và được set SGID bit, lúc này nếu một user khác thực thi file này thì nó luôn được chạy với đặc quyền của group STAFF.
Có 2 cách để gán SGID vào file:
- Sybolic mode: chmod g+s [file name]
- Numeric mode: chmod 2555 [file name] ( thêm 2 vào trước permissons)
Sticky bit:
- Chỉ cho phép Owner và root thay đổi tên, xoá file/ thư mục.
- Sticky bit thường được sử dụng trong các file/ thư mục chia sẽ.
- Kí hiệu của Sticky bit là t theo Symbolic và số 1 theo Numeric.
Ví dụ 1: Thông thường trong hệ thống có một thư mục /tmp.
Kết quảubuntu@ubuntu:~$ ls -ld /tmp/ drwxrwxrwt 20 root root 4096 Nov 27 19:10 /tmp/Theo như output phía trên, bạn sẽ thấy kí hiệu t của Stickybit ở cuối cùng của phần other. Tiếp theo, ở cột 3 chính là Owner của thư mục là root. Điều đó có nghĩa bạn chỉ có thể đổi tên, xoá file khi và chỉ khi bạn đang trong trạng thái Superuser.
Ví dụ 2: Một file test.txt sỡ hữu bởi ubuntu và chia sẽ cho user normal_user. Sau khi set Sticky bit ta được:
Kết quảubuntu@ubuntu:~/Desktop$ chmod o+t test.txt ubuntu@ubuntu:~/Desktop$ ls -l test.txt -rwxrwxrwt 1 ubuntu ubuntu 4096 Nov 27 19:10 test.txtBây giờ normal_user cố gắng xoá file sẽ bị chặn lại (Permission denied). Mặc dù other có toàn bộ quyền write.
Kết quảnormal_user@ubuntu:/home/ubuntu/Desktop$ rm -f test.txt rm: cannot remove 'test.txt': Permission deniedCó 2 cách để gán Sticky bit vào file:
- Sybolic mode: chmod o+t [file name]
- Numeric mode: chmod 1555 [file name] ( thêm 1 vào trước permissons)
Thông tin: Để xoá special permission bạn thay đổi dấu + thành dấu -
Tổng kết
Phân quyền trên Linux là một kiến thức căn bản mà ai làm việc trên Linux cũng nên biết. Qua bài này mình mong các bạn sẽ hiểu thêm các quyền của file/thư mục cũng như biết cách 2 chế độ Numeric và Symboric hoạt động. Sử dụng User root khá đơn giản và mạnh mẽ tuy nhiên nó cũng tiềm tàng nhiều nguy cơ nên các bạn hãy lưu ý nhé. Hẹn các bạn vào các bài sau.
Từ khóa » Trong Linux Có Bao Nhiêu Loại User Hãy Giới Thiệu 1 Loại User Trong Các Loại Trên
-
Phân Quyền Trong Linux - Viblo
-
Phân Quyền Trong Linux - Viblo
-
Phân Quyền Trong Linux: Bài 1- Quản Lý User, Group Và Phân Quyền ...
-
Quản Lý Người Dùng Trong Unix/Linux
-
[PDF] BÀI 2. NGƯỜI DÙNG – PHÂN QUYỀN VÀ QUẢN LÝ FILE LƯU Ý
-
[PDF] QUẢN TRỊ NGƯỜI DÙNG LINUX (UBUNTU) - Estih
-
Phân Quyền Tập Tin Trong Linux Image Phân Quyền Tập Tin ...
-
Tài Liệu Hướng Dẫn Quản Lý User, Phân Quyền Trong Ubuntu (linux)
-
Phân Quyền Tập Tin Và Thư Mục Trên Linux (CHMOD) - ThachPham
-
Linux Là Gì? Tổng Hợp Mọi Kiến Thức Về Linux - Vietnix
-
Tổng Hợp Các Câu Lệnh Cơ Bản Trong Linux Toàn Tập - Vietnix
-
Dòng Lệnh Liệt Kê Danh Sách Các Tập Tin Và Thư Mục Trong Linux
-
Cách Tạo Người Dùng Trong Linux (lệnh Useradd) - Android 2022
-
Hệ điều Hành – Wikipedia Tiếng Việt