0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Quản lý Người dùng và Quyền truy cập trong Linux

Đăng vào 1 tháng trước

• 7 phút đọc

Giới thiệu

Trong quản trị hệ thống Linux, việc quản lý người dùng, nhóm và quyền truy cập là một trong những kỹ năng quan trọng nhất. Nó đảm bảo rằng chỉ những người phù hợp mới có quyền truy cập vào các tệp nhạy cảm, đồng thời thúc đẩy sự hợp tác trong các môi trường chia sẻ. Trong dự án này, chúng ta sẽ mô phỏng một tình huống thực tế bằng cách tạo ra nhiều người dùng, gán họ vào các nhóm và quản lý quyền truy cập vào các thư mục và tệp dự án chia sẻ. Cách tiếp cận thực hành này sẽ cung cấp cho bạn kinh nghiệm thực tế với các lệnh thiết yếu như adduser, groupadd, usermod, chmod, chownid.

Các nhiệm vụ cần thực hiện

  1. Tạo nhóm
    Thiết lập 2 nhóm (ví dụ: devs và staff) sử dụng groupadd.

  2. Tạo người dùng
    Thêm 5 người dùng mới với adduser hoặc useradd.

  3. Gán người dùng vào nhóm
    Sử dụng usermod -aG để gán người dùng vào nhóm đúng.

  4. Thiết lập thư mục dự án chia sẻ
    Tạo một thư mục (/home/company_projects) và cấu hình nó với bit SGID để tất cả các tệp thừa hưởng quyền sở hữu nhóm.

  5. Quản lý quyền truy cập
    Sử dụng chmod để thực thi các quy tắc (ví dụ: chỉ thành viên nhóm mới có thể đọc/ghi, những người khác bị từ chối).

  6. Kiểm tra sự hợp tác trong nhóm
    Yêu cầu một người dùng (ví dụ: alice) tạo một tệp và một thành viên nhóm khác (ví dụ: bob) chỉnh sửa nó.

  7. Xác nhận rằng những người không phải là thành viên (ví dụ: carol) không thể truy cập vào thư mục.

  8. Thay đổi quyền sở hữu tệp
    Thực hành với chownchgrp để gán quyền sở hữu cho các tệp cụ thể cho người dùng hoặc nhóm.

  9. Xác minh và khắc phục sự cố
    Sử dụng các lệnh như id, groups, ls -l, và stat để xác nhận các thay đổi.

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

  • Hầu hết các lệnh yêu cầu quyền root. Thêm sudo khi cần, hoặc chạy với quyền root:
    • sudo -i hoặc sudo su - nếu bạn muốn một shell root.

Bước 1: Tạo hai nhóm

Chọn tên nhóm có ý nghĩa. Ví dụ: devs và staff.

bash Copy
sudo groupadd devs
sudo groupadd staff

Xác minh nhóm tồn tại:

bash Copy
getent group devs
getent group staff

Bước 2: Tạo năm người dùng

Tạo năm người dùng bằng lệnh adduser, adduser sẽ yêu cầu mật khẩu và thông tin tùy chọn.

bash Copy
sudo adduser alice
sudo adduser bob
sudo adduser carol
sudo adduser dave
sudo adduser eve
  • Đăng xuất khỏi người dùng hiện tại để xem tất cả người dùng mới được thêm.

Bước 3: Gán người dùng vào nhóm

  • Quyết định thành viên nhóm. Ví dụ về ánh xạ:
    • devs: alice, bob
    • staff: carol, dave, eve

Thêm người dùng vào nhóm (sử dụng -aG để thêm người vào từng nhóm)

bash Copy
sudo usermod -aG devs alice
sudo usermod -aG devs bob
sudo usermod -aG staff carol
sudo usermod -aG staff dave
sudo usermod -aG staff eve

Xác minh thành viên:
Xác minh thành viên bằng cách sử dụng lệnh

bash Copy
sudo getent group devs
sudo getent group staff

Bước 4: Tạo thư mục dự án chia sẻ

Tạo một thư mục mà các thành viên nhóm có thể đọc/ghi. Chúng ta sẽ tạo một thư mục company_projects trong thư mục chính:

bash Copy
mkdir -p /home/company_projects
  • sudo chmod g+s /home/company_projects
    Bit g+s (setgid trên thư mục) là điều làm cho thư mục dự án chia sẻ hoạt động như một không gian làm việc thực sự của nhóm.
bash Copy
sudo chown root:devs /home/company_projects
  • chown → thay đổi chủ sở hữu của một tệp hoặc thư mục.
  • root:devs
  • root = chủ sở hữu mới của thư mục
  • devs = nhóm mới của thư mục
  • /home/company_projects → thư mục mục tiêu.
bash Copy
sudo chmod u+rwx /home/company_projects
  • chmod → thay đổi quyền tệp/thư mục.
  • u → tham chiếu đến chủ sở hữu của thư mục.
  • +rwx → thêm quyền đọc (r), ghi (w), và thực thi (x).
  • Hiệu quả: Chủ sở hữu của ~/company_projects có thể liệt kê nội dung, tạo/xóa tệp và vào thư mục.
bash Copy
sudo chmod g+rwx /home/company_projects
  • chmod: thay đổi quyền.
  • g: tham chiếu đến nhóm của tệp/thư mục (trong trường hợp của bạn, nhóm có thể là devs vì sudo chown root:devs).
  • +rwx: thêm ba quyền:
    • r (đọc): các thành viên nhóm có thể liệt kê các tệp bên trong.
    • w (ghi): các thành viên nhóm có thể tạo tệp mới, xóa tệp và thực hiện thay đổi.
    • x (thực thi): các thành viên nhóm có thể vào thư mục và truy cập nội dung của nó.

