Các Quyền Cơ Bản Trong Linux và Cách Sử Dụng Umask Hiệu Quả

Các Quyền Cơ Bản Trong Linux và Cách Sử Dụng Umask

Quyền trong Linux giúp chủ sở hữu tệp hoặc thư mục kiểm soát quyền truy cập của người dùng đối với các tệp đó, đảm bảo rằng các chính sách bảo mật được áp dụng đúng mức độ. Điều này cho phép phân chia quyền truy cập tùy theo vai trò của người dùng, từ đó quản lý hiệu quả các tài nguyên hệ thống.

Lệnh umask cho phép xác định quyền mặc định được gán cho các tệp khi người dùng tạo mới. Lệnh này có thể được cấu hình để thiết lập các mức bảo mật nghiêm ngặt hoặc quyền truy cập linh hoạt hơn, tùy thuộc vào yêu cầu của hệ thống và người sử dụng.

Để quản lý quyền trong Linux hiệu quả, bạn cần một môi trường ổn định. Sử dụng VPS giá rẻ từ DataOnline, bạn có thể thực hành phân quyền và umask dễ dàng với chi phí thấp, đảm bảo hiệu suất cao và bảo mật tối ưu cho hệ thống Linux của bạn.

Tiếp theo, DataOnline sẽ giải thích các nguyên lý cơ bản về quyền trong Linux và cách cấu hình `umask` để đảm bảo tính bảo mật tối ưu. Bài viết cũng sẽ đề cập đến lệnh `chmod` như một công cụ quan trọng để thay đổi quyền truy cập đối với các tệp đã tồn tại.

1. Các hạng mục quyền

Quyền trong Linux có thể trông khá khó hiểu đối với người mới. Tuy nhiên, khi bạn đã quen với cách biểu diễn các quyền, việc đọc và thay đổi quyền của một tệp hoặc thư mục sẽ trở nên đơn giản.

Quyền của chủ sở hữu (Owner Permissions)

Khái niệm đầu tiên bạn cần hiểu là Linux vốn dĩ là hệ điều hành đa người dùng. Mỗi tệp chỉ có một chủ sở hữu duy nhất. Ngay cả khi bạn là người duy nhất sử dụng VPS, hệ thống vẫn tạo ra nhiều “người dùng” để chạy các chương trình cụ thể. Bạn có thể xem danh sách người dùng trên hệ thống bằng lệnh:

cat /etc/passwd

Ví dụ, bạn có thể thấy các dòng như sau:

root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh . . .

Tệp /etc/passwd chứa một dòng cho mỗi người dùng được tạo ra trên hệ thống. Trường đầu tiên của mỗi dòng là tên của một người dùng duy nhất. Rõ ràng, nhiều người dùng này được liên kết với các dịch vụ và ứng dụng.

Việc cấu hình các dịch vụ để chạy với một người dùng riêng biệt cho phép chúng ta kiểm soát quyền truy cập của dịch vụ thông qua việc gán quyền cho người dùng đó. Nhiều chương trình được cấu hình để tạo ra một tên người dùng và thực hiện tất cả các thao tác bằng người dùng đó.

Quyền của nhóm (Group Permissions)

Hạng mục thứ hai để gán quyền là “nhóm sở hữu” của tệp. Tương tự như chủ sở hữu, một tệp chỉ có thể thuộc về một nhóm duy nhất. Mỗi người dùng có thể là thành viên của nhiều nhóm, và mỗi nhóm có thể chứa nhiều người dùng.

Để xem các nhóm mà người dùng của bạn hiện là thành viên, hãy gõ:

groups

Lệnh này sẽ hiển thị tất cả các nhóm mà người dùng hiện tại thuộc về. Theo mặc định, bạn có thể chỉ là thành viên của một hoặc hai nhóm, trong đó có thể có một nhóm có tên trùng với tên người dùng của bạn.

Để xem tất cả các nhóm có trên hệ thống, hãy gõ:

cat /etc/group
root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: lp:x:7: . . .

Mỗi dòng trong tệp /etc/group có định dạng với trường đầu tiên là tên của nhóm.

Linux cho phép bạn gán quyền dựa trên nhóm sở hữu của tệp. Điều này cho phép bạn cấp quyền truy cập tùy chỉnh cho một nhóm người dùng vì chỉ có một người dùng có thể sở hữu tệp.

Quyền của người dùng khác (Other Permissions)

