Reading Time: 7 minutes

Linux là một hệ điều hành đa người dùng, dựa trên các khái niệm của Unix về quyền sở hữu tệp và phân quyền, nhằm đảm bảo bảo mật ở cấp độ hệ thống tệp.

Phân quyền trong Linux

Để quản trị một máy chủ đám mây hiệu quả, người quản trị cần hiểu rõ cách hoạt động của quyền sở hữu và phân quyền. Đây là nền tảng quan trọng để đảm bảo an toàn và kiểm soát hợp lý trong môi trường nhiều người dùng.

Mặc dù việc quản lý quyền sở hữu và phân quyền trong Linux khá phức tạp nhưng hướng dẫn này sẽ tập trung vào phần giới thiệu cơ bản. Chúng ta sẽ tìm hiểu cách xem và diễn giải quyền sở hữu cũng như phân quyền trong Linux.

Điều kiện tiên quyết

Bạn phải nắm vững các khái niệm được trình bày trong các bài trước:

  • Giới thiệu về terminal trong Linux
  • Điều hướng cơ bản và quản lý tệp trong Linux

Để thực hành hướng dẫn này, bạn cần có quyền truy cập vào một máy chủ đám mây.

Giới thiệu về người dùng

Như đã đề cập trong phần giới thiệu, Linux là một hệ thống đa người dùng. Trước khi tìm hiểu về quyền sở hữu và phân quyền, chúng ta cần nắm rõ các khái niệm cơ bản về người dùng và nhóm, vì quyền sở hữu và phân quyền được áp dụng trực tiếp cho những đối tượng này.

Trong Linux có hai loại người dùng: người dùng hệ thống (system users)người dùng thông thường (regular users).

  • Người dùng hệ thống thường được dùng để chạy các tiến trình nền hoặc không tương tác.
  • Người dùng thông thường dùng để đăng nhập và chạy các tiến trình tương tác.

Ngay khi khởi tạo và đăng nhập vào hệ thống Linux, nhiều tài khoản người dùng hệ thống đã được tạo sẵn. Đây là những tài khoản cần thiết để vận hành các dịch vụ mà hệ điều hành cần, và đó là điều hoàn toàn bình thường.

Bạn có thể xem toàn bộ người dùng trên hệ thống thông qua tệp /etc/passwd. Mỗi dòng trong tệp này chứa thông tin về một người dùng, bắt đầu với tên đăng nhập (phần trước dấu : đầu tiên). Để in nội dung của tệp này, dùng lệnh:

cat /etc/passwd

Kết quả mẫu:

…
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
landscape:x:110:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:111:1::/var/cache/pollinate:/bin/false
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
vault:x:997:997::/home/vault:/bin/bash
stunnel4:x:112:119::/var/run/stunnel4:/usr/sbin/nologin
sammy:x:1001:1002::/home/sammy:/bin/sh

Superuser

Ngoài hai loại người dùng trên, Linux còn có người dùng đặc quyền cao nhất – superuser (hay root). Tài khoản này có thể bỏ qua mọi hạn chế về quyền sở hữu và phân quyền.

Trên thực tế, superuser có toàn quyền truy cập vào mọi thứ trong máy chủ của mình. Tài khoản này thường được dùng để thực hiện các thay đổi trên toàn hệ thống.

Ngoài ra, cũng có thể cấu hình để các tài khoản người dùng khác tạm thời đảm nhận “quyền superuser”. Điều này thường được gọi là có quyền sudo vì những người dùng này có thể thực hiện các lệnh quản trị bằng cách thêm sudo trước lệnh.

Trên thực tế, cách làm tốt nhất là tạo một người dùng thông thường có quyền sudo để thực hiện các tác vụ quản trị. Nhờ đó, hạn chế việc dùng trực tiếp tài khoản root, giúp hệ thống an toàn hơn.

Hiểu rõ hơn về nhóm

Nhóm là tập hợp gồm 0 hoặc nhiều người dùng. Một người dùng luôn thuộc về một nhóm mặc định và có thể đồng thời là thành viên của các nhóm khác trên máy chủ.

