Phân quyền user trong linux

Hiện nay, Linux đang ngày càng trở nên phổ biến. Kể từ khi Linus Torvalds công khai mã nguồn của nhân Linux đến nay, càng ngày càng có nhiều lập trình viên trên thế giới quan tâm đến dòng hệ điều hành này. Nhiều công ty đã sử dụng các distro của Linux làm hệ điều hành mặc định cho nhân viên sử dụng. Có thể kể đến các phiên bản đang phổ biến hiện nay như Ubuntu, Fedora, OpenSUSE (cho máy cá nhân), CentOS, RedHat, Debian (cho doanh nghiệp)… Một trong những ưu điểm của Linux là tính năng phân quyền sử dụng trên file. Một tính năng vô cùng mạnh mẽ nhưng cũng rất nguy hiểm nếu chúng ta không hiểu về nó.

Tại sao cần có phân quyền

Ngày này hầu hết các hệ điều hành phổ biến đều hỗ trợ nhiều người cùng sử dụng đồng thời. Có thể sẽ có người thắc mắc rằng tại sao lại cần hỗ trợ tính năng này khi máy tính của họ chỉ có một người sử dụng. Lý do là vì một hệ điều hành được tạo ra với mục đích càng có nhiều người sử dụng càng tốt. Do vậy có thể một người nào đó không cần hệ điều hành phải hỗ trợ nhiều người sử dụng nhưng những người khác lại cần đến. Tính năng phân quyền được tạo ra là để hỗ trợ cho việc sử dụng đồng thời của hệ điều hành.

Hệ thống file trong Linux

Có một câu nói phổ biến là:

1

Trong Linux mi th đều là file

Khái niệm file trong Linux khá mềm dẻo, kể cả thư mục hay thiết bị cũng được coi như file đặc biệt. Và vì vậy, hệ thống phân quyền sẽ hoạt động trên cả thư mục, thiết bị ….

Nhóm phân quyền

Trong Linux có 3 nhóm phân quyền chính, không bao nhau:

  • Owner: chỉ cấp quyền cho chủ sở hữu của file.
  • Group: chỉ cấp quyền cho nhóm sở hữu của file.
  • Other: cấp quyền cho những người dùng và nhóm không thuộc 2 nhóm trên.

Tuy nhiên vẫn có 1 ngoại lệ, đó là người dùng root (siêu người dùng). Người dùng này có mọi quyền hạn trên mọi file trong hệ thống, không bị ràng buộc bởi bất cứ sự phân quyền nào. Như mình đã nói trong phần mở đầu, hệ thống phân quyền sẽ rất nguy hiểm nếu bạn không hiểu về nó. VD câu lệnh sau sẽ xóa tất cả file trên hệ thống nếu người thực thi là root

Phân quyền user trong linux

1

rm -rf /

Do vậy với bất cứ một tác vụ gì phải dùng tới quyền hạn của người dùng root ta nên chắc chắn sẽ không gây hại cho hệ thống thì mới nên sử dụng, hoặc tìm một phương án thay thế mà không cần tới quyền hạn nguy hiểm này.

Loại phân quyền

Với một file, có 3 loại phân quyền cơ bản như trong bảng sau:

Tên quyềnKý hiệuDạng sốMô tảReadr4Quyền đọc fileWritew2Quyền ghi fileExecutee1Quyền thực thi file

Ngoài ra có một vài phân quyền đặc biệt như sau:

Tên quyềnKý hiệuDạng sốMô tảSetuid/Setguids1Nếu file được thực thi, người thực thi sẽ là chủ sở hữuSticky bitt1Chỉ chủ sở hữu mới được xóa hoặc thay đổi tên file kể cả khi Other có toàn quyền với file đóCách xem phân quyền của một file