Hạng mục cuối cùng bạn có thể gán quyền là “người dùng khác”. Ở đây, “người dùng khác” được định nghĩa là bất kỳ người dùng nào không phải là chủ sở hữu của tệp và không thuộc nhóm sở hữu của tệp.

Hạng mục này cho phép bạn đặt mức quyền cơ bản áp dụng cho bất kỳ ai không thuộc hai nhóm kiểm soát trên.

2. Các kiểu biểu diễn quyền

Mỗi nhóm quyền (chủ sở hữu, nhóm chủ sở hữu và người dùng khác) có thể được gán các quyền cho phép hoặc hạn chế khả năng đọc, ghi hoặc thực thi một tệp.

Đối với một tệp thông thường, quyền đọc là cần thiết để đọc nội dung tệp, quyền ghi cho phép sửa đổi nội dung, và quyền thực thi cho phép chạy tệp đó như một script hoặc một ứng dụng.

Đối với thư mục, quyền đọc là cần thiết để thực hiện lệnh ls (liệt kê nội dung thư mục), quyền ghi cho phép thay đổi nội dung của thư mục, và quyền thực thi cho phép người dùng sử dụng lệnh cd (chuyển thư mục) để truy cập vào thư mục đó.

Linux biểu diễn các loại quyền này bằng hai cách ký hiệu riêng biệt: ký hiệu chữ cái (alphabetic) và ký hiệu bát phân (octal).

Ký hiệu chữ (Alphabetic Notation)

Cách biểu diễn ký hiệu chữ rất dễ hiểu và được một số chương trình phổ biến sử dụng để biểu thị quyền. Mỗi quyền được biểu diễn bằng một ký tự duy nhất:

  • r = quyền đọc (read)
  • w = quyền ghi (write)
  • x = quyền thi hành (execute)

Lưu ý rằng quyền chữ luôn được sắp xếp theo thứ tự cố định. Nếu quyền được cấp, ký tự tương ứng sẽ hiển thị; nếu không, dấu gạch ngang (-) sẽ thay thế.

Quyền được gán cho chủ sở hữu trước, sau đó là nhóm và cuối cùng là người dùng khác. Như vậy, ta có 3 nhóm quyền, mỗi nhóm gồm 3 ký tự.

Lệnh ls -l sử dụng ký hiệu chữ để hiển thị quyền, ví dụ:

cd /etc ls -l

Kết quả có thể hiển thị như sau:

drwxr-xr-x 3 root root 4096 Apr 26 2012 acpi -rw-r--r-- 1 root root 2981 Apr 26 2012 adduser.conf drwxr-xr-x 2 root root 4096 Jul 5 20:53 alternatives -rw-r--r-- 1 root root 395 Jun 20 2010 anacrontab drwxr-xr-x 3 root root 4096 Apr 26 2012 apm drwxr-xr-x 3 root root 4096 Apr 26 2012 apparmor drwxr-xr-x 5 root root 4096 Jul 5 20:52 apparmor.d drwxr-xr-x 6 root root 4096 Apr 26 2012 apt …

Trường đầu tiên trong kết quả đầu ra của lệnh này biểu thị quyền của tệp.

Dữ liệu này được biểu diễn bằng mười ký tự. Ký tự đầu tiên không phải là giá trị quyền thực sự, mà dùng để chỉ loại tệp (ví dụ: - cho tệp thông thường, d cho thư mục, v.v.).

Chín ký tự tiếp theo thể hiện các quyền mà chúng ta đã đề cập ở trên. Chúng được chia thành ba nhóm, tương ứng với quyền của chủ sở hữu, nhóm chủ sở hữu và những người dùng khác. Mỗi nhóm bao gồm ba ký tự biểu thị quyền đọc, ghi và thực thi.

Trong ví dụ phía trên, thư mục “acpi” có quyền đọc, ghi và thực thi đối với chủ sở hữu. Nhóm chủ sở hữu và người dùng khác chỉ có quyền đọc và thực thi.

Tệp “anacrontab” cho phép chủ sở hữu đọc và chỉnh sửa, nhưng các thành viên trong nhóm và người dùng khác chỉ được phép đọc.

Ký hiệu số (Octal Notation)

Cách biểu diễn quyền truy cập ngắn gọn hơn nhưng hơi kém trực quan hơn là sử dụng ký hiệu bát phân (octal notation).

