Cài đặt và cấu hình Linux Auditd trên CentOS Stream 9: Giám sát toàn diện sự kiện bảo mật

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

Bối cảnh thực tế: Đêm trực 2 giờ sáng và bài toán truy vết can thiệp ngầm

2 giờ 15 phút sáng, PagerDuty réo liên hồi. Con cụm reverse proxy Nginx sập hoàn toàn. Hơn 15.000 request HTTPS mỗi phút đổ về đều nhận mã lỗi 502. SSH vào server CentOS Stream 9 production, mình phát hiện file cert /etc/pki/tls/certs/api.crt bị đổi quyền thành 000. Gõ history, terminal trống trơn. Thủ phạm đã chèn dấu cách trước lệnh hoặc chạy unset HISTFILE trước khi thoát shell.

Kiểm tra journalctl -u nginx hay /var/log/messages cũng chỉ thấy thông báo cụt lủn: cannot load certificate: Permission denied. Tuyệt nhiên không có dấu vết ai đã chạy lệnh chmod vào file cert lúc nửa đêm.

Đó là cái giá của việc bỏ quên Linux Audit Framework khi dựng server mới. Syslog hay journald chỉ thụ động ghi lại những gì application gửi ra. Ngược lại, auditd móc thẳng vào Linux kernel qua Audit Subsystem. Mỗi khi có tiến trình gọi system call (đọc, ghi đè, xóa file, đổi quyền sở hữu), kernel sẽ lập tức ghi lại. Đặc biệt nhất là trường auid (Audit UID). Dù user có sudo su - sang root, kernel vẫn truy ra chính xác account nào vừa thực thi lệnh.

Cài đặt Auditd trên CentOS Stream 9

Trên bản cài CentOS Stream 9 Minimal, gói audit thường có sẵn nhưng thiếu các công cụ tiện ích. Bạn hãy cài đặt trọn bộ:

sudo dnf install -y audit audit-libs

Kích hoạt và khởi chạy daemon:

sudo systemctl enable auditd
sudo systemctl start auditd

Lưu ý quan trọng: Systemd trên RHEL 9 và CentOS Stream 9 chặn lệnh systemctl restart auditd để tránh gián đoạn tiến trình ghi log bảo mật của kernel. Muốn restart dịch vụ, bạn bắt buộc phải dùng:

sudo service auditd restart

Kiểm tra trạng thái của audit subsystem trong kernel:

sudo auditctl -s

Nếu kết quả trả về enabled 1 và pid có giá trị hợp lệ, kernel đã sẵn sàng bắt gói tin sự kiện.

Cấu hình chi tiết: Bộ quy tắc thực chiến cho máy chủ Production

Kiến trúc Auditd gồm hai phần: /etc/audit/auditd.conf (quản lý file log, dung lượng, hành vi xoay vòng) và thư mục /etc/audit/rules.d/ (chứa các quy tắc giám sát).

1. Chống tràn đĩa cứng tại auditd.conf

Trên các cụm máy chủ chịu tải cao, log audit có thể ngốn hàng chục gigabyte mỗi ngày. Nếu phân vùng /var/log đầy, server có nguy cơ treo dịch vụ. Hãy mở file cấu hình:

sudo vi /etc/audit/auditd.conf

Điều chỉnh các thông số lưu trữ an toàn:

# Kich thuoc toi da moi file log (MB)
max_log_file = 50

# Giu toi da 10 file xoay vong (tong toi da 500MB)
num_logs = 10
max_log_file_action = ROTATE

# Canh bao khi dung luong disk con duoi 100MB
space_left = 100
space_left_action = SYSLOG

# Tam dung tien trinh ghi log khi disk con duoi 50MB de cuu server
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND

Cấu hình này giữ trần dung lượng log audit ở mức 500MB, đồng thời kích hoạt cảnh báo sớm qua syslog trước khi ổ đĩa cạn kiệt.

2. Xây dựng ruleset giám sát vĩnh viễn

Không nên gõ rule trực tiếp bằng lệnh auditctl vì chúng sẽ biến mất sau khi reboot. Hãy khai báo toàn bộ vào file /etc/audit/rules.d/audit.rules:

sudo vi /etc/audit/rules.d/audit.rules

Dán bộ rules chuẩn hóa sau:

## Xoa sach rule cu de tranh xung dot
-D

## Mo rong buffer len 8192 message (tranh drop log khi I/O tang dot bien)
-b 8192

