Lỗi quyền bị từ chối trong linux

Ngày trước khi mình build code bằng sublime, nhấn nút build quá nhiều lần, dẫn đến lỗi

[sudo] password for normalUser
16. Kinh nghiệm của mình là xóa tập tin. exe đi, và nhấn build từ thôi. You set Full Control for file. exe thì vẫn lỗi, save file. c ở chỗ khác rồi build lại vẫn có thể gặp lại lỗi này

Unknown Codeblocks có khó ở thế nào không

Cách chữa tốt nhất, là build file bằng cmd/powershell

gcc file.c -o file.exe && file.exe

Chắc chắn bạn đã biết trong một phần mềm quản lý nhân viên, mỗi nhóm người hoặc một người sẽ có 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 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 cho nhiều người dùng và ta có thể sử dụng phân quyền để đặt ra các giới hạn định mức tốt nhất 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é

Người sử dụng

Đầu tiên, Người dùng [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 Người dùng sẽ chứa một mã UID [Số nhận dạng duy nhất] hoặc mã xác định danh tính duy nhất, từ đó hệ thống có thể phân biệt được những người dùng với nhau

Tất cả các thông tin về Người dùng trong hệ thống đều được lưu tại địa chỉ

[sudo] password for normalUser
3 còn mật khẩu thì sẽ được băm [mã băm - mã hóa 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, User được chia theo 2 loại chính

  1. Siêu người dùng/root/quản trị viên. Loại Người dùng có quyền hạn cao nhất. Có khả năng truy cập vào mọi tệp có trong hệ thống
  2. người dùng bình thường. Là loại Người dùng thông thường, bị giới hạn một số quyền [Ta có thể tùy ý chọn các quyền mà người dùng này có thể làm]

siêu người dùng

Theo như ở trên thì bạn đã biết Superuser [hay còn được gọi là root] là một hệ thống người dùng. Ta sử dụng Superuser khi muốn sử dụng các đặc quyền mà chỉ Superuser được làm còn User thường thì không

Information. UID của superuser/ root/ quản trị viên 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ể thực hiện

  • Đặc quyền thay đổi read/write/execute
  • Tạo, tải tệp hoặc phần mềm
  • Sửa đổi tập tin và cài đặt
  • Xoá thông tin Người dùng và dữ liệu

Chú thích. Bạn phải cẩn thận khi sử dụng Superuser vì lúc này bạn có thể thay đổi ở mức 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

To register with Superuser [người dùng root] 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 đề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 làm
[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 lệnh xóa hệ thống tệp. Kết cục, hệ điều hành không thể khởi động và dữ liệu quan trọng bị xóa. Missing error. 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 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 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 sử dụng người dùng nào và tránh những hậu quả đáng tiếc

Dưới đây là 2 ví dụ tải gói 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 gói

-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 từng người thì Normal User sẽ có tên khác nhau tùy bạn đặt gì vào lúc tạo]

Sử dụng gói cài đặt

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

[sudo] password for normalUser
5

[sudo] password for normalUser

Bạn chỉ cần nhập mật khẩu của Người dùng 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 gói

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

Đầu tiên xem mình là người dùng 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ị khóa]. Sau khi nhập xong, bạn sẽ thấy Terminal của bạn sẽ chuyển tiền tố

[sudo] password for normalUser
11 sang
[sudo] password for normalUser
12 [đây cũng là một dấu hiệu nhận biết mình đang ở người dùng thường hay root]

Bây giờ ta sẽ tải gói, 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é

Nhóm Linux

Trong Linux, Group [group] is a user files. Trong Linux, theo mặc định thì Normal User thường được xếp vào Default Group. Mục chính của Group là phân quyền của một hoặc 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 Nhóm để phù hợp với mục đích. Có 2 loại nhóm chính

  1. Nhóm chính/ Đăng nhập [Nhóm chính/ Nhóm đăng nhập]. Là nhóm được gán cho các tệp được tạo bởi Người dùng. 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 bất kỳ nhóm chính nào
  2. Nhóm phụ/ bổ sung [Nhóm phụ/ nhóm bổ sung]. Có thể sử dụng để cung cấp các đặc quyền xác định tốt nhất cho một nhóm người dùng. Người dùng 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
[sudo] password for normalUser
15

Ví dụ. You have a file

[sudo] password for normalUser
16 and 5 User [
[sudo] password for normalUser
17]. Bạn muốn phân quyền cho
[sudo] password for normalUser
18 được đọc nội dung, còn
[sudo] password for normalUser
19 được thay đổi nội dung. Lúc này nhóm phương pháp sẽ vô hiệu hóa. Ta sẽ cho
[sudo] password for normalUser
18 vào nhóm 1 còn
[sudo] password for normalUser
19 vào nhóm 2 sau đó thực hiện phân quyền. Nếu tương lai bạn muốn
[sudo] password for normalUser
22 cũng như không có khả năng đọc nội dung thì bạn chỉ cần thêm
[sudo] password for normalUser
22 vào nhóm 1 là xong. It tiện lợi và hiệu quả

Đọc, ghi, thực thi trong tệp phân quyền

Trong linux, tất cả các tệp, tài nguyên đều có 3 loại quyền chính

  • READ [Đọc]. Quyền đọc cho phép bạn mở tệp và xem nội dung của nó. Trong trường hợp thư mục, bạn có thể xem các thành phần con trong đó
  • VIẾT [Viết]. Quyền viết hoặc ghi cho phép bạn thay đổi nội dung của tệp. Trong trường hợp thư mục, bạn có thể thay đổi vị trí, xóa, thêm các thành phần con trong đó
  • EXECUTE [Thực thi]. Quyền thực thi cho phép bạn chạy tệp

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 nội dung tệp con của nó và đảo ngược. Ví dụ bạn có quyền viết một tệp

[sudo] password for normalUser
24 nhưng chỉ có quyền đọc thư mục
[sudo] password for normalUser
25, lúc đó bạn chỉ có thể thay đổi nội dung của tệp
[sudo] password for normalUser
16 nhưng không thể thay đổi vị trí, xóa hay đổi tên của nó được.

Xem phân quyền của một tập tin

Xem thông tin phân quyền của một tệp hoặc thư mục mà bạn có thể sử dụng lệnh

[sudo] password for normalUser
27. Để biết thêm các thông số khác, hãy thêm
[sudo] password for normalUser
28 ở phía sau, lúc này thông tin sẽ có thể hiển thị dưới dạng định dạng dài như sau

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

________số 8

in which

  • Sự cho phép. Quyền của tập tin
  • Người sở hữu. Chủ sở hữu của tập tin
  • Nhóm. Nhóm mà chủ sở hữu thuộc quyền sở hữu
  • Ngày tạo. Ngày tạo tập tin

At in Permission will be chi tiết các quyền của các loại người dùng khác nhau.

  • Loại tệp [types type]. Có ba loại là
    [sudo] password for normalUser
    
    29
  • Người sử dụng. Quyền đối với người dùng [sở hữu]
  • Nhóm. Quyền đối với nhóm của chủ sở hữu
  • Khác. 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

[sudo] password for normalUser
10 còn Other chỉ có quyền
[sudo] password for normalUser
11

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

  • - rw- --- ---. Tệp thông thường, Người dùng
    [sudo] password for normalUser
    
    10
  • - rwx r-x r-x. Tệp thông thường, Người dùng
    [sudo] password for normalUser
    
    13, Nhóm
    [sudo] password for normalUser
    
    14, Khác
    [sudo] password for normalUser
    
    15
  • d rw- r-x ---. Thư mục, Người dùng
    [sudo] password for normalUser
    
    10, Nhóm
    [sudo] password for normalUser
    
    14
  • tôi rwx r-- r--. Liên kết, Người dùng
    [sudo] password for normalUser
    
    13, Nhóm
    [sudo] password for normalUser
    
    11, Khác
    [sudo] password for normalUser
    
    11

Các chế độ [mode] chỉnh sửa phân quyền

Để thay đổi phân quyền của một tệp hoặc một thư mục, ta có thể sử dụng lệnh

[sudo] password for normalUser
21. dựa vào cách trình bày, ta có thể chia thành 2 chế độ

  1. Chế độ tượng trưng. Sử dụng các ký tự để phân quyền
  2. Chế độ số. Sử dụng mã bát phân để phân quyền

2 chế độ này hoạt động khác nhau nhưng tất cả đều sử dụng chung một cú pháp

[sudo] password for normalUser
1

CHẾ ĐỘ BIỂU TƯỢNG

Đây là một chế độ rất được người mới sử dụng yêu thích vì cách trình bày rất dễ học. Sử dụng các ký tự tượng trưng để quy định loại người dùng

  • Người dùng [u]
  • Nhóm [g]
  • Khác [o]
  • Tất cả [a]

And permissions

  • Đọc [r]
  • Viết [w]
  • Thực hiện [x]

Ngoài ra ta còn có thêm các dấu hiệu [biểu thị toán học]

[sudo] password for normalUser
22 để phục vụ cho mục đích tinh chỉnh theo ý muốn từng loại quyền đối với từng loại người dùng khác nhau

  • [+]. Thêm quyền vào đầu các quyền hiện có
  • [-]. Xoá quyền từ 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ụ để dễ hiểu hơn về cách kích hoạt chế độ Symbolic nhé

Ví dụ 1.

[sudo] password for normalUser
23

Đầu tiên sẽ là Người dùng ký hiệu là [

[sudo] password for normalUser
24] thêm quyền ghi [
[sudo] password for normalUser
25], sau đó Người khác ký hiệu là [
[sudo] password for normalUser
26] bị xóa quyền đọc [
[sudo] password for normalUser
27]

Ví dụ 2.

[sudo] password for normalUser
28

Tất cả Người dùng[

[sudo] password for normalUser
29] được ghi đè [
[sudo] password for normalUser
20] quyền đọc[
[sudo] password for normalUser
21], viết[
[sudo] password for normalUser
22], thực hiện[
[sudo] password for normalUser
23]

Thực hành. Để thực hiện thay đổi quyền trên Linux bằng chế độ Symbolic, ta sử dụng cú pháp cú pháp sau

[sudo] password for normalUser
2

Ví dụ bạn muốn thay đổi quyền tập tin

[sudo] password for normalUser
16 như ví dụ 1 [u+w,o-r. Người dùng thêm
[sudo] password for normalUser
25, xóa khác
[sudo] password for normalUser
11. ]

[sudo] password for normalUser
1

[sudo] password for normalUser
2

CHẾ ĐỘ SỐ

Tiếp theo ta sẽ được tiếp xúc với một chế độ nâng cao hơn là Chế độ số. Vì sử dụng 3 chữ số bát phân thay vì các ký tự như Symbolic nên chế độ này hơi khó đối với 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 bổ sung hay xóa 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ẽ từ bỏ mà thôi

Đây là bảng có thể hiện các phân quyền trên Linux ở chế độ Numeric

Hoặc đơn giản hơn bạn có thể nhớ như sau

  • Đọc [r] = 4
  • Viết [w]=2
  • Thực hiện [x]=1

Ta thử nhé

[sudo] password for normalUser
27,
[sudo] password for normalUser
28,. kết quả thu được sẽ giống như trên bảng không đúng.
Phân quyền trên Linux cho các loại người dùng sẽ được thể hiện dưới dạng 3 chữ số
[sudo] password for normalUser
29 thứ tự là
[sudo] password for normalUser
50. Bây giờ mình sẽ cho các bạn một số ví dụ.

Ví dụ 1. Chủ sở hữu

[sudo] password for normalUser
51, nhóm
[sudo] password for normalUser
11

  • Người sử dụng. Đọc + ghi + thực hiện = 4 + 2 + 1 = 7
  • Nhóm. Đọc = 4
  • Khác. =0
  • Ta thu được. 740

Ví dụ 2. Chủ sở hữu

[sudo] password for normalUser
10, nhóm
[sudo] password for normalUser
14,
[sudo] password for normalUser
11 khác

  • Người sử dụng. Đọc + viết = 4 + 2 = 6
  • Nhóm. Đọc + thực hiện = 4 + 1 = 5
  • Khác. Đọc = 4
  • Ta thu được. 654

Thực hành. Để thực hiện thay đổi quyền bằng chế độ Numeric, ta sử dụng cú pháp cú pháp sau

[sudo] password for normalUser
2

Bây giờ giả sử bạn muốn thay đổi quyền tập tin

[sudo] password for normalUser
16 như Ví dụ 1 [Chủ sở hữu
[sudo] password for normalUser
51, nhóm
[sudo] password for normalUser
11], bạn nhập như sau

[sudo] password for normalUser
5

Sự cho phép đặc biệt

Ngoài 3 quyền cơ bản là đọc, viết, thực thi thì file/thư mực còn có thêm 3 Quyền đặc biệt [Quyền đặc biệt] khác đó là. SUID, SGID và bit dính

SUID [Đặt id người dùng]

  • Use on files [thường là các tập tin thực thi - các tập tin thực thi]
  • Cung cấp các đặc quyền của Chủ sở hữu cho Người dùng hiện tại khi thực thi tệp
  • Kí hiệu của SUID là
    [sudo] password for normalUser
    
    59 theo Symbolic và số
    -rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
    
    70 theo Numeric

Ví dụ. Một tệp có chủ sở hữu là root và được đặt SUID bit, lúc này nếu người dùng khác thực thi tệp này thì nó luôn được chạy với quyền root đặc biệt. Các cụ dưới đây là tệp

-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
71 do root sở hữu, khi thực thi lệnh
-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
72, bạn có thể dễ dàng tìm thấy ký tự
[sudo] password for normalUser
59 , dấu hiệu của SUID

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

Có 2 cách để gán SUID vào tệp

  • chế độ tượng trưng.
    -rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
    
    74
  • chế độ số. ________ 875 [ thêm 4 vào trước quyền]

Nếu file chưa có quyền thực thi [file thực thi dưới dạng chương trình], SUID sẽ là chữ S [S in hoa]. To change S to s [s in normal], bạn phải cấp quyền thực thi cho tệp bằng lệnh dưới đây.

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

SGID [Đặt id nhóm]

  • Theo như tên gọi thì quyền này giống như SUID chỉ khác là nó cung cấp các đặc quyền của Chủ sở hữu nhóm

  • Kí hiệu của SUID là

    [sudo] password for normalUser
    
    59 theo Symbolic và số
    -rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
    
    78 theo Numeric

Ví dụ. Một tệp có nhóm chủ sở hữu là NHÂN VIÊN và được đặt bit SGID, lúc này nếu một người dùng khác thực thi tệp này thì nó luôn được chạy với đặc quyền của nhóm NHÂN VIÊN

Có 2 cách để gán SGID vào tệp

  • chế độ tượng trưng.
    -rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
    
    79
  • chế độ số. _______ 100 [ add 2 to before permissions]

Chút dính

  • Chỉ cho phép Chủ sở hữu và root thay đổi tên, xóa tệp/thư mục
  • Sticky bit thường được sử dụng trong các tập tin/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

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ư đầu ra 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à Chủ sở hữu của thư mục là
[sudo] password for normalUser
06. Điều đó có nghĩa là bạn chỉ có thể đổi tên, xóa tệp khi và chỉ khi bạn đang ở trạng thái Superuser

Ví dụ 2. Một tập tin

[sudo] password for normalUser
07 sở hữu bởi
[sudo] password for normalUser
08 và chia sẽ cho người dùng
[sudo] password for normalUser
09. Sau khi thiết lập Sticky bit ta được

[sudo] password for normalUser
1

Bây giờ

[sudo] password for normalUser
09 cố gắng xóa tập tin 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 ghi

[sudo] password for normalUser
2

Có 2 cách để gán Sticky bit vào tập tin

  • chế độ tượng trưng.
    [sudo] password for normalUser
    
    13
  • chế độ số. ________ 114 [ add 1 to before permissions]

Information. To delete special permission you change the 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 về phân quyền của file/thư mục cũng như biết cách 2 chế độ hoạt động Numeric và Symboric. Sử dụng User root khá đơn giản và mạnh mẽ tuy nhiên nó cũng ẩn tàng nhiều nguy cơ nên các bạn lưu ý nhé. If you to the following cards

Chủ Đề