Trong Linux, cách đơn giản nhất để xem phân quyền của một file là sử dụng lệnh ls -l Output của câu lệnh trên sẽ có dạng như sau: -rwxr-x-r-x 1 user group

  • Kí tự - đầu tiên là một cờ đặc biệt để chỉ loại file, - với file thông thường, d với thư mục, c với thiết bị, l với liên kết (liên kết tới một file khác).
  • 3 kí tự rwx đầu tiên là quyền hạn của Owner, ở đây Owner sẽ có mọi quyền với file
  • 3 kí tự r-x ở giữa là quyền hạn của Group, ở đây Group sẽ có quyền đọc và quyền dùng lệnh root0
  • 3 kí tự r-x cuối cùng là quyền hạn của Other, tương tự như Group ở trên sẽ có quyền đọc và dùng lệnh root0
  • Số nguyên đi sau quyền hạn để chỉ số lượng liên kết tới file, ở đây root2 có nghĩa là file này không có liên kết tượng trưng mà chỉ có một liên kết cứng duy nhất trỏ tới chính nó.
  • Cuối cùng là 2 thông tin nói về chủ sở hữu và nhóm sở hữu, ở đây là người dùng root3 và nhóm root4
Lời kết

Trên đây là sơ lược về vấn đề phân quyền cho file trong Linux, ở bài viết tiếp theo mình sẽ trình bày về các phương pháp phân quyền và những lưu ý phân quyền hiệu quả. Đây là lần đầu mình viết bài nên khó tránh khỏi những sơ sót. Hy vọng mọi người có thể góp ý để mình hoàn thiện bài viết hơn. Xin cảm ơn mọi người đã đọc bài viết.

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ỉ

[sudo] password for normalUser
3 còn mật khẩu thì sẽ được hash (mã băm - mã hoá một chiều) và lưu tại
[sudo] password for normalUser
4

Dựa vào quyền hạn truy cập thì User được chia theo 2 loại chính:

  1. 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.
  2. 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.

[sudo] password for normalUser
5: 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

[sudo] password for normalUser
6. Đó cũng chính là lý do
[sudo] password for normalUser
7 í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] password for normalUser
8: 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

[sudo] password for normalUser
7 thì
-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
0 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ố
-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
0 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

-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
0 và
[sudo] password for normalUser
7:

Sử dụng sudo để tải package

-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
4:

Đầu tiên xem mình là user nào bằng

-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
5 (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).

Sử dụng

-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
0 cài package:

sudo apt install python3-pip

[sudo] password for normalUser

Bạn chỉ cần nhập mật khẩu của User hiện tại (

-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
7) là câu lệnh sẽ được thực thi.

Sử dụng su để tải package

-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
8:

Đầu tiên xem mình là user nào bằng

-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
5.

Chuyển sang Superuser bằng

[sudo] password for normalUser
7:

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ố

chmod [permission] [file_name]
1 sang
chmod [permission] [file_name]
2 (đây cũng là một dấu hiệu nhận biết mình đang ở user thường hay root).

Bây giờ ta sẽ tải package, nhưng lần này sẽ không cần tiền tố

-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
0 nữa.

Sau khi tải xong, hay nhớ đăng xuất nhé.

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:

  1. 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 đó.
  2. 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

[sudo] password for normalUser
3 và các nhóm bổ sung (nếu có) sẽ được liệt kê trong tệp
chmod [permission] [file_name]
5.

Ví dụ: Bạn có một file

chmod [permission] [file_name]
6 và 5 User (
chmod [permission] [file_name]
7). Bạn muốn phân quyền cho
chmod [permission] [file_name]
8 được đọc nội dung, còn
chmod [permission] [file_name]
9 đượ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
chmod [permission] [file_name]
8 vào nhóm 1 còn
chmod [permission] [file_name]
9 vào nhóm 2 sau đó thực hiện phân quyền. Nếu tương lai bạn muốn
chmod [user_type][signs][permission] [file_name]
2 cũng có khả năng đọc nội dung thì bạn chỉ cần thêm
chmod [user_type][signs][permission] [file_name]
2 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.

