在Ubuntu系统中,想要监控特权命令的执行,最直接有效的方案就是部署auditd审计框架。auditd是Linux内核自带的审计子系统,它能记录所有特权用户(root或具有sudo权限的用户)执行的每一条命令、每一次文件访问、每一个系统调用。具体做法是:先安装auditd服务,然后编写规则文件监控/usr/bin/sudo、/usr/bin/su、/usr/bin/passwd等高风险二进制文件的执行,最后通过ausearch和aureport工具查看审计日志。这套方案不需要额外付费工具,内核级记录几乎无法被绕过,是企业级Linux安全合规的基础设施。

为什么必须监控特权命令执行

Ubuntu作为全球使用最广泛的Linux发行版之一,在服务器、云计算、容器编排等场景中大量部署。一旦攻击者获取了普通用户权限,下一步必然是提权——执行sudo提权、su切换用户、修改passwd文件、执行rm -rf等破坏性命令。如果你没有任何监控手段,这些操作在系统日志里可能只留下一行不起眼的记录,甚至被攻击者清除。auditd的价值在于:它在系统调用层面就记录了行为,攻击者即使清空了/var/log下的日志文件,audit日志依然独立存储,且支持防篡改标记。对于等保2.0、PCI-DSS、ISO 27001等安全合规要求,auditd监控是硬性指标。

Ubuntu上安装和启动auditd服务

Ubuntu 18.04及以后版本默认已经预装了auditd,如果没有,执行以下命令安装:

sudo apt update
sudo apt install auditd audispd-plugins

安装完成后,启动服务并设置开机自启:

sudo systemctl enable auditd
sudo systemctl start auditd
sudo systemctl status auditd

确认状态显示active (running)即可。auditd的主配置文件位于/etc/audit/auditd.conf,日志文件默认存储在/var/log/audit/audit.log。注意,audit.log的权限默认是600,只有root可读,这本身就是一层保护。

编写audit规则监控特权命令

auditd的规则文件放在/etc/audit/rules.d/目录下,建议创建一个独立文件,比如/etc/audit/rules.d/privileged_cmds.rules。规则的基本语法是:

-w /path/to/binary -p x -k privilege_exec

其中-w指定监控的文件路径,-p x表示监控执行(execute)权限,-k是给这条规则打的标签(key),方便后续检索。下面是一套完整的特权命令监控规则:

# 监控sudo命令执行
-w /usr/bin/sudo -p x -k sudo_exec
-w /usr/bin/sudoedit -p x -k sudo_exec

# 监控su和su命令
-w /usr/bin/su -p x -k su_exec

# 监控passwd修改密码
-w /usr/bin/passwd -p x -k passwd_exec

# 监控useradd/userdel用户管理
-w /usr/sbin/useradd -p x -k usermod_exec
-w /usr/sbin/userdel -p x -k usermod_exec
-w /usr/sbin/usermod -p x -k usermod_exec

# 监控chmod/chown权限变更
-w /usr/bin/chmod -p x -k perm_change
-w /usr/bin/chown -p x -k perm_change

# 监控rm删除操作
-w /usr/bin/rm -p x -k file_delete

# 监控/etc/passwd和/etc/shadow文件访问
-w /etc/passwd -p rwa -k passwd_file
-w /etc/shadow -p rwa -k shadow_file
-w /etc/group -p rwa -k group_file

# 监控crontab定时任务修改
-w /usr/bin/crontab -p x -k cron_mod

# 监控iptables/ufw防火墙规则变更
-w /usr/sbin/iptables -p x -k firewall_change
-w /usr/sbin/ufw -p x -k firewall_change

# 监控所有特权用户(uid<1000)的命令执行
-a always,exit -F arch=b64 -S execve -F uid<1000 -F euid=0 -k privileged_action

最后一条规则是核心:它监控所有UID小于1000(即系统用户和普通用户)执行的、最终以root身份运行的命令。这条规则覆盖面最广,能捕获sudo提权后的所有行为。写完规则后,需要重新加载:

sudo augenrules --load

或者直接重启auditd服务:

sudo systemctl restart auditd

如何查看和分析audit日志

auditd提供了两个核心命令行工具:ausearch用于按条件搜索,aureport用于生成统计报告。

查看最近所有特权命令执行记录:

sudo ausearch -k privilege_exec -ts recent

查看某个特定用户(比如uid=1001)执行的所有特权操作:

sudo ausearch -f 1001 -ts today

查看今天所有文件删除操作:

sudo ausearch -k file_delete -ts today

生成今日审计报告摘要:

sudo aureport --auth --summary
sudo aureport --exec --summary
sudo aureport --file --summary

如果你想实时监控,可以用ausearch配合watch命令:

watch -n 5 'sudo ausearch -k sudo_exec -ts recent 2>/dev/null | tail -20'

auditd日志防篡改和长期存储

auditd有一个关键特性:它支持设置日志文件的最大大小和保留策略。编辑/etc/audit/auditd.conf,设置:

max_log_file = 100
max_log_file_action = ROTATE
num_logs = 10

这意味着单个日志文件最大100MB,满了自动轮转,保留10个文件。更重要的是,auditd支持将日志远程发送到集中式日志服务器。在/etc/audit/audisp-remote.conf中配置:

remote_server = 192.168.1.100
port = 60
local_port = 61
transport = tcp
mode = immediate

这样即使攻击者入侵了Ubuntu主机并试图删除本地日志,远程服务器上依然有完整记录。对于企业环境,建议搭配rsyslog或ELK Stack做集中存储和告警。

进阶技巧:用auditd监控异常行为模式

除了监控特定命令,还可以用auditd设置更智能的规则。比如监控非工作时间的root登录:

-a always,exit -F arch=b64 -S open -F dir=/var/log -F uid=0 -F time>18:00 -F time<08:00 -k after_hours_access

监控短时间内大量文件访问(可能是数据窃取):

-a always,exit -F arch=b64 -S open -F exit=-EACCES -F uid>=1000 -k mass_access

还可以配合audispd插件,当触发特定规则时自动执行脚本告警。在/etc/audit/plugins.d/目录下创建自定义插件:

active = yes
direction = out
path = /usr/local/bin/audit_alert.sh
type = always
args = 2
format = string

然后编写/usr/local/bin/audit_alert.sh脚本,当检测到sudo_exec事件时发送邮件或企业微信通知。

常见问题和排错指南

实际部署中经常遇到几个问题。第一,规则不生效:检查是否执行了augenrules --load,以及规则文件权限是否为640、属主为root。第二,日志太大占满磁盘:及时配置远程发送和轮转策略。第三,性能影响:auditd对系统性能影响通常在1%-3%以内,但如果规则过多(超过几百条),建议精简规则,只监控真正高风险的命令。第四,查看日志时出现乱码:使用ausearch -i参数以人类可读格式输出。

总结:auditd是Ubuntu安全监控的基石

在Ubuntu系统安全体系中,auditd不是可选项,而是必选项。它提供内核级的、几乎不可绕过的命令执行审计能力。从安装配置、规则编写、日志分析到远程存储和告警联动,这套体系可以覆盖从基础合规到高级威胁检测的全部需求。建议所有Ubuntu生产环境服务器都部署auditd,并定期通过aureport审查审计报告,及时发现异常行为。安全不是一次性工作,而是持续运营的过程,auditd就是你最可靠的眼睛。