Bạn có thể xem toàn bộ các nhóm trong hệ thống và thành viên của chúng bằng cách mở tệp /etc/group, tương tự như cách kiểm tra người dùng trong /etc/passwd. Bài viết này không đề cập đến quản lý nhóm.

Sau khi hiểu rõ các khái niệm về người dùng và nhóm, chúng ta sẽ cùng tìm hiểu về quyền sở hữu và phân quyền tệp!

Quyền sở hữu và phân quyền

Trong Linux, mỗi tệp thuộc về một người dùng và một nhóm cùng quyền truy cập riêng. Sau đây là cách kiểm tra quyền sở hữu và phân quyền của một tệp.

Cách phổ biến nhất để xem quyền của một tệp là dùng ls với tùy chọn liệt kê chi tiết -l, ví dụ: ls -l myfile.

Nếu muốn xem quyền của toàn bộ tệp trong thư mục hiện tại, chỉ cần chạy lệnh:

ls -l

Lưu ý, nếu bạn đang ở trong thư mục home trống và chưa tạo tệp nào để xem, bạn có thể liệt kê nội dung thư mục /etc với lệnh: ls -l /etc.

Dưới đây là ảnh chụp màn hình ví dụ kết quả của lệnh ls -l, với các nhãn cho từng cột trong kết quả hiển thị:

Linux permissions

Ví dụ kết quả lệnh ls -l với các cột được gắn nhãn.

Mỗi tệp sẽ hiển thị mode (chứa thông tin quyền), chủ sở hữu, nhóm, và tên. Để hiểu ý nghĩa của các ký tự và dấu gạch ngang, chúng ta sẽ bắt đầu phân tích cột mode thành từng thành phần như sau.

Hiểu về Mode

Đây là phần giải thích chi tiết về metadata mode của tệp đầu tiên trong ví dụ trên:

Linux permissions

Minh họa chi tiết mode và các quyền.

Loại tệp

Trong Linux có hai loại tệp: thông thường (normal)đặc biệt (special).

Loại tệp được xác định bằng ký tự đầu tiên trong mode, trong hướng dẫn này gọi là “trường loại tệp”.

  • Tệp thông thường được nhận diện bằng dấu gạch ngang (-) trong trường loại tệp. Chúng có thể chứa dữ liệu hoặc bất kỳ nội dung nào, và được gọi là tệp thông thường (regular) để phân biệt với tệp đặc biệt.
  • Tệp đặc biệt thường được nhận diện bằng chữ cái trong trường loại tệp. Hệ điều hành xử lý chúng khác với tệp thông thường. Ký tự này cho biết tệp thuộc loại đặc biệt nào.Chẳng hạn, thư mục (dạng tệp đặc biệt phổ biến nhất) được đánh dấu bằng ký tự d trong trường loại tệp (như minh họa ở ảnh trước).Ngoài ra, còn có nhiều loại tệp đặc biệt khác.

Các lớp quyền (Permission Classes)

Trong cột mode, sau trường loại tệp là ba nhóm quyền: user (owner), group, và other. Thứ tự này nhất quán trên mọi hệ thống Linux:

  • User: chủ sở hữu tệp.
  • Group: các thành viên trong nhóm của tệp. Quyền nhóm là cách hiệu quả để cấp quyền cho nhiều người dùng trên cùng một tệp.
  • Other: tất cả người dùng khác không thuộc hai lớp trên.

Đọc quyền truy cập dưới dạng ký hiệu

Điều tiếp theo cần lưu ý là các nhóm gồm 3 ký tự, dùng để biểu thị quyền truy cập của từng lớp đối với một tệp dưới dạng ký hiệu.

Trong mỗi nhóm này, quyền đọc, ghi và thực thi được thể hiện như sau:

  • Đọc: ký tự r ở vị trí thứ nhất
  • Ghi: ký tự w ở vị trí thứ hai
  • Thực thi: ký tự x ở vị trí thứ ba. Trong một số trường hợp đặc biệt, vị trí này có thể là một ký tự khác