Phân quyền user trong linux

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

chmod [user_type][signs][permission] [file_name]
4 nhưng chỉ có quyền đọc thư mục
chmod [user_type][signs][permission] [file_name]
5, lúc đó bạn chỉ có thể thay đổi nội dung file
chmod [permission] [file_name]
6 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

chmod [user_type][signs][permission] [file_name]
7. Để biết thêm các thông số khác thì thêm
chmod [user_type][signs][permission] [file_name]
8 ở phía sau, lúc này thông tin sẽ thể hiện dưới dạng long format như sau:

Ta sẽ thu được kết quả theo định dạng sau:

-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt

Phân quyền user trong linux
Trong đó:

  • 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:

Phân quyền user trong linux

  • File Type (loại têp): Có ba loại là
    chmod [user_type][signs][permission] [file_name]
    
    9
  • 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

chmod u+w,o-r helloworld.txt
0 còn Other chỉ có quyền
chmod u+w,o-r helloworld.txt
1.

Để hiểu thêm thì chúng ta cùng xem thêm một vài ví dụ:

  • - rw- --- --- : File thường, User
    chmod u+w,o-r helloworld.txt
    
    0.
  • - rwx r-x r-x : File thường, User
    chmod u+w,o-r helloworld.txt
    
    3, Group
    chmod u+w,o-r helloworld.txt
    
    4, Other
    chmod u+w,o-r helloworld.txt
    
    5.
  • d rw- r-x --- : Thư mục, User
    chmod u+w,o-r helloworld.txt
    
    0, Group
    chmod u+w,o-r helloworld.txt
    
    4.
  • i rwx r-- r-- : Link, User
    chmod u+w,o-r helloworld.txt
    
    3, Group
    chmod u+w,o-r helloworld.txt
    
    1, Other
    chmod u+w,o-r helloworld.txt
    
    1.

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

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.txt
1. Dựa vào cách trình bày thì ta có thể chia thành 2 chế độ

  1. Symbolic Mode: Sử dụng ký tự để phân puyền.
  2. 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:

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)

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.txt
2 để 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:

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.txt
3

Đầu tiên sẽ là User kí hiệu là (

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.txt
4) thêm quyền write (
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.txt
5), sau đó Other kí hiệu là (
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.txt
6) bị xoá quyền read (
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.txt
7).

Ví dụ 2:

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.txt
8

All User(

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.txt
9) được ghi đè (
chmod [first digit][second digit][third digit] [file_name]
0) quyền read(
chmod [first digit][second digit][third digit] [file_name]
1), write(
chmod [first digit][second digit][third digit] [file_name]
2), execute(
chmod [first digit][second digit][third digit] [file_name]
3).

Phân quyền user trong linux

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:

chmod [user_type][signs][permission] [file_name]

Ví dụ bạn muốn thay đổi quyền file

chmod [permission] [file_name]
6 như ví dụ 1 (u+w,o-r : User thêm
chmod [first digit][second digit][third digit] [file_name]
5, Other xoá
chmod u+w,o-r helloworld.txt
1.):

chmod u+w,o-r helloworld.txt

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.txt

NUMERIC 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:

Phân quyền user trong linux

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é

chmod [first digit][second digit][third digit] [file_name]
7,
chmod [first digit][second digit][third digit] [file_name]
8,... kết quả thu được sẽ giống như trên bảng đúng không nào.
Phân quyền user trong linux
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ố
chmod [first digit][second digit][third digit] [file_name]
9 thứ tự là
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.txt
0. Bây giờ mình sẽ cho các bạn một số ví dụ:

Ví dụ 1: Owner

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.txt
1, group
chmod u+w,o-r helloworld.txt
1

  • User: Read + write + execute = 4 + 2 + 1 = 7
  • Group: Read = 4
  • Other: =0
  • Ta thu được: 740

Ví dụ 2: Owner