Bước 5: Kiểm tra hành vi của thư mục chia sẻ

  • Chuyển sang tài khoản alice và thử vào /home/company_projects:
bash Copy
su - alice
cd /home/company_projects
touch file_from_alice.txt
ls
  • Kết quả hiển thị: file_from_alice.txt
  • Lệnh ls -l hiển thị một dòng tương tự như:
bash Copy
-rw-rw-r-- 1 alice devs 0 Sep 27 08:40 file_from_alice.txt
  • Điều này cho thấy:
    • Chủ sở hữu tệp là alice.
    • Nhóm tệp là devs — nó thừa hưởng nhóm thư mục (devs) vì thư mục cha có bit setgid.
    • Quyền tệp là -rw-rw-r-- (chủ sở hữu đọc/ghi, nhóm đọc/ghi, người khác đọc).

5.1 Là một thành viên khác của devs (bob), xác nhận bạn có thể chỉnh sửa/xóa:

bash Copy
su - bob
cd ~/company_projects
echo "hello" >> testfile_from_alice.txt
cat testfile_from_alice.txt
  • Việc này được phép vì nhóm có quyền ghi.

5.2 Một thành viên không phải là nhóm (ví dụ: carol, trong staff) sẽ bị từ chối vì họ không phải là thành viên của nhóm devs, họ thuộc về nhóm staff:

bash Copy
su - carol
cd /home/company_projects
  • Điều này sẽ thất bại với "Permission denied".
  • Lệnh touch should_fail.txt sẽ không thực hiện được.

Bước 6: Quản lý quyền sở hữu và nhóm trên các tệp hiện có

Thiết lập chủ sở hữu và nhóm cho một tệp hoặc thư mục bằng lệnh

bash Copy
sudo chown alice:devs /home/company_projects/somefile.txt
  • Chủ sở hữu của thư mục là alice và giờ thuộc về nhóm devs.

6.1 Chỉ thay đổi nhóm:

bash Copy
sudo chgrp staff ~/company_projects/some_other_file.txt
  • Trước lệnh này, thư mục /home/company_projects có:
    • Chủ sở hữu: alice
    • Nhóm: devs
  • Hiện tại:
bash Copy
drwxrwsr-x 2 alice devs 4096 Sep 27 09:15 /home/company_projects
  • Lệnh:
bash Copy
sudo chgrp staff /home/company_projects
  • chgrp = thay đổi quyền sở hữu nhóm.
  • staff = nhóm mới.
  • Vậy lệnh này đã thay đổi nhóm của thư mục từ devs ➝ staff.
  • Giờ thư mục trông như sau:
bash Copy
drwxrwsr-x 2 alice staff 4096 Sep 27 09:15 /home/company_projects

Ý nghĩa:

  • Chủ sở hữu vẫn là alice.

  • Nhóm giờ là staff.

  • Tiếp theo: chuyển sang người dùng carol:

bash Copy
su - carol
  • Carol vào /home/company_projects và tạo một tệp:
bash Copy
touch man.txt
  • Giờ khi bạn liệt kê:
bash Copy
-rw-rw-r-- 1 carol staff 0 Sep 27 09:53 man.txt
-rw-rw-r-- 1 alice devs 16 Sep 27 09:23 testfile_from_alice.txt

Tại sao điều này xảy ra:

  • man.txt
    • Chủ sở hữu = carol (vì cô ấy tạo ra nó).
    • Nhóm = staff (vì thư mục /home/company_projects giờ thuộc về nhóm staff và nó có bit setgid được thiết lập).
  • testfile_from_alice.txt
    • Tệp này được tạo bởi Alice khi nhóm vẫn là devs, nên nó giữ nguyên alice:devs.

Kết luận

Trong dự án này, chúng ta đã khám phá cách Linux xử lý quyền sở hữu tệp, nhóm và quyền truy cập thông qua các ví dụ thực tế. Bằng cách sử dụng các lệnh như chown, chgrpchmod, chúng ta đã chứng minh cách gán tệp và thư mục cho các người dùng và nhóm cụ thể, cũng như cách kiểm soát mức độ truy cập.
Một điểm nổi bật chính là việc sử dụng quyền setgid (s) trên các thư mục, đảm bảo rằng các tệp mới được tạo ra sẽ thừa hưởng quyền sở hữu nhóm của thư mục cha. Tính năng này giúp việc hợp tác dễ dàng hơn trong các thư mục dự án chia sẻ, vì người dùng tự động tạo ra các tệp thuộc về nhóm dự kiến.
Từ các bài tập, chúng ta thấy cách chuyển giao quyền sở hữu (ví dụ: alice:devs ➝ alice:staff) ảnh hưởng đến ai có thể đọc, ghi hoặc thực thi trong các thư mục chia sẻ, và cách các người dùng khác nhau tương tác với các tệp tùy thuộc vào thành viên nhóm.

Tổng thể, dự án này chứng minh tầm quan trọng của việc quản lý quyền một cách cẩn thận trong môi trường nhiều người dùng. Bằng cách áp dụng những nguyên tắc này, các quản trị viên hệ thống có thể tạo ra các không gian làm việc an toàn, hợp tác trong khi vẫn duy trì kiểm soát và trách nhiệm đối với các tệp và thư mục.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào