
Thực hành tổng hợp Linux Essentials: dữ liệu, script và quyền
Thực hành Linux với ticket giả lập: tạo script đếm, kiểm tra lỗi, giới hạn dữ liệu, phục hồi TAR và xác minh báo cáo HTTP loopback bằng so sánh byte.

Tạo người dùng Linux và nhóm trong lab riêng; kiểm tra home, skeleton, nhóm bổ sung, khóa mật khẩu và phạm vi xóa tài khoản trước khi áp dụng thực tế.
Một ticket yêu cầu “tạo user cho nhân viên mới” còn thiếu nhiều dữ kiện: người đó làm việc trên máy nào, cần nhóm nào, ai phê duyệt và dữ liệu sẽ được xử lý thế nào khi nghỉ việc? Tạo được tên đăng nhập mới chỉ là một bước trong quản lý danh tính. Bài này tập trung vào công cụ tài khoản cục bộ và cách kiểm chứng từng thay đổi.
Bạn sẽ tạo người dùng cùng home rõ ràng, thêm nhóm bổ sung mà giữ nhóm đã có, đọc trạng thái mật khẩu và phân biệt khóa mật khẩu với thu hồi mọi quyền truy cập. Kiến thức cần trước là UID/GID, shell và quyền nâng cao ở bài 19. Chưa cần cấu hình hệ thống danh tính tập trung.
Khung giáo trình: 010-160 mục 5.2, trang in 372–390, trang PDF 381–399; đối chiếu 015.2 của 010-200. Ngày cập nhật: 23/10/2026. Lab chạy trong container Ubuntu 26.04.1 LTS ARM64 dùng một lần, không có mạng ngoài, không mount thư mục host. Tài khoản và nhóm mẫu chỉ tồn tại trong container; không áp dụng tên mẫu lên máy công ty.
Các công cụ useradd, usermod, userdel chủ yếu quản lý cơ sở dữ liệu tài khoản cục bộ. Nếu tổ chức dùng LDAP, Active Directory hoặc hệ thống cấp quyền khác, sửa tệp cục bộ chưa chắc thay đổi danh tính mà ứng dụng đang dùng. Cần xác định nguồn chính thức và thực hiện qua quy trình của nguồn đó.
getent passwd TEN truy vấn theo cơ chế NSS của hệ thống. Tên đã xuất hiện có thể thuộc nguồn ngoài; không tạo thêm tài khoản cục bộ cùng tên để “sửa” lỗi. Tương tự, một UID có thể còn sở hữu dữ liệu dù tên tài khoản đã bị xóa. Việc tái sử dụng số định danh cần được quản lý, tránh giao dữ liệu cũ cho người mới ngoài ý muốn.
Một phiếu cấp tài khoản nên ghi máy/phạm vi, chủ sở hữu, mục đích, nhóm chính, nhóm bổ sung, shell, home và thời hạn nếu có. Nhóm chỉ nên phục vụ nhu cầu truy cập xác định. Thêm người dùng vào nhóm quản trị hoặc nhóm cho phép điều khiển nền tảng container có thể cấp quyền rất rộng, không phải bước mặc định của onboarding.

