Checkpoint Module 01: trang trạng thái nội bộ
Tự thiết kế giải pháp theo yêu cầu, rồi kiểm tra từng tiêu chí.
Bối cảnh
Đội vận hành cần một trang trạng thái nội bộ đơn giản trên server lab. Bài này là challenge: chỉ có yêu cầu và tiêu chí nghiệm thu, không có lệnh mẫu. Bạn tự thiết kế giải pháp bằng những gì đã học ở Module 01. Hoàn thành checkpoint cùng ba bài Break/Fix là mốc "làm được" của Module 01.
Mục tiêu
- Tự thiết kế và vận hành một dịch vụ nhỏ từ yêu cầu, không dựa vào lệnh mẫu.
- Kết hợp user, quyền, systemd service, timer và firewall trong một hệ thống.
- Chứng minh cấu hình còn đúng sau reboot.
Yêu cầu
- Tài khoản dịch vụ: dịch vụ chạy bằng system user
kdc-status, không đăng nhập được. - Nội dung: trang tĩnh nằm trong
/srv/kdc-status, thư mục thuộckdc-status, quyền750. Trang phải chứa chuỗiKDC-STATUS. - Dịch vụ web:
kdc-status.servicephục vụ thư mục trên ở port 9090, nghe trên mọi interface để máy khác truy cập được. Tự restart khi tiến trình lỗi, tự chạy khi boot. - Firewall: firewalld cho phép
9090/tcp, giữ nguyên sau khi reload firewall và sau reboot. Không được mất SSH. - Snapshot định kỳ:
kdc-status-snapshot.timerchạy mỗi 10 phút, chạy bù khi máy tắt đúng giờ. Mỗi lần chạy ghi đè/var/lib/kdc-status/snapshot.txtgồm thời điểm chạy, trạng tháikdc-status.servicevà dung lượng còn trống của/. Thư mục/var/lib/kdc-statuskhông cho người ngoài đọc. - Bền vững: mọi thứ trên hoạt động sau một lần reboot.
Đọc các lệnh nghiệm thu
Các lệnh sau dùng để quan sát, giúp bạn tự đánh giá giải pháp; bạn vẫn tự viết lệnh tạo user, service, timer và firewall từ các bài trước.
| Lệnh / thành phần | Ý nghĩa và cách đọc |
|---|---|
getent passwd <user> | Xem bản ghi tài khoản; trường cuối cần là shell nologin. |
stat -c '%U %a' <thư-mục> | -c chọn định dạng; %U in owner, %a in quyền dạng số. Kết quả mong đợi trong bài là kdc-status 750. |
750 | Owner đọc/ghi/truy cập (7), group đọc/truy cập (5), other không có quyền (0). |
curl -s <URL> | Gửi request và in nội dung trang, ẩn progress/lỗi; thêm -S hoặc bỏ -s nếu cần thấy lỗi. Chạy trên laptop để kiểm tra truy cập qua mạng/firewall. |
firewall-cmd --query-port=9090/tcp | Hỏi runtime có rule cho phép port/giao thức này không; thêm --permanent để hỏi cấu hình đã lưu. Rule được phép cần in yes. |
systemctl list-timers <timer> | Xem lịch timer, đặc biệt cột NEXT và lần chạy gần nhất. |
systemctl reboot | Khởi động lại VM; phiên SSH và agent đang chạy sẽ ngắt, cần đăng nhập và chạy lại agent/tunnel. Thường cần sudo. |
Các <...> trong mẫu là giá trị cần thay, không gõ nguyên dấu ngoặc. Xem lại bài quyền, service, timer và firewall nếu cần nhớ cách cấu hình.
Tiêu chí nghiệm thu
| # | Kiểm chứng được bằng |
|---|---|
| 1 | getent passwd kdc-status cho shell nologin |
| 2 | stat -c '%U %a' /srv/kdc-status → kdc-status 750 |
| 3 | curl -s http://<ip-của-vm>:9090/ từ máy của bạn trả trang chứa KDC-STATUS |
| 4 | firewall-cmd --query-port=9090/tcp và firewall-cmd --permanent --query-port=9090/tcp đều yes |
| 5 | systemctl list-timers kdc-status-snapshot.timer có lần chạy kế tiếp; snapshot.txt cập nhật sau mỗi lần chạy |
| 6 | Tất cả vẫn đúng sau systemctl reboot |
Agent kiểm tra từ bên trong VM. Tiêu chí 3 từ máy của bạn chỉ để bạn tự xác nhận firewall hoạt động thật.
Ràng buộc
- Không chạy dịch vụ web bằng root.
- Không tắt firewalld, không tắt SELinux.
- Không dùng cron cho snapshot.
Lưu ý môi trường
- firewalld chưa chạy (thường gặp với cloud image): cài và bật nó. Trước khi bật, kiểm tra dịch vụ
sshcó trong zone mặc định để không tự khóa mình. - VPS có IP công khai: trang này sẽ truy cập được từ Internet. Chỉ đặt nội dung không nhạy cảm. Dọn dẹp sau khi đạt.
- Ubuntu: dùng firewalld thay cho ufw trong bài này (
apt install firewalld, tắt ufw trước).
Gợi ý (chỉ mở khi bế tắc)
- Mức 1, hướng nhìn: chia bài thành sáu yêu cầu độc lập; kiểm tra từng yêu cầu ngay sau khi làm, đừng đợi tới cuối.
- Mức 2, công cụ:
systemd-analyze verify <unit>,systemd-analyze calendar,firewall-cmd --list-all,ss -ltnp,journalctl -u <unit> -b. - Mức 3, một bước:
firewall-cmd --add-portchỉ đổi runtime; xem--permanentvà--runtime-to-permanent. Với snapshot, xem lạiStateDirectory=ở bài timer.
Tự kiểm tra trước khi bấm Kiểm tra
Reboot VM, đăng nhập lại, bật lại tunnel và agent, rồi tự chạy lại toàn bộ bảng tiêu chí nghiệm thu. Sau đó chọn server và bấm Kiểm tra kết quả.
Dọn dẹp (sau khi đạt)
Gỡ port khỏi firewall (runtime và permanent), disable và xóa service, timer, user, các thư mục /srv/kdc-status và /var/lib/kdc-status, rồi daemon-reload. Tự viết các lệnh này, đó là một phần của bài.