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ó. Show 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 LinuxCó một câu nói phổ biến là: 1 Trong Linux mọi 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ềnTrong Linux có 3 nhóm phân quyền chính, không bao nhau:
Tuy nhiên vẫn có 1 ngoại lệ, đó là người dùng 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 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 fileNgoà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 fileTrong Linux, cách đơn giản nhất để xem phân quyền của một file là sử dụng lệnh
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ỉ 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 4Dựa vào quyền hạn truy cập thì User được chia theo 2 loại chính:
SuperuserTheo 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:
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. 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 6. Đó cũng chính là lý do 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. 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 7 thì 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ố 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 0 và 7:Sử dụng sudo để tải package 4:Đầu tiên xem mình là user nào bằng 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 0 cài package:
Bạn chỉ cần nhập mật khẩu của User hiện tại ( 7) là câu lệnh sẽ được thực thi.Sử dụng su để tải package 8:Đầu tiên xem mình là user nào bằng 5.Chuyển sang Superuser bằng 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ố 1 sang 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ố 0 nữa.Sau khi tải xong, hay nhớ đăng xuất nhé. Linux GroupTrong 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:
Nhóm của người dùng chính được lưu trữ trong tệp 3 và các nhóm bổ sung (nếu có) sẽ được liệt kê trong tệp 5.
Read, write, execute trong phân quyền fileTrong linux, tất cả các file, tài nguyên đều có 3 loại quyền chính:
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 4 nhưng chỉ có quyền đọc thư mục 5, lúc đó bạn chỉ có thể thay đổi nội dung file 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 fileXem 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 7. Để biết thêm các thông số khác thì thêm 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: Trong đó:
Ở trong Permission sẽ là chi tiết các quyền của các loại user khác nhau:
Để hiểu thêm thì chúng ta cùng xem thêm một vài ví dụ:
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 1. Dựa vào cách trình bày thì ta có thể chia thành 2 chế độ
2 mode này hoạt động khác nhau nhưng đều sử dụng chung một syntax:
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.:
Và các quyền hạn:
Ngoài ra ta còn có thêm các signs (biểu thị toán học) 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:
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: 3Đầu tiên sẽ là User kí hiệu là ( 4) thêm quyền write ( 5), sau đó Other kí hiệu là ( 6) bị xoá quyền read ( 7).Ví dụ 2: 8All User( 9) được ghi đè ( 0) quyền read( 1), write( 2), execute( 3).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:
Ví dụ bạn muốn thay đổi quyền file 6 như ví dụ 1 (u+w,o-r : User thêm 5, Other xoá 1.):
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: Hoặc đơn giản hơn bạn có thể nhớ như sau:
Ta thử nhé 7, 8,... 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ố 9 thứ tự là 0. Bây giờ mình sẽ cho các bạn một số ví dụ:Ví dụ 1: Owner 1, group 1
Ví dụ 2: Owner 0, group 4, other 1
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:
Bây giờ giả sử bạn muốn thay đổi quyền file 6 như Ví dụ 1 (Owner 1, group 1), bạn nhập như sau:
Special PermissionNgoà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):
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 1 sở hữu bởi root, khi thực thi lệnh 2, bạn có thể dễ dàng thấy kí tự 9 , dấu hiệu của SUID.
Có 2 cách để gán SUID vào file:
SGID (Set group id):
Có 2 cách để gán SGID vào file:
Sticky bit:
03. 0Theo như output phía trên, bạn sẽ thấy kí hiệu 01 của Stickybit ở cuối cùng của phần 05. Tiếp theo, ở cột 3 chính là Owner của thư mục là 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 07 sỡ hữu bởi 08 và chia sẽ cho user 09. Sau khi set Sticky bit ta được: 1Bây giờ 09 cố gắng xoá file sẽ bị chặn lại ( 11). Mặc dù 05 có toàn bộ quyền write. 2Có 2 cách để gán Sticky bit vào file:
Thông tin: Để xoá special permission bạn thay đổi dấu + thành dấu - Tổng kếtPhâ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. |