chmod u+w,o-r helloworld.txt
0, group
chmod u+w,o-r helloworld.txt
4, other
chmod u+w,o-r helloworld.txt
1

  • 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:

chmod [first digit][second digit][third digit] [file_name]

Bây giờ giả sử bạn muốn thay đổi quyền file

chmod [permission] [file_name]
6 như Ví dụ 1 (Owner
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.txt
1, group
chmod u+w,o-r helloworld.txt
1), bạn nhập như sau:

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.txt

Special 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à
    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.txt
    
    9 theo Symbolic và số
    ubuntu@ubuntu:~/Desktop$ ls -l /usr/bin/passwd
    -rwsr-xr-x 1 root root 68208 Jul 14 15:08 /usr/bin/passwd
    
    0 theo Numeric.

Phân quyền user trong linux

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

ubuntu@ubuntu:~/Desktop$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 Jul 14 15:08 /usr/bin/passwd
1 sở hữu bởi root, khi thực thi lệnh
ubuntu@ubuntu:~/Desktop$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 Jul 14 15:08 /usr/bin/passwd
2, bạn có thể dễ dàng thấy kí tự
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.txt
9 , dấu hiệu của SUID.

ubuntu@ubuntu:~/Desktop$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 Jul 14 15:08 /usr/bin/passwd

Có 2 cách để gán SUID vào file:

  • Sybolic mode:
    ubuntu@ubuntu:~/Desktop$ ls -l /usr/bin/passwd
    -rwsr-xr-x 1 root root 68208 Jul 14 15:08 /usr/bin/passwd
    
    4
  • Numeric mode:
    ubuntu@ubuntu:~/Desktop$ ls -l /usr/bin/passwd
    -rwsr-xr-x 1 root root 68208 Jul 14 15:08 /usr/bin/passwd
    
    5 ( 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:

ubuntu@ubuntu:~/Desktop$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 Jul 14 15:08 /usr/bin/passwd
6.

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à

    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.txt
    
    9 theo Symbolic và số
    ubuntu@ubuntu:~/Desktop$ ls -l /usr/bin/passwd
    -rwsr-xr-x 1 root root 68208 Jul 14 15:08 /usr/bin/passwd
    
    8 theo Numeric.

Phân quyền user trong linux
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:
    ubuntu@ubuntu:~/Desktop$ ls -l /usr/bin/passwd
    -rwsr-xr-x 1 root root 68208 Jul 14 15:08 /usr/bin/passwd
    
    9
  • Numeric mode:
    [sudo] password for normalUser
    
    00 ( 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à
    [sudo] password for normalUser
    
    01 theo Symbolic và số
    [sudo] password for normalUser
    
    02 theo Numeric.

Phân quyền user trong linux
Ví dụ 1: Thông thường trong hệ thống có một thư mục
[sudo] password for normalUser
03.

[sudo] password for normalUser
0

Theo như output phía trên, bạn sẽ thấy kí hiệu

[sudo] password for normalUser
01 của Stickybit ở cuối cùng của phần
[sudo] password for normalUser
05. Tiếp theo, ở cột 3 chính là Owner của thư mục là
[sudo] password for normalUser
06. Đ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

[sudo] password for normalUser
07 sỡ hữu bởi
[sudo] password for normalUser
08 và chia sẽ cho user
[sudo] password for normalUser
09. Sau khi set Sticky bit ta được:

[sudo] password for normalUser
1

Bây giờ

[sudo] password for normalUser
09 cố gắng xoá file sẽ bị chặn lại (
[sudo] password for normalUser
11). Mặc dù
[sudo] password for normalUser
05 có toàn bộ quyền write.

[sudo] password for normalUser
2

Có 2 cách để gán Sticky bit vào file:

  • Sybolic mode:
    [sudo] password for normalUser
    
    13
  • Numeric mode:
    [sudo] password for normalUser
    
    14 ( 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.