Với phương pháp này, mỗi nhóm quyền (chủ sở hữu, nhóm chủ sở hữu và người dùng khác) được biểu thị bằng một số từ 0 đến 7.

Ta xác định con số phù hợp bằng cách gán giá trị số cho từng loại quyền như sau:

  • 4 = quyền đọc (read)
  • 2 = quyền ghi (write)
  • 1 = quyền thực thi (execute)

Cộng các giá trị tương ứng với quyền mà ta muốn cấp cho từng nhóm. Kết quả sẽ là một số từ 0 đến 7 (0 là không có quyền nào, 7 là đầy đủ quyền đọc, ghi và thực thi) cho mỗi nhóm.

Ví dụ: nếu chủ sở hữu tệp có quyền đọc và ghi, điều này sẽ được biểu thị bằng số 6 trong cột quyền của chủ sở hữu. Nếu nhóm chủ sở hữu chỉ cần quyền đọc, thì ta dùng số 4 để biểu thị quyền của họ.

Tương tự như ký hiệu chữ cái, ký hiệu bát phân cũng có thể bao gồm một ký tự đứng đầu tùy chọn để chỉ loại tệp. Sau đó là các số đại diện cho quyền của chủ sở hữu, nhóm chủ sở hữu và người dùng khác theo thứ tự.

Một chương trình quan trọng sử dụng ký hiệu bát phân là lệnh chmod.

3. Sử dụng lệnh chmod

Cách phổ biến nhất để thay đổi quyền của một tệp là sử dụng ký hiệu bát phân với lệnh chmod. Hãy thực hành bằng cách tạo một tệp trống trong thư mục chính của chúng ta:

cd ~ touch testfile

Trước tiên, hãy xem quyền truy cập được gán cho tệp này ngay khi tạo:

ls -l testfile

Kết quả có thể giống như sau:

-rw-rw-r-- 1 demouser demouser 0 Jul 10 17:23 testfile

Nếu giải thích các quyền trên, ta thấy rằng chủ sở hữu tệp và nhóm chủ sở hữu đều có quyền đọc và ghi, còn những người dùng khác chỉ có quyền đọc.

Khi chuyển sang ký hiệu bát phân:

  • Chủ sở hữu và nhóm chủ sở hữu có quyền đọc (4) + ghi (2) = 6
  • Những người dùng khác chỉ có quyền đọc = 4

Vậy bộ ba quyền đầy đủ sẽ là 664.

Bây giờ, giả sử tệp này chứa một script bash mà chúng ta muốn thực thi với tư cách là chủ sở hữu. Ta không muốn bất kỳ ai khác chỉnh sửa tệp, bao gồm cả nhóm chủ sở hữu, và cũng không muốn những người ngoài nhóm có thể đọc tệp này.

Quyền mà chúng ta muốn thiết lập có thể được biểu diễn theo ký hiệu chữ cái là:

-rwxr-----

Ta sẽ chuyển quyền này sang ký hiệu bát phân và thay đổi quyền bằng lệnh chmod:

chmod 740 testfile ls -l testfile

Kết quả:

-rwxr----- 1 demouser demouser 0 Jul 10 17:23 testfile

Như bạn thấy, quyền đã được gán chính xác.

Nếu muốn khôi phục lại quyền ban đầu, ta chỉ cần sử dụng lệnh:

chmod 664 testfile ls -l testfile

Kết quả:

-rw-rw-r-- 1 demouser demouser 0 Jul 10 17:23 testfile
4. Thiết lập quyền mặc định với Umask

Lệnh umask dùng để xác định quyền mặc định được áp dụng cho các tệp và thư mục mới tạo, dựa trên “bộ quyền cơ bản” (base permissions) được quy định sẵn cho tệp và thư mục.

Quyền cơ bản:

  • Tệp có bộ quyền mặc định là 666 – tức là cho phép đọc và ghi đối với tất cả người dùng.
    (Không có quyền thực thi mặc định vì hầu hết tệp không cần thực thi và việc này có thể gây rủi ro bảo mật.)
  • Thư mục có bộ quyền mặc định là 777 – cho phép đọc, ghi và thực thi cho tất cả người dùng.

Lệnh umask hoạt động bằng cách trừ (mask) quyền mặc định dựa trên giá trị được chỉ định. Hãy cùng xem ví dụ dưới đây để hiểu rõ cách hoạt động của nó.

