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, chown và id.
Các nhiệm vụ cần thực hiện
-
Tạo nhóm
Thiết lập 2 nhóm (ví dụ: devs và staff) sử dụnggroupadd. -
Tạo người dùng
Thêm 5 người dùng mới vớiadduserhoặcuseradd. -
Gán người dùng vào nhóm
Sử dụngusermod -aGđể gán người dùng vào nhóm đúng. -
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. -
Quản lý quyền truy cập
Sử dụngchmodđể 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). -
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ó. -
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.
-
Thay đổi quyền sở hữu tệp
Thực hành vớichownvàchgrpđể gán quyền sở hữu cho các tệp cụ thể cho người dùng hoặc nhóm. -
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
sudokhi cần, hoặc chạy với quyền root:sudo -ihoặcsudo 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
sudo groupadd devs
sudo groupadd staff
Xác minh nhóm tồn tại:
bash
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
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
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
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
mkdir -p /home/company_projects
sudo chmod g+s /home/company_projects
Bitg+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
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:devsroot = chủ sở hữu mới của thư mụcdevs = nhóm mới của thư mục/home/company_projects → thư mục mục tiêu.
bash
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_projectscó thể liệt kê nội dung, tạo/xóa tệp và vào thư mục.
bash
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
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 -lhiển thị một dòng tương tự như:
bash
-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
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
su - carol
cd /home/company_projects
- Điều này sẽ thất bại với "Permission denied".
- Lệnh
touch should_fail.txtsẽ 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
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
sudo chgrp staff ~/company_projects/some_other_file.txt
- Trước lệnh này, thư mục
/home/company_projectscó:- Chủ sở hữu: alice
- Nhóm: devs
- Hiện tại:
bash
drwxrwsr-x 2 alice devs 4096 Sep 27 09:15 /home/company_projects
- Lệnh:
bash
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
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
su - carol
- Carol vào
/home/company_projectsvà tạo một tệp:
bash
touch man.txt
- Giờ khi bạn liệt kê:
bash
-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_projectsgiờ 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.
- Tệp này được tạo bởi Alice khi nhóm vẫn là devs, nên nó giữ nguyên
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, chgrp và chmod, 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.