Bài viết sẽ hướng dẫn các bạn các bước thực hiện cấu hình cmd log trên hệ điều hành Linux. Cùng tìm hiểu chi tiết ngay sau đây nhé!
Ở phần trước chúng ta đã tìm hiểu về cách cấu hình Log tập trung, bạn có thể xem lại tại đây. Tiếp theo chúng ta sẽ tiếp tục tìm hiểu về các bước cấu hình cmd log trong bài viết dưới đây nhé.
1. Cmd log là gì? Tại sao lại cần cmd log
"Cmd log" thường được hiểu là việc lưu lại lịch sử các câu lệnh mà người dùng đã thực hiện trong Command Prompt (cmd) trên hệ điều hành. Điều này giúp theo dõi và ghi lại mọi hành động và lệnh mà người dùng thực hiện trong môi trường dòng lệnh. Dưới đây là một số lý do tại sao cần có cmd log:
- Giúp kiểm soát và theo dõi hành động của người dùng.
- Phân tích sự cố và Debug: Cmd log có thể được sử dụng để xem lại lịch sử các câu lệnh mà người dùng đã thực hiện giúp xác định và sửa lỗi nhanh chóng.
- Duy trì lịch sử hệ thống: Cmd log cũng hữu ích để duy trì lịch sử hệ thống. Việc theo dõi các thay đổi và hoạt động trong cmd giúp xác định khi nào, ai và làm gì trên hệ thống.
>>> Xem thêm: Log là gì? Syslog là gì? Rsyslog là gì? Nó hoạt động như thế nào?
2. Kiến thức hỗ trợ cấu hình cmd log
Để có thể thu thập các lệnh mà các user đã thực hiện ta cần phải biết những thứ sau
- Cách sử dụng logger trong Rsyslog để thu thập các thông điệp.
- Cách sử dụng các biến local trong Rsyslog.
- Biến PROMPT_COMMAND: Mỗi khi ta thực hiện bất kỳ câu lệnh nào thì những hành động trong biến PROMPT_COMMAND sẽ được thực hiện kèm theo và không lưu lại lịch sử các câu lệnh.
- file /etc/skel/ là thư mục chứa cấu hình mẫu mà mỗi khi user mới được tạo đều phải tuân theo.
- file ~/.bashrc là file mà mỗi lần có người đăng nhập vào sẽ khởi chạy 1 lần.
3. Thực hành cấu hình cmd log đối với CentOS 8
3.1 Đối với các user có từ trước
Các user đã tạo từ trước thì ta không thể chỉnh sửa file trong /etc/skel/ để áp dụng cho tất cả user nên ta cần đăng nhập vào user đó và sửa bằng tay. Ở đây mình lấy tài khoản root làm demo.
Sử file cấu hình .bashrc
vi ~/.bashrc |
Thêm vào nội dung sau:
# Command log export IP_CLIENT=$(who am i | awk '{print $5}') export PROMPT_COMMAND='logger -p local6.info "$(history 1 )"' export HISTTIMEFORMAT="$LOGNAME $IP_CLIENT %d/%m/%y %T " |
Giải thích:
- export IP_CLIENT=$(who am i | awk '{print $5}') : trích xuất biến IP đã thực hiện SSH vào máy.
- export HISTTIMEFORMAT="$LOGNAME $IP_CLIENT %d/%m/%y %T ": Thay đổi cấu trúc lưu lịch sử câu lệnh sẽ hiển thị theo User-IP máy đã SSH -Ngày giờ- Câu lệnh thực hiện.
- export PROMPT_COMMAND='logger -p local6.info "$(history 1 )"': Mõi khi có câu lệnh nào thực hiện thì sẽ thực hiện kèm theo lệnh logger để lưu lại lịch sử câu lệnh đó vào local6.info.
Một vài lưu ý:
- Biến PROMPT_COMMAND không cho phép sử dụng các câu lệnh lọc để lấy 1 phần của biến nên ở đây tôi đã khai báo biến IP_CLIENT rồi mới đưa vào logger.
- Nội dung đưa vào bằng logger phải đặt trong dấu "".
- ta có thể dùng biến local0-7 và phải chọn ra biến chưa được dùng đến để biết biến nào đã dùng ta phải vào file cấu hình của Rsyslog.
Tiến hành chạy lại file cấu hình mới:
. ~/.bashrc |
Chỉnh sửa lại cấu hình của rsyslog
vi /etc/rsyslog.conf |
Thêm dòng sau vào cuối
local6.* /var/log/cmd.log |
Tiến hành restart lại dịch vụ rsyslog
systemctl restart rsyslog |
3.2 Đối với các user chưa tạo
Đối với các user chưa tạo thì ta có thể tạo một mẫu sẵn để khi tạo user có thể ghi thêm vào log.
Chỉnh sửa file /etc/skel/.bashrc.
vi /etc/skel/.bashrc |
Thêm vào nội dung sau:
# Command log export IP_CLIENT=$(who am i | awk '{print $5}') export PROMPT_COMMAND='logger -p local6.info "$(history 1 )"' export HISTTIMEFORMAT="$LOGNAME $IP_CLIENT %d/%m/%y %T " |
Do tất cả các thông điệp sẽ được lệnh logger đẩy về local6 mà local 6 chỉ cần cấu hình 1 lần với Rsyslog là được.
4. Tiến hành kiểm tra kết quả
Thực hiện một vài lệnh với user root và xem lại lệnh đã lưu lại được hay chưa.
Tiến hành add thêm user mới và xem lịch sử câu lệnh đã được lưu hay chưa.
5. Thực hành cấu hình logrotate theo dung lượng file
Do các câu lệnh hoạt động và lưu lại một cách liên tục có thể dẫn đến file cmg.log sẽ chiếm quá nhiều dung lượng làm chậm hoạt động của máy. Để khắc phục điều đó ta cần đẩy các câu lệnh vào các file khác nhau theo thời gian và tiến hành xóa các file cũ đi.
Có rất nhiều cách cấu hình logrotate có thể đẩy tất cả các câu lệnh trong 1 tuần vào 1 file hoặc cứ 100Mb câu lệnh vào 1 file. Sau đó mới tiến hành xóa file cũ đi. Ở đây mình chọn cứ 100Mb câu lệnh sẽ được đặt vào 1 file.
Thêm file cấu hình logrotate của cmd.log.
vi /etc/logrotate.d/cmdlog |
Thêm vào nội dung sau:
/var/log/cmd.log { size 100M rotate 4 create dateext compress } |
Trong đó:
- size 100M : Dung lượng tối đa của file là 100 Mb
- rotate 4 : cho phép tối đa tạo ra 4 file
- create : tạo file mới mỗi ngày
- dateext: thêm ngày tháng vào tên file
- compress : cho phép nén file
Kiểm tra cấu hình bằng lệnh.
logrotate -d /etc/logrotate.d/cmdlog |
Thực hiện file cấu hình:
logrotate -f /etc/logrotate.d/cmdlog |
6. Một vài lưu ý khi cấu hình cmd log
Để có thể tạo ra các file lưu lịch sử thỉ biến PROMPT_COMMAND kết hợp với câu lệnh logger là thực sự cần thiết. Ta có thể thay thế biến local6 thành bất kỳ biến local0-7 nào khác miễn là bạn chưa sử dụng.
Hạn chế của của việc câu hình này là bạn phải biết trên máy của bạn có những user nào và vào từng mục home của user đó để có thể cấu hình file bashrc. Nếu có 1 user nào mà bạn quên không cấu hình thì lịch sử câu lệnh của user đó sẽ không được lưu lại.
Cấu hình logrotate là thực sự cần thiết vì bạn sẽ không thể biết được các lịch sử này sẽ chiếm bao nhiêu dung lượng và làm máy của bạn chậm như thế nào đâu.
Tổng kết
Đến đây là kết thúc phần hướng dẫn của mình về cmd log rồi. Mình tin là nếu các bạn đã đọc đến đây thì chắc chắn sẽ hiểu rõ về cách thực hiện và có thể tự mình cài đặt cấu hình. Việc cấu hình cmd log là thực sự cần thiết giúp bạn quản lý các user và thực hiện khắc phục lỗi một cách nhanh chóng và hiệu quả. Chúc các bạn thành công!