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àyUnknown 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
4Dựa vào quyền hạn truy cập, User được chia theo 2 loại chính
- 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
- 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 SuperuserLệ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ơncá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ếcDướ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
7Sử 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 thiSử 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
5Chuyển sang Superuser bằng
[sudo] password for normalUser
7Lú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ữaSau 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
- 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
- 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
15Ví dụ. You have a file
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ả[sudo] password for normalUser
Đọ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ư sauTa sẽ thu được kết quả theo định dạng sau
________số 8
- 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à
29[sudo] password for normalUser
- 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
10 còn Other chỉ có quyền[sudo] password for normalUser
11[sudo] password for normalUser
Để 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
10[sudo] password for normalUser
- - rwx r-x r-x. Tệp thông thường, Người dùng
13, Nhóm[sudo] password for normalUser
14, Khác[sudo] password for normalUser
15[sudo] password for normalUser
- d rw- r-x ---. Thư mục, Người dùng
10, Nhóm[sudo] password for normalUser
14[sudo] password for normalUser
- tôi rwx r-- r--. Liên kết, Người dùng
13, Nhóm[sudo] password for normalUser
11, Khác[sudo] password for normalUser
11[sudo] password for normalUser
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ế độ- Chế độ tượng trưng. Sử dụng các ký tự để phân quyền
- 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
1CHẾ ĐỘ 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
28Tấ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
2Ví 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
2CHẾ ĐỘ 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. [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
2Bâ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
5Sự 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à
59 theo Symbolic và số[sudo] password for normalUser
70 theo Numeric-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
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
7Có 2 cách để gán SUID vào tệp
- chế độ tượng trưng.
74-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
- 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.
76-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
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à
59 theo Symbolic và số[sudo] password for normalUser
78 theo Numeric-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
Có 2 cách để gán SGID vào tệp
- chế độ tượng trưng.
79-rw-rw-r-- 1 ubuntu ubuntu 0 Nov 23 04:08 test.txt
- 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à
01 theo Symbolic và số[sudo] password for normalUser
02 theo Numeric[sudo] password for normalUser
[sudo] password for normalUser
03[sudo] password for normalUser
0Theo 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 SuperuserVí 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
1Bâ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
2Có 2 cách để gán Sticky bit vào tập tin
- chế độ tượng trưng.
13[sudo] password for normalUser
- 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