Giám sát phiên người dùng: Tại sao nhật ký tiêu chuẩn là chưa đủ
Quản lý các máy chủ production thường giống như công việc điều tra dấu vết. Bạn thấy một dịch vụ bị ngừng hoạt động, bạn thấy một bản đăng nhập từ một dev cấp cao, nhưng bash_history lại trống rỗng một cách đáng ngờ. Các nhật ký truyền thống như auth.log xác nhận ai đã đăng nhập, nhưng chúng không ghi lại được mục đích thực sự hoặc những gì người dùng đã thấy trên màn hình. Một lệnh đơn giản như unset HISTFILE hoặc một sub-shell có thể xóa sạch dấu vết của người dùng ngay lập tức, khiến bạn không biết chuyện gì đã xảy ra khi một tệp cấu hình biến mất.
Ghi lại phiên làm việc (Session recording) lấp đầy khoảng trống này bằng cách hoạt động như một hộp đen cho terminal của bạn. Trước khi cấu hình giám sát, tôi luôn đảm bảo các điểm truy cập quản trị của mình được bảo mật tuyệt đối. Tôi sử dụng trình tạo mật khẩu tại toolcraft.app để tạo các khóa có độ hỗn loạn (entropy) cao. Nó chạy cục bộ trong trình duyệt, vì vậy không có dữ liệu nhạy cảm nào được gửi qua mạng. Sau khi quyền truy cập đã được bảo mật, tôi triển khai tlog để cung cấp một lộ trình giám sát minh bạch và chống giả mạo.
So sánh các phương pháp ghi lại phiên làm việc
Linux cung cấp một vài cách để theo dõi hoạt động của người dùng, nhưng chúng khác nhau đáng kể về độ tin cậy và tính dễ sử dụng.
Lệnh ‘script’
Hầu hết các bản phân phối Linux đều bao gồm công cụ script theo mặc định. Nó ghi lại một phiên terminal vào một tệp văn bản cục bộ. Tuy nhiên, đây chưa phải là một công cụ giám sát chuyên nghiệp. Người dùng có thể dễ dàng dừng việc ghi âm, và các tệp kết quả thường là những bản thảo lộn xộn, khó tìm kiếm hoặc phát lại trong thời gian thực.
Các giải pháp PAM thương mại
Các bộ quản lý truy cập đặc quyền (PAM) như CyberArk hoặc BeyondTrust là những giải pháp hạng nặng. Chúng hoạt động như một proxy giữa người dùng và máy chủ, cung cấp các tính năng mạnh mẽ. Tuy nhiên, chúng thường yêu cầu ngân sách lên tới hàng chục ngàn đô la và hạ tầng phức tạp mà hầu hết các đội ngũ nhỏ không thể đáp ứng.
Cách tiếp cận của tlog
tlog là một gói mã nguồn mở được xây dựng để ghi nhật ký tập trung. Nó không ghi vào một tệp cục bộ mà người dùng có thể xóa. Thay vào đó, nó truyền dữ liệu phiên—bao gồm cả thời gian chính xác—đến systemd journal dưới dạng JSON có cấu trúc. Khi kết hợp với Cockpit, nó cung cấp một giao diện giống như YouTube để xem chính xác những gì đã xảy ra trên màn hình.
Ưu và nhược điểm của tlog
Mọi công cụ đều có sự đánh đổi. Đây là những gì tôi đã quan sát được sau khi triển khai tlog trong các môi trường production different.
- Ưu điểm:
- Dữ liệu có cấu trúc: Đầu ra JSON cho phép bạn chuyển nhật ký trực tiếp vào Elasticsearch hoặc Graylog để thiết lập cảnh báo tự động.
- Phát lại chính xác: Nó ghi lại thời gian nhấn phím. Bạn có thể thấy người dùng đang copy-paste các lệnh hay đang gõ thủ công.
- Tích hợp SSSD: Bạn có thể bắt buộc ghi lại phiên cho các nhóm cụ thể (như các cộng tác viên bên ngoài) mà không cần thay đổi shell mặc định của họ.
- Tốn ít tài nguyên: Nó tiêu thụ lượng CPU không đáng kể. Một phiên làm việc tiêu chuẩn 10 phút thường chỉ thêm chưa đến 200KB vào nhật ký của bạn.
- Nhược điểm:
- Chỉ dành cho CLI: Nó không ghi lại được các hoạt động GUI trong X11 hoặc Wayland.
- Phình to nhật ký: Chạy lệnh
tail -ftrên một tệp log bận rộn trong khi đang được ghi lại có thể tạo ra hàng megabyte dữ liệu chỉ trong vài giây. - Lỗ hổng cấu hình: Nếu bạn không sử dụng SSSD để thực thi việc ghi lại, một người dùng thông minh có thể bỏ qua lớp bảo vệ này.
Bộ công cụ khuyến nghị
Để có một thiết lập tin cậy, tôi khuyên bạn nên sử dụng các hệ thống dựa trên RHEL như AlmaLinux hoặc Rocky Linux, mặc dù Ubuntu 22.04+ cũng hoạt động rất tốt. Bạn sẽ cần tlog để ghi lại, SSSD để quản lý và Cockpit cho giao diện trực quan.
Triển khai từng bước
Hướng dẫn này sử dụng AlmaLinux cho các ví dụ, vì khả năng tích hợp Cockpit hoàn thiện nhất trên các dẫn xuất của RHEL.
1. Cài đặt các gói phần mềm
Cài đặt agent ghi lại và plugin Cockpit. Sau đó, đảm bảo giao diện web đã được kích hoạt.
sudo dnf install tlog sssd cockpit-session-recording -y
sudo systemctl enable --now cockpit.socket
2. Bắt buộc ghi lại qua SSSD
Phương pháp an toàn nhất là bắt buộc bao bọc phiên thông qua SSSD. Điều này đảm bảo việc ghi lại bắt đầu ngay khi người dùng xác thực. Tạo một tệp cấu hình mới cho các quy tắc ghi lại phiên.
sudo nano /etc/sssd/conf.d/session_recording.conf
Để ghi lại mọi người dùng trên hệ thống, hãy sử dụng cấu hình sau:
[session_recording]
scope = all
Nếu bạn chỉ muốn theo dõi các nhóm cụ thể, như ‘contractors’ hoặc ‘wheel’, hãy thay đổi scope thành some và liệt kê các nhóm đó. Hãy thiết lập quyền nghiêm ngặt cho tệp này, nếu không SSSD sẽ từ chối khởi động.
sudo chmod 600 /etc/sssd/conf.d/session_recording.conf
sudo systemctl restart sssd
3. Tinh chỉnh cài đặt tlog
Kiểm tra cấu hình tại /etc/tlog/tlog-rec-session.conf. Đảm bảo writer được đặt thành “journal” để ngăn người dùng can thiệp vào các tệp đầu ra.
{
"writer": "journal",
"latency": 10,
"payload": 2048
}
4. Xác minh việc ghi lại
Đăng nhập với tư cách người dùng bình thường qua SSH. Bạn có thể thấy một thông báo cho biết phiên làm việc đang được giám sát. Chạy một vài lệnh để tạo dữ liệu.
ssh myuser@server-ip
ls -la /etc/
sudo systemctl status nginx
exit
5. Phát lại phiên làm việc
Bạn có hai cách để xem lại dữ liệu. Phương pháp dòng lệnh thì nhanh, nhưng giao diện web trực quan hơn nhiều.
Phương pháp CLI
Tìm kiếm trong journal và chuyển dữ liệu vào trình phát:
journalctl -o export | tlog-play -i
Giao diện Cockpit
Truy cập vào https://your-server-ip:9090 và đăng nhập. Nhấp vào Session Recording ở thanh bên. Bạn sẽ thấy danh sách các phiên với mốc thời gian và thời lượng. Nhấp vào Play để xem phiên làm việc diễn ra chính xác như những gì người dùng đã thấy.
Lưu ý về bảo mật và tuân thủ
Triển khai mới chỉ là một nửa chặng đường. Bạn cũng phải quản lý dữ liệu một cách có trách nhiệm.
Bảo vệ nhật ký: tlog ghi lại mọi thứ, bao gồm cả các bí mật (secrets) nếu người dùng chạy lệnh cat .env. Hãy giới hạn quyền truy cập vào journal và Cockpit cho một nhóm nhỏ các kiểm toán viên đáng tin cậy.
Quản lý dung lượng đĩa: Sử dụng SystemMaxUse trong /etc/systemd/journald.conf để giới hạn kích thước nhật ký. Nếu không có điều này, một người dùng duy nhất chạy lệnh debug chi tiết có thể làm đầy phân vùng /var của bạn.
Minh bạch về pháp lý: Luôn cập nhật /etc/motd của bạn để thông báo cho người dùng rằng họ đang được ghi lại. Đây thường là yêu cầu pháp lý về quyền riêng tư tại nơi làm việc.
Việc triển khai tlog đã giúp tôi tiết kiệm vô số giờ khắc phục sự cố. Thay vì đoán xem điều gì đã làm hỏng dịch vụ, tôi có thể xem lại bản ghi và phát hiện chính xác lỗi đánh máy. Đây là một cách nhẹ nhàng, hiệu quả để mang lại trách nhiệm giải trình toàn diện cho hạ tầng Linux của bạn.

