Giám Sát Thay Đổi File Trên Server: Bảo Vệ Dữ Liệu và Phát Hiện Xâm Nhập
Giới Thiệu
Trong thế giới an ninh mạng hiện đại, việc giám sát thay đổi file trên server là một yếu tố then chốt để bảo vệ hệ thống khỏi các mối đe dọa. Bất kỳ thay đổi trái phép nào đối với các file cấu hình, file dữ liệu hoặc file mã nguồn có thể là dấu hiệu của một cuộc tấn công mạng, một lỗi cấu hình nghiêm trọng, hoặc thậm chí là hoạt động của phần mềm độc hại. Giám sát thay đổi file (File Integrity Monitoring - FIM) giúp bạn phát hiện sớm các sự cố này, từ đó có thể phản ứng kịp thời để giảm thiểu thiệt hại.
Bài viết này sẽ hướng dẫn bạn cách thiết lập giám sát thay đổi file trên server Linux bằng cách sử dụng các công cụ có sẵn của hệ điều hành, tập trung vào auditd để giám sát toàn diện và inotify-tools để giám sát theo thời gian thực.
📋 Thời gian: 30 phút | Độ khó: Trung bình
Yêu Cầu
Để thực hiện theo hướng dẫn này, bạn cần:
- Một server Linux (Ubuntu, CentOS, Debian, Fedora, v.v.).
- Quyền truy cập
roothoặc người dùng có quyềnsudo. - Kiến thức cơ bản về dòng lệnh Linux.
Các Bước Thực Hiện
Bước 1: Giám Sát Thay Đổi File với Auditd (Hệ Thống Kiểm Toán Linux)
auditd là một hệ thống kiểm toán mạnh mẽ trên Linux, cho phép bạn ghi lại các sự kiện liên quan đến bảo mật, bao gồm cả việc truy cập, sửa đổi, tạo hoặc xóa file.
1.1. Cài đặt Auditd
Nếu auditd chưa được cài đặt, hãy cài đặt nó:
# Đối với hệ thống dựa trên Debian/Ubuntu
sudo apt update
sudo apt install auditd audispd-plugins -y
# Đối với hệ thống dựa trên RHEL/CentOS/Fedora
sudo yum install audit audit-libs -y
# Hoặc với dnf trên Fedora/RHEL 8+
sudo dnf install audit audit-libs -y
Sau khi cài đặt, hãy khởi động và bật dịch vụ:
sudo systemctl enable auditd
sudo systemctl start auditd
✅ Thành công: auditd đã được cài đặt và khởi động.
1.2. Cấu hình Auditd để giám sát file/thư mục
Chúng ta sẽ thêm các quy tắc vào cấu hình của auditd để giám sát các đường dẫn cụ thể. Các file cấu hình thường nằm trong /etc/audit/rules.d/.
💡 Mẹo: Luôn tạo một file quy tắc riêng biệt để dễ quản lý.
Ví dụ, để giám sát thư mục /etc (chứa các file cấu hình quan trọng) và /var/www (chứa mã nguồn website):
# Tạo một file quy tắc mới (ví dụ: custom_fim.rules)
sudo nano /etc/audit/rules.d/custom_fim.rules
Thêm các dòng sau vào file:
# Giám sát tất cả các thay đổi (ghi, thuộc tính, đọc, thực thi) cho thư mục /etc
-w /etc/ -p wra -k system_config_changes
# Giám sát tất cả các thay đổi cho thư mục /var/www
-w /var/www/ -p wra -k web_root_changes
# Giám sát các file quan trọng khác (ví dụ: /bin, /usr/bin)
-w /bin/ -p wra -k system_binaries
-w /usr/bin/ -p wra -k user_binaries
# Giám sát các thay đổi quyền sở hữu hoặc quyền của các file quan trọng
-a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k file_permission_changes
-a always,exit -F arch=b64 -S chown -S fchown -S fchownat -F auid>=1000 -F auid!=4294967295 -k file_ownership_changes
# LƯU Ý:
# -w: Giám sát một file hoặc thư mục.
# -p: Các quyền được giám sát:
# r = read (đọc)
# w = write (ghi)
# x = execute (thực thi)
# a = attribute (thay đổi thuộc tính file, ví dụ: quyền, sở hữu)
# -k: Từ khóa để dễ dàng tìm kiếm trong log.
Lưu và đóng file. Sau đó, tải lại các quy tắc auditd:
sudo augenrules --load
# Hoặc khởi động lại dịch vụ
# sudo systemctl restart auditd
⚠️ Cảnh báo: Giám sát quá nhiều thư mục hoặc file có thể tạo ra lượng log khổng lồ và ảnh hưởng đến hiệu suất. Hãy chọn lọc các đường dẫn quan trọng.
1.3. Xem log Auditd
Các sự kiện được ghi lại bởi auditd nằm trong /var/log/audit/audit.log. Bạn có thể sử dụng ausearch để lọc và tìm kiếm các sự kiện.
Để xem các sự kiện liên quan đến từ khóa system_config_changes:
sudo ausearch -k system_config_changes -i
Để xem tất cả các sự kiện gần đây:
sudo tail -f /var/log/audit/audit.log
Để xem các sự kiện được ghi lại trong một khoảng thời gian cụ thể:
# Ví dụ: từ 9h sáng đến 5h chiều hôm nay
sudo ausearch -ts today 09:00:00 -te today 17:00:00 -i
Output sẽ hiển thị chi tiết về sự kiện, bao gồm người dùng thực hiện, process ID, loại sự kiện, và file bị ảnh hưởng.
Bước 2: Giám Sát Thay Đổi File với Inotify-tools (Thời Gian Thực)
inotify-tools là một bộ công cụ dòng lệnh cung cấp giao diện cho inotify của kernel Linux, cho phép bạn giám sát các sự kiện hệ thống file theo thời gian thực. Nó nhẹ hơn và nhanh hơn auditd cho các trường hợp giám sát cụ thể.
2.1. Cài đặt Inotify-tools
# Đối với hệ thống dựa trên Debian/Ubuntu
sudo apt update
sudo apt install inotify-tools -y
# Đối với hệ thống dựa trên RHEL/CentOS/Fedora
sudo yum install inotify-tools -y
# Hoặc với dnf trên Fedora/RHEL 8+
sudo dnf install inotify-tools -y
✅ Thành công: inotify-tools đã được cài đặt.
2.2. Sử dụng inotifywait để giám sát
inotifywait là một phần của inotify-tools, dùng để chờ đợi các sự kiện trên file hoặc thư mục.
Để giám sát thư mục /var/www và ghi lại các sự kiện tạo, xóa, sửa đổi:
inotifywait -m -r -e create,delete,modify,move /var/www/
# -m: monitor (giám sát liên tục)
# -r: recursive (giám sát đệ quy các thư mục con)
# -e: event (chỉ định các loại sự kiện cần giám sát)
Output sẽ hiển thị ngay lập tức khi có bất kỳ sự kiện nào xảy ra trong thư mục được giám sát.
2.3. Tạo Script giám sát tự động với inotifywait
Bạn có thể tạo một script bash đơn giản để chạy inotifywait dưới dạng dịch vụ hoặc trong nền, ghi log vào một file cụ thể.
sudo nano /usr/local/bin/monitor_web_changes.sh
Thêm nội dung sau vào script:
#!/bin/bash
LOG_FILE="/var/log/web_file_changes.log"
MONITOR_DIR="/var/www"
echo "$(date): Bắt đầu giám sát thư mục $MONITOR_DIR" >> "$LOG_FILE"
# Giám sát liên tục các sự kiện từo, xóa, sửa đổi, di chuyển trong thư mục
inotifywait -m -r -e create,delete,modify,move,attrib "$MONITOR_DIR" --format '%T %w %f %e' --timefmt '%Y-%m-%d %H:%M:%S' >> "$LOG_FILE" 2>&1 &
echo "$(date): Dừng giám sát thư mục $MONITOR_DIR" >> "$LOG_FILE"
Lưu và đóng file. Cấp quyền thực thi cho script:
sudo chmod +x /usr/local/bin/monitor_web_changes.sh
Chạy script trong nền:
sudo /usr/local/bin/monitor_web_changes.sh &
Bây giờ, mọi thay đổi trong /var/www sẽ được ghi vào /var/log/web_file_changes.log.
Để kiểm tra log:
sudo tail -f /var/log/web_file_changes.log
💡 Mẹo: Để chạy script này tự động khi server khởi động lại, bạn có thể tạo một systemd service hoặc thêm vào crontab với @reboot.
Troubleshooting
- Auditd không ghi log:
- Kiểm tra trạng thái dịch vụ:
sudo systemctl status auditd. Đảm bảo nó đang chạy. - Tải lại quy tắc:
sudo augenrules --loadhoặcsudo systemctl restart auditd. - Kiểm tra cú pháp quy tắc trong
/etc/audit/rules.d/. Lỗi cú pháp có thể ngăn các quy tắc được tải. - Kiểm tra dung lượng ổ đĩa. Nếu
/var/log/auditđầy,auditdcó thệ ngừng ghi log.
- Kiểm tra trạng thái dịch vụ:
- Auditd tạo quá nhiều log:
- ⚠️ Cảnh báo: Giám sát các thư mục có nhiều file thay đổi liên tục (ví dụ:
/tmp, cache) sẽ tạo ra lượng log khổng lồ. - Tinh chỉnh các quy tắc
auditdđể chỉ giám sát các sự kiện và đường dẫn thực sự quan trọng. Sử dụng-Fđể lọc theo người dùng, process, v.v. - Cấu hình quay vòng log (
logrotate) choaudit.logđể quản lý dung lượng.
- ⚠️ Cảnh báo: Giám sát các thư mục có nhiều file thay đổi liên tục (ví dụ:
inotifywaitkhông hiển thị sự kiện:- Đảm bảo đường dẫn bạn đang giám sát là chính xác và bạn có quyền đọc trên đó.
- Kiểm tra các loại sự kiện bạn đã chỉ định với
-e. Có thể sự kiện bạn mong đợi không nằm trong danh sách. - Kiểm tra giới hạn
inotifycủa kernel:cat /proc/sys/fs/inotify/max_user_watches. Nếu bạn giám sát quá nhiều file/thư mục, bạn có thể cần tăng giá trị này.echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Kết Luận
Giám sát thay đổi file là một phần không thể thiếu của chiến lược bảo mật server toàn diện. Bằng cách triển khai auditd và inotify-tools, bạn có thể theo dõi các hoạt động quan trọng trên hệ thống của mình, phát hiện sớm các dấu hiệu xâm nhập hoặc cấu hình sai, và duy trì tính toàn vẹn của dữ liệu.
Best Practices:
- Giám sát có chọn lọc: Chỉ giám sát các thư mục và file thực sự quan trọng (ví dụ:
/etc,/var/www,/root,/home,/bin,/usr/bin). Tránh giám sát các thư mục tạo ra nhiều thay đổi không quan trọng. - Xem xét log định kỳ: Đừng chỉ thiết lập và quên. Log giám sát cần được xem xét thường xuyên.
- Tích hợp với hệ thống SIEM/Alerting: Đối với môi trường lớn hơn, hãy xem xét tích hợp log của
auditdhoặcinotify-toolsvào một hệ thống Quản lý Thông tin và Sự kiện Bảo mật (SIEM) hoặc hệ thống cảnh báo để tự động hóa việc phát hiện và thông báo sự cố. - Sao lưu quy tắc và script: Luôn sao lưu các quy tắc
auditdvà script giám sát của bạn. - Xem xét các giải pháp FIM chuyên dụng: Đối với các yêu cầu bảo mật nghiêm ngặt hoặc môi trường phức tạp, các giải pháp FIM chuyên dụng như OSSEC/Wazuh có thể cung cấp khả năng toàn diện hơn, bao gồm kiểm tra tính toàn vẹn dựa trên checksum và báo cáo tuân thủ.
Bằng cách áp dụng các phương pháp này, bạn sẽ tăng cường đáng kể khả năng phòng thủ và khả năng phục hồi của server trước các mối đe dọa.
Xem thêm: