So sánh các giải pháp giám sát toàn vẹn tập tin trên Linux
Server đột nhiên mở cổng lạ? Web tự dưng chèn mã độc? Nỗi ám ảnh lớn nhất của dân sysadmin là kẻ tấn công đã âm thầm can thiệp vào file nhị phân hoặc cấu hình mà ta không hề hay biết. Đây là lúc giải pháp giám sát toàn vẹn tập tin (FIM – File Integrity Monitoring) phát huy tác dụng.
Để theo dõi biến động file trên Linux, chúng ta thường có 3 lựa chọn:
- Tự viết script Bash/Python kết hợp sha256sum: Bạn lập danh sách các thư mục nhạy cảm (/etc, /bin), tạo mã hash SHA256 ban đầu rồi dùng cron job đối chiếu định kỳ.
- Triển khai Host IDS tập trung (Wazuh, OSSEC): Mô hình Agent – Manager toàn diện. Hệ thống thu thập log thời gian thực, giám sát tiến trình và tự động kích hoạt phản ứng (Active Response) khi có biến.
- Dùng công cụ FIM độc lập như AIDE (Advanced Intrusion Detection Environment): Công cụ nguồn mở kế thừa Tripwire. AIDE chụp lại trạng thái (snapshot) gồm phân quyền, inode, mtime, kích thước và mã hash SHA256/SHA512 của file, sau đó so sánh từng đợt quét.
Phân tích ưu nhược điểm của từng phương án
1. Tự viết script hash
Ưu điểm: Rất nhẹ. Không cần cài thêm package nào khác ngoài coreutils có sẵn.
Nhược điểm: Dễ bị hacker qua mặt. Script tự chế thường bỏ sót các thuộc tính mở rộng (extended attributes, SELinux context), không nhận biết việc tráo inode và chạy rất ì ạch khi quét hơn 50.000 file.
2. Wazuh hoặc OSSEC
Ưu điểm: Quản lý tập trung qua Dashboard trực quan. Hỗ trợ gom log từ hàng trăm node, cảnh báo trực tiếp về Telegram hay Slack chỉ sau vài giây.
Nhược điểm: Ngốn tài nguyên. Server quản trị cần tối thiểu 4GB đến 8GB RAM để gánh Elasticsearch/Indexer và cụm Manager. Với VPS cấu hình 1 vCPU – 1GB RAM, lựa chọn này bất khả thi.
3. AIDE
Ưu điểm: Gọn gàng và ổn định. Toàn bộ cấu hình gói gọn trong một file văn bản. Quá trình kiểm tra quét sâu từ quyền hạn, user/group, link count đến mã băm sha512 mà gần như không chiếm dụng RAM khi ở trạng thái chờ.
Nhược điểm: Không có giao diện web. Bạn phải tự tay tinh chỉnh regex loại trừ (rule exclusion). Nếu cấu hình ẩu, log xoay vòng hàng ngày sẽ tạo ra hàng trăm cảnh báo rác (false positives).
Lựa chọn giải pháp phù hợp
Với các cụm server enterprise hàng chục node, Wazuh là phương án đáng đầu tư. Ngược lại, nếu bạn vận hành vài VPS độc lập chạy Nginx, PHP-FPM hay PostgreSQL, AIDE là giải pháp bảo mật cân bằng nhất.
Trong thực tế vận hành, nguyên tắc sống còn khi dùng AIDE là: Loại trừ triệt để thư mục động. Bỏ qua các đường dẫn như /var/log, /tmp hay cache ứng dụng sẽ khiến mỗi báo cáo dài cả ngàn dòng. Kết quả là bạn sẽ bị “mệt mỏi vì cảnh báo” (alert fatigue) và dễ dàng bỏ qua dấu vết tấn công thực sự.
Hướng dẫn triển khai AIDE trên Ubuntu/Debian và RHEL/AlmaLinux
Bước 1: Cài đặt AIDE
Trên Debian hoặc Ubuntu:
sudo apt update
sudo apt install aide aide-common -y
Trên RHEL, AlmaLinux hoặc Rocky Linux:
sudo dnf install aide -y
Bước 2: Tùy chỉnh quy tắc trong file cấu hình
File cấu hình mặc định nằm tại /etc/aide/aide.conf (Debian/Ubuntu) hoặc /etc/aide.conf (RHEL/AlmaLinux).
AIDE sử dụng các ký tự viết tắt để định nghĩa thuộc tính cần giám sát:
p: Quyền truy cập (Permissions)i: Số inoden: Số lượng liên kết (Number of links)u: User sở hữug: Group sở hữus: Kích thước file (Size)m: Thời gian chỉnh sửa nội dung (mtime)c: Thời gian thay đổi thuộc tính metadata (ctime)sha256: Thuật toán băm SHA-256
Mở file cấu hình bằng nano hoặc vim:
sudo nano /etc/aide/aide.conf
Khai báo một rule mẫu tên là MYCUSTOM để kiểm tra nghiêm ngặt các nhị phân hệ thống:
# Định nghĩa nhóm thuộc tính kiểm tra
MYCUSTOM = p+i+n+u+g+s+m+c+sha256
# Áp dụng cho các thư mục trọng yếu
/etc MYCUSTOM
/bin MYCUSTOM
/sbin MYCUSTOM
/usr/bin MYCUSTOM
# Bắt buộc loại trừ (dấu !) các thư mục biến động dữ liệu liên tục
!/var/log
!/var/cache
!/tmp
!/var/tmp
Bước 3: Khởi tạo cơ sở dữ liệu mẫu
Trước tiên, hệ thống cần chụp lại một snapshot chuẩn làm gốc đối chiếu:
sudo aideinit
Lưu ý: Trên RHEL và AlmaLinux, hãy dùng lệnh:
sudo aide --init
Với ổ cứng SSD và khoảng 60.000 file, quá trình băm dữ liệu chỉ mất chừng 30 đến 60 giây. Khi quét xong, AIDE tạo ra database mẫu tại /var/lib/aide/aide.db.new (hoặc /var/lib/aide/aide.db.new.gz).
Sao chép file này về đường dẫn database chính thức để kích hoạt chế độ so khớp:
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
Bước 4: Thử nghiệm phát hiện xâm nhập
Để đối chiếu filesystem hiện tại với database đã lưu:
sudo aide --check
Nếu hệ thống an toàn, màn hình sẽ thông báo: “AIDE found NO differences”.
Bây giờ, hãy thử đóng vai hacker sửa file /etc/hosts và cắm một shell script lạ vào thư mục /bin:
# Chèn domain độc hại vào file hosts
echo "192.168.1.200 evil-attacker.com" | sudo tee -a /etc/hosts
# Tạo file backdoor thực thi giả lập
sudo touch /bin/backdoor_test
sudo chmod +x /bin/backdoor_test
Tiến hành quét lại:
sudo aide --check
AIDE lập tức chỉ điểm chính xác các thay đổi:
AIDE found differences between database and filesystem!!
Added entries:
/bin/backdoor_test
Changed entries:
/etc/hosts
Detailed information about changes:
File: /etc/hosts
Size : 221 , 255
Mtime : 2026-11-06 10:15:20 , 2026-11-06 12:30:00
SHA256 : a8f5c7... , e3b0c4...
Toàn bộ thông số bị tráo đổi từ kích thước, mtime cho đến mã hash đều hiện rõ không sót chi tiết nào.
Bước 5: Cập nhật cơ sở dữ liệu sau bảo trì
Mỗi lần bạn nâng cấp gói bằng apt upgrade hoặc đổi cấu hình Nginx, AIDE sẽ đánh dấu đó là file bị thay đổi. Cần cập nhật lại database để đồng bộ trạng thái mới:
sudo aide --update
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
Bước 6: Tự động hóa quét định kỳ bằng Cron
Kiểm tra thủ công bằng tay không khả thi. Hãy thiết lập cron job chạy ngầm vào 3 giờ sáng mỗi ngày:
sudo crontab -e
Thêm dòng sau để gửi kết quả trực tiếp về email quản trị viên:
0 3 * * * /usr/bin/aide --check | mail -s "[Alert] Báo cáo toàn vẹn file trên VPS" [email protected]
Nếu không có sẵn Mail Transfer Agent (MTA), bạn có thể xuất log ra /var/log/aide/aide-check.log và viết bot Python nhỏ để bắn thông báo qua Telegram khi biến đổi xuất hiện.
