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, lostRules
## 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ựcDung 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
# 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
man auditctl,man audit.rules,man ausearch,man aureport,man auditd.conf- Linux audit rules mẫu (repo linux-audit/audit-userspace)
- rsyslog omfwd