| Công cụ | Công việc | Cần kiểm chứng |
|---|---|---|
useradd |
Tạo tài khoản | UID, home, shell, nhóm |
usermod |
Sửa thuộc tính tài khoản | Giá trị mới và nhóm giữ lại |
groupadd, groupmod |
Tạo hoặc sửa nhóm | Tên/GID và người đang dùng |
passwd |
Đổi mật khẩu hoặc quản lý trạng thái liên quan | Chính sách và đường xác thực |
userdel, groupdel |
Xóa bản ghi theo phạm vi công cụ | Dữ liệu, tiến trình và quyền còn lại |
Các tệp /etc/passwd, /etc/group, /etc/shadow, /etc/gshadow liên quan tới tài khoản và nhóm cục bộ. Không chỉnh bằng cách nối dòng tùy ý. Công cụ chuyên dụng xử lý ràng buộc và khóa dữ liệu tốt hơn việc sửa text đơn giản. Bản sao chứa shadow vẫn nhạy cảm, không đính kèm vào bài tập hoặc ticket.
/etc/skel thường cung cấp nội dung khởi tạo home khi tạo người dùng. Nó không phải cơ chế tự đồng bộ thay đổi tới mọi home đã tồn tại. Thay một tệp skeleton hôm nay không đảm bảo cấu hình người dùng cũ ngày mai đã đổi. Trong lab, chúng ta dùng skeleton riêng chỉ có một tệp giả lập để dễ chứng minh.
Chạy trong shell quản trị của container lab dùng một lần. Các lệnh thay đổi cơ sở dữ liệu trong container. Trước khi tạo, kiểm tra tên:
getent passwd lpi_learner
getent group lpi_team
getent group lpi_extra
Ở lab mới, các truy vấn không có bản ghi và trả trạng thái không thành công. Nếu tên đã có, dừng để xác định nguồn gốc; không xóa tài khoản đó để làm cho ví dụ chạy. Mã thoát khác 0 của truy vấn là dữ kiện cần đọc theo công cụ, không tự động có nghĩa hệ thống hỏng.
Tạo hai nhóm và một thư mục mẫu nhỏ:
groupadd lpi_team
groupadd lpi_extra
mkdir -p /tmp/lpi-skel
printf '%s\n' 'LPI starter fixture' > /tmp/lpi-skel/welcome.txt
useradd -m -U -k /tmp/lpi-skel -s /bin/bash \
-G lpi_team lpi_learner
Theo manual useradd của shadow-utils, -m yêu cầu tạo home, -U tạo nhóm riêng cùng tên, -k chọn skeleton và -s chọn shell. -G ở đây thêm nhóm bổ sung. Việc ghi rõ lựa chọn giúp bài không phụ thuộc hoàn toàn vào mặc định từng distro.
Không suy ra useradd TEN luôn tạo home hoặc đặt shell bạn mong muốn. Các giá trị mặc định có thể khác. adduser trên một số bản phân phối là công cụ cấp cao hơn; không coi hai tên lệnh là hai cách viết của cùng chương trình. Khi vận hành thật, chọn công cụ được distro và tổ chức hỗ trợ.
getent passwd lpi_learner
id lpi_learner
getent group lpi_team
ls -l /home/lpi_learner/welcome.txt
cmp /tmp/lpi-skel/welcome.txt /home/lpi_learner/welcome.txt
Kết quả mong đợi: home là /home/lpi_learner, shell /bin/bash, nhóm bổ sung có lpi_team. cmp không in khác biệt và trả 0 khi hai tệp giống byte. Bộ kiểm thử còn so UID chủ sở hữu tệp với UID người dùng mới. Tên và số UID có thể khác theo image; chúng không cần cố định để lab đạt.
Home tồn tại chưa chứng minh mọi dịch vụ đăng nhập đã sẵn sàng. Lab không đặt mật khẩu hoặc cấu hình SSH cho tài khoản mới. Người dùng có bản ghi trong cơ sở dữ liệu và khả năng xác thực thành công là hai điều kiện riêng, còn chính sách ứng dụng có thể thêm điều kiện khác.
Danh sách thành viên trong /etc/group không phải lúc nào cũng lặp lại người dùng có nhóm đó làm nhóm chính. Dùng kết hợp bản ghi passwd và id để hiểu quan hệ. Đừng kết luận người dùng không thuộc nhóm chính chỉ vì không thấy tên ở trường thành viên bổ sung.