Ví dụ 1: Cho phép chủ sở hữu và nhóm có quyền ghi, chặn người khác

Giả sử chúng ta muốn thư mục mới tạo có quyền là 775, nghĩa là:

  • Chủ sở hữu: đọc, ghi, thực thi
  • Nhóm: đọc, ghi, thực thi
  • Người khác: chỉ đọc và thực thi bị chặn

Để xác định giá trị umask cần dùng, ta trừ:

777 (quyền mặc định của thư mục) - 775 (quyền mong muốn) = 002 (umask)

Giá trị 002 là umask ta cần đặt. Đây cũng là giá trị mặc định của nhiều hệ thống, như ta đã thấy khi tạo tệp với touch.

touch test2 ls -l test2

Kết quả:

-rw-rw-r-- 1 demouser demouser 0 Jul 10 18:30 test2

Ví dụ 2: Tăng tính bảo mật – chỉ chủ sở hữu có quyền

Nếu muốn nâng cao bảo mật và ngăn không cho bất kỳ ai ngoài chủ sở hữu truy cập tệp, ta dùng umask 077:

umask 077 touch restricted ls -l restricted

Kết quả:

-rw------- 1 demouser demouser 0 Jul 10 18:33 restricted

Ví dụ 3: Cho phép chia sẻ toàn bộ – tất cả đều có quyền đọc/ghi

Nếu có một tiến trình cần tạo nội dung chia sẻ giữa nhiều người dùng, ta có thể cho mọi người quyền đầy đủ:

umask 000 touch openfile ls -l openfile

Kết quả:

-rw-rw-rw- 1 demouser demouser 0 Jul 10 18:36 openfile

Lưu ý:

Mặc định, giá trị umask bạn thiết lập chỉ áp dụng cho phiên shell hiện tại. Khi đăng nhập lại, hệ thống sẽ sử dụng giá trị umask mặc định do bản phân phối quyết định.

Nếu bạn muốn thiết lập umask vĩnh viễn (duy trì sau khi đăng nhập lại), bạn có thể thêm nó vào tệp .bashrc:

cd nano .bashrc

Tìm xem có dòng umask nào đã được đặt hay chưa. Nếu có, chỉnh sửa; nếu không, thêm dòng sau vào cuối tệp:

umask 022

Trong ví dụ này, umask 022 sẽ cho phép chủ sở hữu có đầy đủ quyền, nhưng loại bỏ quyền ghi đối với nhóm và người dùng khác. Bạn có thể điều chỉnh giá trị này theo ý muốn để phù hợp với nhu cầu của mình mỗi khi đăng nhập.

5. Cảnh báo

Điều quan trọng cần nhớ khi thay đổi quyền là một số khu vực của hệ thống tệp và một số tiến trình yêu cầu quyền cụ thể để hoạt động đúng. Quyền không đủ có thể dẫn đến lỗi và khiến ứng dụng không chạy được.

Mặt khác, các cài đặt quá rộng (quá cho phép) có thể là rủi ro bảo mật. Vì vậy, nên hạn chế thay đổi quyền ngoài thư mục cá nhân của bạn, trừ khi bạn hiểu rõ hậu quả của việc cấu hình sai.

Một quy tắc tốt nữa khi cấu hình phần mềm thủ công là luôn gán chính sách quyền hạn nghiêm ngặt nhất mà không ảnh hưởng đến chức năng. Nghĩa là, nếu chỉ có một người dùng (ví dụ như một dịch vụ) cần truy cập một nhóm tệp, thì không cần cho phép toàn bộ người dùng khác có quyền ghi hoặc thậm chí quyền đọc. Điều này càng đúng trong những trường hợp mật khẩu được lưu trữ dưới dạng văn bản thuần túy.

Khi thiết lập umask trên Linux, một server đáng tin cậy là yếu tố then chốt. Thuê VPS tại DataOnline giúp bạn có nền tảng mạnh mẽ để quản lý quyền file, tối ưu hóa hiệu suất và bảo mật, hỗ trợ mọi dự án từ nhỏ đến lớn.

Bạn có thể điều chỉnh quyền một cách tinh vi hơn bằng cách sử dụng đúng nhóm sở hữu và thêm các người dùng cần thiết vào nhóm đó. Nếu tất cả những người dùng cần truy cập một tệp đều là thành viên của nhóm sở hữu, thì bạn có thể khóa hạng mục “người dùng khác” để tăng cường bảo mật.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *