auditd是linux内核级审计工具,通过监控系统调用精准记录root与特权账号的登录、命令执行、关键文件变更等操作,具备防篡改、可溯源特性,是服务器安全审计的核心手段。

监控服务器 root 与特权账号操作,核心是“记录谁、在何时、从哪来、做了什么”,不能只靠用户自己敲的 history,也不能只翻 /var/log 里零散的日志。真正有效的监控必须覆盖登录行为、命令执行、关键文件变更和系统调用四个层面,且日志需防篡改、可溯源。
启用并配置 auditd 进行内核级审计
auditd 是 Linux 内核自带的审计框架,能捕获 root 和 sudo 用户的真实系统调用,绕过 shell 层面的干扰(比如绕过 history 的 bash -c 或脚本执行)。
- 安装并启动:
yum install audit -y && systemctl enable --now auditd(CentOS/RHEL)或apt install auditd -y && systemctl enable --now auditd(Debian/Ubuntu) - 监控 root 登录和 sudo 行为:在
/etc/audit/rules.d/privileged.rules中添加-a always,exit -F uid=0 -F perm=x -k privileged_exec-w /etc/sudoers -p wa -k config_change-w /bin/su -p x -k su_usage - 重载规则:
augenrules --load && systemctl restart auditd - 查询记录:
ausearch -k privileged_exec | aureport -f -i可精准看到 root 执行了哪个二进制、参数是什么、来自哪个终端
规范 sudo 使用并集中记录命令日志
避免直接登录 root,所有提权操作应走 sudo,并强制记录完整命令行(含参数)。
- 确保
/etc/sudoers含有:Defaults logfile="/var/log/sudo.log"和Defaults log_input,log_output(后者支持录制 I/O,需配合sudo_logsrvd) - 用
visudo限制权限,例如:alice ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/tail /var/log/nginx/error.log - 定期检查:
grep 'COMMAND=' /var/log/sudo.log | tail -20查看最近 sudo 命令;sudo -l -U alice验证该用户实际被授权范围
强化登录会话审计与来源追踪
光知道“执行了什么”不够,还要确认“谁在什么位置发起的”。
- 启用 SSH 登录日志增强:在
/etc/ssh/sshd_config中确保LogLevel VERBOSE(记录 SSH 认证方式)、PrintLastLog yes、MaxAuthTries 3 - 关键日志文件必须受保护:
chown root:root /var/log/secure /var/log/auth.log /var/log/sudo.logchmod 600 /var/log/secure /var/log/auth.log /var/log/sudo.log - 用
last -ai查登录 IP 和终端;who -u看当前活跃会话及空闲时间;对异常 IP 可结合journalctl _COMM=sshd | grep "Failed"快速定位爆破尝试
补充 shell 级操作记录(仅作辅助,不可替代 auditd)
对非 root 用户或已登录会话内的操作,可增强 history 记录粒度,但需注意其易被绕过,仅作参考。
- 在
/etc/profile或/etc/bash.bashrc中添加:export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//") [$RETRN_VAL]"' - 配合 rsyslog 将 local6 日志单独存到
/var/log/cmd.log,并设置 logrotate 防止膨胀 - 注意:此法无法捕获
bash -c 'rm -rf /'或通过 Python/Perl 执行的命令,务必以 auditd 为主











