Sổ tay kỹ thuật

Audit logging trên Linux – auditd rules, ausearch, aureport, log tập trung

how-to#linux#auditd#logging#security· cập nhật 2026-11-06

Dùng khi cần ghi lại ai sửa file cấu hình, ai chạy lệnh với quyền root, đăng nhập thành công/thất bại, và đẩy log đó về server tập trung.

Sửa trang này
Mục lục

Tóm tắt: Cài auditd, đặt rule trong /etc/audit/rules.d/*.rules, nạp bằng augenrules --load, kiểm tra auditctl -l. Mỗi rule gắn -k <key> để tra bằng ausearch -k <key> -i; báo cáo tổng hợp bằng aureport. Log đăng nhập/sudo ngoài auditd còn nằm trong /var/log/auth.log hoặc journal (journalctl cheatsheet). Đẩy về máy tập trung để attacker có root không xoá được dấu vết.

Luồng hoạt động

flowchart LR K["Kernel audit"] -->|"event khớp rule"| A[auditd] A --> F["/var/log/audit/audit.log"] A -->|"audisp plugin"| R["audisp-remote / syslog"] J["sshd, sudo, PAM"] --> JR["journald / auth.log"] JR --> RS["rsyslog / Vector"] R --> C["Log server tập trung"] RS --> C

Cấu hình

Cài đặt

sudo apt install auditd audispd-plugins     # RHEL: audit (thường có sẵn)
sudo systemctl enable --now auditd
sudo auditctl -s                            # enabled 1, backlog, lost

Rules

/etc/audit/rules.d/50-ops.rules
## Thay đổi user, group, sudo
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
 
## Cấu hình SSH và key
-w /etc/ssh/sshd_config -p wa -k sshd
-w /etc/ssh/sshd_config.d/ -p wa -k sshd
-w /root/.ssh/ -p wa -k rootkey
 
## Persistence
-w /etc/cron.d/ -p wa -k cron
-w /etc/crontab -p wa -k cron
-w /etc/systemd/system/ -p wa -k systemd
 
## Lệnh chạy với quyền root bởi người đã đăng nhập (auid là user gốc, kể cả sau sudo)
-a always,exit -F arch=b64 -S execve -F euid=0 -F auid>=1000 -F auid!=4294967295 -k root-cmd
-a always,exit -F arch=b32 -S execve -F euid=0 -F auid>=1000 -F auid!=4294967295 -k root-cmd
 
## Nạp/gỡ kernel module
-a always,exit -F arch=b64 -S init_module,finit_module,delete_module -k modules
Thành phần Ý nghĩa
-w <path> -p wa Theo dõi file/thư mục: r đọc, w ghi, x chạy, a đổi thuộc tính
-a always,exit Rule syscall, ghi khi syscall kết thúc
-F arch=b64 Bắt buộc với rule syscall; thêm bản b32 để không bị lách qua binary 32-bit
-F auid>=1000 -F auid!=4294967295 Chỉ user thật đã login (4294967295 = auid chưa đặt, tiến trình hệ thống)
-k <key> Nhãn để tra cứu
-e 2 Khoá cấu hình, chỉ đổi được sau reboot (đặt ở file cuối cùng, vd 99-finalize.rules)

Rule execve cho mọi user sinh rất nhiều log trên máy bận (CI runner, container host). Bắt đầu với euid=0 như trên, theo dõi dung lượng và lost trong auditctl -s.

sudo augenrules --check        # có thay đổi chưa nạp?
sudo augenrules --load         # gộp rules.d/*.rules -> /etc/audit/audit.rules và nạp
sudo auditctl -l               # rule đang hiệu lực

Dung lượng log trong /etc/audit/auditd.conf: max_log_file (MB), num_logs, max_log_file_action = ROTATE, space_left_action. Đổi xong: sudo service auditd restart (unit auditd thường từ chối systemctl restart).

Lệnh

Mục đích Lệnh
Sự kiện theo key, dịch uid/syscall ra tên sudo ausearch -k identity -i
Hôm nay, chỉ key sudoers sudo ausearch -k sudoers --start today -i
Khoảng thời gian sudo ausearch -k sshd --start 11/06/2026 08:00:00 --end now -i (định dạng ngày theo locale)
Lệnh root của một user sudo ausearch -k root-cmd -ua alice -i
Đăng nhập thất bại sudo ausearch -m USER_LOGIN --success no -i
Ai sửa một file sudo ausearch -f /etc/ssh/sshd_config -i
Tóm tắt toàn bộ sudo aureport --summary
Báo cáo xác thực / login sudo aureport -au, sudo aureport -l --failed
Báo cáo theo key sudo aureport -k --summary
Tóm tắt binary được chạy sudo aureport -x --summary
Theo dõi trực tiếp sudo tail -f /var/log/audit/audit.log

auth.log / journal

Mục đích Lệnh
Đăng nhập SSH thành công/thất bại journalctl -u ssh --since today | grep -E 'Accepted|Failed'
Lệnh sudo journalctl _COMM=sudo --since "-1d"
File truyền thống (Debian/Ubuntu) sudo grep -E 'sshd|sudo' /var/log/auth.log (RHEL: /var/log/secure)

Gửi log tập trung

/etc/rsyslog.d/90-forward.conf
# auth/authpriv (ssh, sudo, PAM) qua TCP, có hàng đợi khi server tạm mất
authpriv.*;auth.* action(type="omfwd" target="logs.example.com" port="514" protocol="tcp"
                         queue.type="LinkedList" queue.filename="fwd_auth" action.resumeRetryCount="-1")

auditd có hai cách: plugin audisp-remote (gói audispd-plugins, cấu hình /etc/audit/audisp-remote.conf với remote_server, bật active = yes trong /etc/audit/plugins.d/au-remote.conf), hoặc plugin syslog (/etc/audit/plugins.d/syslog.conf, active = yes) để rsyslog/Vector chuyển tiếp. Pipeline phía server xem syslog pipeline với Vector. Production nên dùng TLS cho đường truyền log.

Lỗi thường gặp

Triệu chứng Nguyên nhân Cách xử lý
Rule trong rules.d không có hiệu lực Chưa augenrules --load, hoặc file không đuôi .rules augenrules --check, auditctl -l
Error sending add rule data request (Operation not permitted) Cấu hình đã khoá bằng -e 2 Sửa file, reboot
ausearch báo <no matches> dù có thay đổi Sai key, sai khung giờ, log đã rotate Thêm --input-logs, kiểm tra -k khớp auditctl -l
lost tăng trong auditctl -s Backlog đầy do quá nhiều event Tăng -b 8192 trong rules, giảm rule rộng
systemctl restart auditd bị từ chối Unit đặt RefuseManualStop=yes service auditd restart hoặc augenrules --load khi chỉ đổi rule
Đĩa đầy vì audit log max_log_file_action không phải ROTATE Đặt ROTATE, num_logs, đẩy log ra ngoài
Không thấy log trên server tập trung Firewall chặn 514/TCP, sai cú pháp rsyslog rsyslogd -N1, logger -p authpriv.notice test, tcpdump phía server

Tham khảo