-aGGiả sử người học đã thuộc lpi_team và cần thêm lpi_extra. Trong lab:
usermod -aG lpi_extra lpi_learner
id -Gn lpi_learner
Theo manual usermod, -a dùng cùng -G để nối thêm nhóm bổ sung. Bỏ -a có thể thay danh sách nhóm bổ sung bằng danh sách mới, làm mất nhóm đang cần. Đây là lý do một lệnh nhìn có vẻ thành công vẫn có thể làm người dùng mất truy cập nơi khác.
Kết quả phải giữ lpi_team và có thêm lpi_extra. Kiểm tra tài khoản mới trong cơ sở dữ liệu là một bước; kiểm tra tiến trình người dùng là bước tiếp theo. Phiên đã mở trước thay đổi có thể vẫn giữ tập nhóm cũ. Lab tự động tạo tiến trình mới bằng runuser và đọc nhóm trong tiến trình đó; nó không chứng minh phiên desktop cũ đã cập nhật.
Trong môi trường làm việc, đăng nhập lại theo quy trình và xác nhận truy cập đúng tài nguyên. Không khuyến nghị thoát phiên khi người dùng chưa lưu công việc. Cũng không thêm hàng loạt nhóm dựa trên tên “có vẻ liên quan”; ghi lại nhóm được cấp và người phê duyệt.
Lệnh passwd đổi mật khẩu qua lời nhắc tương tác, chịu chính sách hệ thống. Không truyền mật khẩu thật trong đối số hoặc lưu vào script. Bài này chưa kiểm thử nhập mật khẩu tương tác; lab chỉ đọc trạng thái và khóa mật khẩu của fixture chưa dùng đăng nhập:
passwd -S lpi_learner
passwd -l lpi_learner
passwd -S lpi_learner
Theo manual passwd, khóa mật khẩu không nhất thiết khóa mọi đường truy cập. SSH public key hoặc cơ chế khác có thể còn được dùng tùy cấu hình. Trong lab, trạng thái password là L; điều đó không được quảng bá thành “đã thu hồi toàn bộ danh tính”.
Tuổi mật khẩu và ngày hết hạn tài khoản cũng khác nhau. Một cơ chế quản lý hết hạn không tự thay thế việc thu hồi phiên, khóa token hoặc chuyển quyền dữ liệu. Không áp dụng lịch đổi mật khẩu tùy tiện chỉ vì công cụ có tham số; chính sách cần được xác định cho hệ thống và loại xác thực thực tế.
Không đọc bản băm để kiểm tra mật khẩu người dùng có “đúng” hay không. Khi hỗ trợ đặt lại, dùng luồng được tổ chức cho phép, xác minh danh tính người yêu cầu và bàn giao qua kênh bảo vệ. Các vấn đề về MFA, passkeys và vòng đời credential sẽ được đào sâu trong nhánh Security Essentials.
Trong lab, chúng ta xóa tài khoản mẫu không kèm -r:
userdel lpi_learner
getent passwd lpi_learner
ls -l /home/lpi_learner/welcome.txt
groupdel lpi_team
groupdel lpi_extra
Mong đợi bản ghi người dùng không còn, trong khi tệp fixture ở home vẫn tồn tại. Container sau đó được hủy toàn bộ. Đây là kiểm chứng phạm vi xóa của phép thử, không phải đề xuất để lại dữ liệu nhân viên trên máy lâu dài.
Manual userdel mô tả -r có thể xóa home và mail spool; tệp ở vị trí khác vẫn cần được xem xét. Tùy chọn này gây mất dữ liệu, vì vậy không được thêm theo thói quen. Không dùng --force để bỏ qua tiến trình hoặc kiểm tra an toàn khi chưa hiểu nguyên nhân.
Quy trình offboarding thực tế cần kiểm kê tài khoản, phiên, job, khóa SSH, token ứng dụng, dữ liệu thuộc UID cũ và nghĩa vụ lưu giữ. Có thể phải chuyển chủ sở hữu hoặc lưu trữ trước khi xóa. Bài không chạy quy trình đó trên người thật và không khẳng định userdel thu hồi được tài khoản ở dịch vụ ngoài.
-m và -s? Để yêu cầu home và shell cụ thể thay vì đoán mặc định.usermod -G khác -aG ở đâu? Một bên đặt danh sách nhóm bổ sung, bên kia nối thêm vào danh sách đang có.passwd -l đủ để chặn mọi SSH chưa? Chưa, còn đường xác thực và policy khác.Bạn đạt lab khi chứng minh được bản ghi đúng, tệp skeleton được sao chép với chủ sở hữu đúng, nhóm cũ giữ lại sau khi thêm nhóm mới và home còn sau phép xóa không -r. Các bằng chứng này được thu trong container dùng một lần; chưa nghiệm thu hệ thống danh tính tập trung, đặt mật khẩu tương tác hoặc offboarding nhân viên.
Nguồn giáo trình là khung đối chiếu; bài viết, fixture và hình được biên soạn độc lập. Đối chiếu thêm mục tiêu hiện hành của LPI và manual dự án tại các phần liên quan, kiểm tra phiên bản công cụ trên máy trước khi áp dụng.

Thực hành Linux với ticket giả lập: tạo script đếm, kiểm tra lỗi, giới hạn dữ liệu, phục hồi TAR và xác minh báo cáo HTTP loopback bằng so sánh byte.

Hiểu thư mục tạm và tệp đặc biệt Linux; thử mktemp, sticky bit, hard link và symlink, kiểm tra đích sau di chuyển và phân biệt liên kết với backup.

Đọc quyền tệp Linux, owner và group; thử chmod, chown, search thư mục và umask bằng tài khoản không root, phân biệt ghi nội dung với xóa tên tệp.

Hiểu người dùng Linux qua UID, GID và tài khoản dịch vụ; thực hành quyền sudo giới hạn, xác thực SSH và kiểm tra host key trong lab cô lập riêng.