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, Cloud365 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 Cloud365.

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 Cloud365.

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ụ:

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="youremail@gmail.com"

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 cloud365

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:

Email cảnh báo lúc 21:53

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 ý: IDTOKEN 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:

Cảnh báo file thay đổi qua Telegram

Chúc các bạn thành công !

Chuỗi bài viết về script.

Tham khảo: https://ixnfo.com/en/file-integrity-check-script.html