## 1. Giam sat tai khoan va phan quyen he thong
-w /etc/passwd -p wa -k identity_changes
-w /etc/shadow -p wa -k identity_changes
-w /etc/group -p wa -k identity_changes
-w /etc/sudoers -p wa -k sudoers_tamper
-w /etc/sudoers.d/ -p wa -k sudoers_tamper

## 2. Giam sat Nginx va SSL Certs
-w /etc/nginx/ -p wa -k nginx_config_tamper
-w /etc/pki/tls/ -p wa -k ssl_certs_tamper

## 3. Bat system call thay doi quyen file (chmod, chown)
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F auid>=1000 -F auid!=unset -k file_permission_change
-a always,exit -F arch=b64 -S chown,fchown,lchown,fchownat -F auid>=1000 -F auid!=unset -k file_owner_change

## 4. Bat thao tac xoa file va xoa thu muc
-a always,exit -F arch=b64 -S unlink,unlinkat,rmdir -F auid>=1000 -F auid!=unset -k file_deletion

## 5. Khoa cau hinh (Chi mo comment sau khi he thong da on dinh)
#-e 2

Các tham số cốt lõi cần nhớ:

  • -w <path>: Watchpoint theo dõi đường dẫn cụ thể.
  • -p wa: Lọc hai hành vi: write (ghi/sửa) và attribute (đổi quyền, ownership, timestamp).
  • -k <key>: Gắn nhãn để lọc sự kiện nhanh khi truy vấn.
  • -F auid>=1000 -F auid!=unset: Chỉ lọc user thật đăng nhập vào hệ thống (UID từ 1000 trở lên). Bỏ qua các system daemon (UID < 1000) để tránh sinh log rác.
  • -e 2: Khóa cứng cấu hình trong kernel. Một khi bật cờ này, bạn không thể thay đổi rule trừ khi reboot server.

Nạp rules mới vào kernel:

sudo augenrules --load

Kiểm tra danh sách rules đang hoạt động:

sudo auditctl -l

Thực hành điều tra: Bóc tách dấu vết với ausearch và aureport

Đừng dùng cat hay grep trên file /var/log/audit/audit.log. Dữ liệu thô chứa nhiều chuỗi hex rất khó đọc. Hãy tận dụng bộ đôi ausearch và aureport.

1. Thử nghiệm hành vi phá hoại

Đăng nhập bằng tài khoản cá nhân (ví dụ: hungnd có UID 1001), dùng sudo để đổi quyền file Nginx:

sudo chmod 000 /etc/nginx/nginx.conf

2. Truy vết bằng ausearch

Tìm lại sự kiện qua key file_permission_change kèm cờ -i (interpret) để dịch mã hex sang văn bản rõ ràng:

sudo ausearch -k file_permission_change -i --recent

Đoạn log thu được sẽ bóc tách toàn bộ ngữ cảnh:

type=SYSCALL msg=audit(18/10/2026 02:15:30.120:412) : arch=x86_64 syscall=fchmodat success=yes exit=0 a0=0xffffff9c a1=0x154b200 a2=000 items=1 ppid=2450 pid=2810 auid=hungnd uid=root gid=root euid=root ses=3 comm="chmod" exe="/usr/bin/chmod" key="file_permission_change"
type=PATH msg=audit(18/10/2026 02:15:30.120:412) : item=0 name="/etc/nginx/nginx.conf" inode=135894 dev=fd:00 mode=0100644 ouid=0 ogid=0

Các trường dữ liệu quan trọng nói lên điều gì?

  • comm & exe: Lệnh được gọi là /usr/bin/chmod.
  • name: File bị tác động chính là /etc/nginx/nginx.conf.
  • uid=root: Lệnh được thực thi dưới quyền root.
  • auid=hungnd: Danh tính gốc. Dù user đã thông qua sudo để mượn quyền root, audit subsystem vẫn bóc tách được user khởi tạo session ban đầu là hungnd.

3. Thống kê nhanh với aureport

Khi cần rà soát bảo mật định kỳ, aureport cung cấp bảng tổng kết chỉ sau vài giây.

Thống kê số lần đăng nhập thành công và thất bại:

sudo aureport -l --summary

Liệt kê các thao tác bị kernel từ chối (dấu hiệu user đang thử dò quyền hoặc leo thang đặc quyền):

sudo aureport --failed

Xem danh sách các file cấu hình bị sửa đổi trong 24 giờ qua:

sudo aureport -f -ts yesterday

Auditd không ngăn chặn được hành vi phá hoại ngay lúc nó xảy ra. Nhưng nó mang lại thứ giá trị nhất khi có sự cố: bằng chứng xác thực không thể chối cãi để quy trách nhiệm và khắc phục triệt để lỗ hổng vận hành.

Share: