Khi sử dụng một máy chủ, ta cần theo dõi tính toàn vẹn của file. Khi file bị thay đổi ta cần được cảnh báo để có giải pháp xử lý.
Thông thường, ta sẽ có các máy chủ thực hiện giám sát. Tuy nhiên, ta không cần thiết phải cài đặt hệ thống giám sát nếu như chỉ để thực hiện việc này.
Trong bài viết này, Onet sẽ giới thiệu giải pháp đơn giản sử dụng script với Crontab để thực hiện việc cảnh báo.
MỤC LỤC
Đặt vấn đề
1. Sử dụng md5sum kiểm tra file
2. Hướng dẫn tạo script để cảnh báo bằng email sự thay đổi của file
3. Hướng dẫn tạo script để cảnh báo qua Telegram
Đặt vấn đề
Việc giám sát sự thay đổi của file thực sự quan trọng. Ví dụ, hệ thống của bạn đang chạy một dịch vụ web và hacker tấn công và thay đổi file index.php
để redirect sang trang web khác.
Khi đó, ta sẽ có một số câu hỏi đặt ra như: hacker đã làm thế nào, thời điểm bị tấn công, …. Thì việc sử dụng một giải pháp giám sát file sẽ giúp bạn biết được file nào đã bị thay đổi và thời điểm đã bị thay đổi.
Một số file quan trọng nên giám sát trên hệ thống:
- File user hệ thống :
/etc/passwd
- File lưu thông tin user và password của hệ thống:
/etc/shadow
- Các file cấu hình dịch vụ
- …
1. Sử dụng md5sum
để kiểm tra sự thay đổi của file
Mỗi file đều có một giá trị hash gồm 32 ký tự (128 bits).
Ví dụ: file1.txt
Hello! I'm Onet.
Ta sẽ kiểm tra mã md5 của file1.txt
md5sum file1.txt 481e81caeaac9019b9feb2c45ccea2c4 file1.txt
Ta thử thay đổi nội dung của file thành:
Hi! I am Onet.
Kiểm tra lại mã md5:
md5sum file1.txt c13f6dc26687f17da94114bf1b8ec355 file1.txt
Ta thấy : giá trị hash của file đã thay đổi khi ta có thay đổi về file.
2. Cảnh báo qua email
Yêu cầu của ví dụ:
- Sử dụng user với quyền
root
- Giám sát sự thay đổi của file
/etc/passwd
- Sử dụng SSMTP để gửi mail cảnh báo
- Sử dụng crontab để tạo lịch kiểm tra file
- Đã cài đặt md5sum
Thực hiện:
1. Cài đặt dịch vụ gửi mail SSMTP
2. Tạo một file để lưu mã hash của file /etc/passwd
touch /opt/passwd.md5
3. Tạo script
Vị trí để file trong bài viết này, ta để tại /opt/scripts/checkuser.sh
. Và mỗi lần script chạy, ta sẽ ghi lại log tại /var/log/checkuser.log
#!/bin/bash DATE=$(date "+%d %b %Y %H:%M") MAIL="[email protected]" if md5sum -c /opt/passwd.md5; then echo "$DATE : OK" >> /var/log/checkuser.log else (echo "Subject:File changed"; echo "File /etc/passwd changed on $HOSTNAME!";) | /usr/sbin/sendmail $MAIL md5sum /etc/passwd > /opt/passwd.md5 echo "$DATE : error : File /etc/passwd changed" >> /var/log/checkuser.log fi
Trong đó: MAIL
sẽ là biến lưu địa chỉ mail bạn muốn nhận cảnh báo
4. Phân quyền cho file script
chmod +x /opt/scripts/checkuser.sh
5. Đặt crontab
crontab -e
Thêm cronjob thực hiện chạy file script kiểm tra 30 phút 1 lần
*/30 * * * * /opt/scripts/checkuser.sh > /dev/null 2>&1
6. Kiểm tra
File /etc/passwd
sẽ thay đổi khi ta thêm hoặc xóa user. Ta sẽ thử thêm user vào hệ thống:
useradd Onet
Ta có thể chạy trực tiếp bằng cách chạy file script. Hoặc đặt crontab khoảng thời gian ngắn khoảng 2, 3 phút để kiểm tra. Sau đó, ta sẽ nhận được một email cảnh báo sự thay đổi của file tương tự như sau:
Kiểm tra file log, ta cũng sẽ thấy quá trình chạy script được ghi lại.
tail -f /var/log/checkuser.log
3. Cảnh báo qua telegram
Tham khảo cách tạo bot telegram tại đây.
Tương tự như cảnh báo qua mail. Ta sẽ sử dụng bot Telegram để bắn cảnh báo.
Nội dung script:
#!/bin/bash DATE=$(date "+%d %b %Y %H:%M") TOKEN="<token_IP_Telegram_bot>" ID="<ID_chat>" URL="https://api.telegram.org/bot$TOKEN/sendMessage" IP=$(hostname -I) if md5sum -c /root/passwd.md5 ; then echo "$DATE : OK" >> /var/log/checkuser.log else MESS=$(echo -e "$DATE nIP $IP nFile /etc/passwd changed on $HOSTNAME!") curl -s -X POST $URL -d chat_id=$ID -d text="$MESS" md5sum /etc/passwd > /root/passwd.md5 echo "$DATE : error : File /etc/passwd changed" >> /var/log/checkuser.log fi
Lưu ý: ID
và TOKEN
sẽ là ID chat và API token của bot Telegram của bạn.
Kiểm tra tương tự như gửi mail. Ta sẽ thấy thông báo tương tự như sau:
Chúc các bạn thành công !
Tham khảo: https://ixnfo.com/en/file-integrity-check-script.html