Nếu một trong các ký tự trên được thay bằng dấu gạch ngang (-), nghĩa là quyền tương ứng không được cấp cho lớp đó.

Ví dụ, nếu nhóm ký tự thứ hai của một tệp là r--, thì tệp này chỉ có quyền “đọc” đối với nhóm được gán.

Hiểu về quyền đọc, ghi, thực thi

Sau khi đã biết cách đọc quyền của một tệp, bước tiếp theo là hiểu rõ từng quyền cho phép người dùng thực hiện những hành động gì. Hướng dẫn này sẽ phân tích chi tiết từng quyền riêng lẻ, tuy nhiên, cần lưu ý rằng chúng thường được kết hợp với nhau để mang lại khả năng truy cập linh hoạt vào tệp và thư mục.

Dưới đây là ý nghĩa cụ thể của 3 loại quyền:

Đọc

  • Với tệp thông thường, quyền đọc cho phép người dùng xem nội dung bên trong.
  • Với thư mục, quyền đọc cho phép người dùng xem danh sách tên các tệp trong đó.

Ghi

  • Với tệp thông thường, quyền ghi cho phép người dùng chỉnh sửa hoặc xóa tệp.
  • Với thư mục, quyền ghi cho phép người dùng xóa thư mục, thay đổi nội dung (tạo, xóa, đổi tên tệp trong đó), cũng như chỉnh sửa nội dung của các tệp mà họ có quyền ghi.

Thực thi

  • Với tệp thông thường, quyền thực thi cho phép người dùng chạy tệp, nhưng điều kiện là họ cũng phải có quyền đọc. Quyền này cần được thiết lập cho các chương trình thực thi và shell script trước khi có thể sử dụng.
  • Với thư mục, quyền thực thi cho phép người dùng truy cập hoặc đi vào thư mục (sử dụng cd), đồng thời xem được siêu dữ liệu của các tệp bên trong (thông tin hiển thị khi dùng ls -l).

Ví dụ về Mode (và quyền)

Giờ đây khi bạn đã biết cách đọc mode của một tệp và nắm rõ ý nghĩa của từng quyền, hãy cùng xem một số ví dụ về những mode thường gặp, kèm theo giải thích ngắn gọn để củng cố kiến thức:

  • rw-------: Tệp chỉ có chủ sở hữu mới có quyền truy cập
  • rwxr-xr-x: Tệp mà tất cả người dùng trên hệ thống được thực thi, thường được gọi là tệp “thực thi toàn hệ thống”
  • rw-rw-rw-: Tệp mà mọi người dùng trên hệ thống đều có thể sửa đổi, còn gọi là tệp “ghi toàn hệ thống”
  • drwxr-xr-x: Thư mục mà mọi người dùng trên hệ thống đều có quyền đọc và truy cập
  • drwxrwx---: Thư mục có thể được chỉnh sửa (bao gồm cả nội dung bên trong) bởi chủ sở hữu và nhóm
  • drwxr-x---: Thư mục có thể được nhóm truy cập

Thông thường, chủ sở hữu của tệp sẽ có nhiều quyền hơn so với hai lớp còn lại. Nhóm và những người dùng khác chỉ được cấp một phần quyền của chủ sở hữu (tương đương hoặc ít hơn). Điều này hợp lý, vì quyền truy cập chỉ nên cấp cho những người thực sự cần sử dụng tệp.

Ngoài ra, cần lưu ý, dù có thể tạo ra rất nhiều tổ hợp quyền khác nhau nhưng chỉ một số cách kết hợp mới phù hợp trong thực tế.

Chẳng hạn, quyền ghi hoặc quyền thực thi hầu như luôn đi kèm với quyền đọc, bởi vì chúng ta không thể sửa đổi hay thực thi một tệp mà mình không thể đọc.

Kết luận

Giờ đây bạn đã nắm vững cách hoạt động của quyền sở hữu và quyền truy cập trong Linux. Nếu bạn muốn tìm hiểu thêm về các kiến thức nền tảng của Linux, hãy đọc hướng dẫn tiếp theo trong loạt bài này: Giới thiệu về chuyển hướng I/O trong Linux.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất