在Debian系统中,使用acct工具(也叫psacct或acct包)可以精确统计每个进程的CPU使用时间、内存消耗、执行命令记录等关键资源数据,这是Linux系统安全审计和资源管理的核心手段之一。具体做法就是安装acct软件包,启用进程记账功能,然后通过sa、lastcomm、ac、dump-acct等命令查看和分析数据。下面我把整个流程、配置细节、安全加固建议和实际应用场景全部讲透。
一、acct工具到底是什么,为什么Debian上必须装
acct(Accounting)是Linux内核自带的进程记账模块,它会在每个进程结束时记录一条日志,包含进程名、用户名、CPU时间、内存使用、执行时间、退出状态等信息。Debian默认不安装这个包,但它是系统安全审计的基础设施。不管你是运维人员排查异常进程,还是安全团队做入侵溯源,acct都是第一手数据来源。没有它,你只能看到当前运行的进程,看不到"谁在什么时候跑了什么命令、用了多少资源"。
二、Debian上安装和启用acct的完整步骤
第一步,安装acct包。在Debian 11/12上执行:
sudo apt update sudo apt install acct
安装完成后,系统会自动创建/var/log/account/目录(旧版本可能是/var/account/),但默认情况下进程记账并没有开启。你需要手动启用它。
第二步,启用进程记账。Debian使用systemd管理,执行:
sudo systemctl enable acct.service sudo systemctl start acct.service
如果你的Debian版本使用的是旧式init,则需要编辑/etc/default/acct文件,把START=no改成START=yes,然后重启acct服务。启用后,内核会开始记录每个进程的退出信息到/var/log/account/pacct文件中。
第三步,验证是否生效。执行以下命令确认:
sudo accton /var/log/account/pacct
如果没有报错,说明记账已经开启。你可以用ps aux随便跑几个命令,然后用sa命令查看统计结果来验证数据是否在记录。
三、核心命令详解:sa、lastcomm、ac、dump-acct
1. sa命令——按用户汇总资源使用
sa是最常用的统计命令,它会按用户名汇总每个用户的CPU总时间、平均CPU时间、命令执行次数等。直接输入:
sa
输出格式大致是:用户名、命令数、CPU总秒数、平均CPU秒数。如果你想按命令名排序而不是用户名,加-m参数:
sa -m
如果只看CPU使用最多的前10个用户:
sa -s cpu | head -10
sa -s cpu表示按CPU时间排序,head -10取前10行。这在排查哪个用户在挖矿或者跑异常任务时非常有用。
2. lastcomm命令——查看具体命令执行记录
lastcomm会列出历史上执行过的每一条命令,包含命令名、用户、终端、CPU时间、退出码等。直接运行:
lastcomm
如果你只想看某个用户的记录,比如www-data:
lastcomm www-data
如果只看最近1小时的记录(需要pacct文件里有对应数据):
lastcomm --since "1 hour ago"
lastcomm的输出里有一列STAT字段,显示进程退出状态。如果看到大量Z(僵尸进程)或者非0的异常退出码,就要警惕了。
3. ac命令——按用户打印连接时间统计
ac命令主要统计用户的登录时长和总登录时间,适合做合规审计。输入:
ac -p
-p参数会把每个用户的总使用时间单独列出来,单位是小时。如果你需要做月度审计报告,这个命令直接出数据。
4. dump-acct和accton——管理pacct文件
pacct文件会不断增长,需要定期轮转。dump-acct可以把二进制的pacct转成可读格式:
sudo dump-acct /var/log/account/pacct
如果你想清空记账数据重新开始:
sudo accton off sudo accton /var/log/account/pacct
accton off会关闭记账,accton重新指定文件则重开。建议配合logrotate做pacct文件的自动轮转,避免磁盘被撑满。
四、安全审计实战:用acct抓异常进程
实际场景一:服务器CPU突然飙高,top看不到明显进程。这时候用sa -s cpu找到CPU消耗最大的用户,再用lastcomm看这个用户最近执行了什么命令。如果发现某个低权限用户在执行大量计算密集型命令,基本可以判断账号被入侵或者被利用了。
实际场景二:排查定时任务滥用。很多攻击者会在crontab里写入恶意脚本。通过lastcomm配合时间筛选,你可以看到某个时间段内哪些命令被触发了,结合/var/log/account/pacct的时间戳,精确定位到分钟级别。
实际场景三:合规审计。很多等保要求和行业标准需要保留用户操作记录。acct提供的命令级审计日志是最细粒度的,比bash_history可靠得多,因为bash_history可以被用户清除,而acct记录在系统层面,普通用户无法篡改。
五、Debian上acct的安全加固建议
第一,pacct文件权限要锁死。默认是640,属组是utmp,建议改成600,只有root可读:
sudo chmod 600 /var/log/account/pacct sudo chown root:root /var/log/account/pacct
第二,配置logrotate自动轮转pacct文件,防止单文件过大:
sudo nano /etc/logrotate.d/acct
写入:
/var/log/account/pacct {
daily
rotate 30
compress
missingok
notifempty
create 600 root root
}
第三,把acct日志同步到远程日志服务器。本地日志可以被攻击者清除,远程备份是最后一道防线。可以用rsyslog或者自定义脚本定期scp到独立的审计服务器上。
第四,结合auditd使用。acct记录的是进程退出时的统计信息,而Linux auditd可以记录系统调用级别的行为。两者配合,一个管"结果统计",一个管"行为追踪",形成完整的审计链条。
六、常见问题和排错指南
问题一:安装acct后sa命令报错"No accounting file"。这是因为accton没有指向正确的pacct文件。执行sudo accton /var/log/account/pacct即可。
问题二:lastcomm输出为空。检查acct.service是否在运行,用sudo systemctl status acct.service查看。如果服务没启动,记账功能就没生效。
问题三:pacct文件增长过快。这是正常的,高并发服务器每天可能产生几百MB数据。一定要配logrotate,同时考虑是否需要调整内核记账参数。在/etc/sysctl.conf里可以设置:
kernel.acct=4
值为4表示启用进程记账。如果设为0则关闭。修改后执行sudo sysctl -p生效。
问题四:Debian 12上找不到acct包。某些最小化安装的Debian 12镜像可能没包含acct,需要先确保/etc/apt/sources.list里有main和contrib组件,然后重新apt install acct。
七、acct与其他监控工具的对比和选型
acct的优势是轻量、内核级、不依赖agent,适合所有Debian服务器作为基础审计层。但它只记录进程退出信息,不记录实时状态。如果你需要实时监控,应该搭配htop、 glances、netdata等工具。如果需要更细粒度的审计,auditd是更好的选择。三者的关系是:acct做资源统计和历史回溯,auditd做行为审计,htop/netdata做实时监控。一个完整的Debian安全运维体系,这三层都应该有。
八、总结
在Debian上用acct做进程资源统计和安全审计,核心就是三步:装包、启用、分析。sa看汇总、lastcomm看明细、ac看登录时长、dump-acct做数据导出。配合权限加固、日志轮转、远程备份,就能构建一个可靠的进程级审计系统。这东西不花哨,但在出问题的时候,它是你最快定位"谁干了什么"的工具。建议所有生产环境的Debian服务器都装上并启用,成本几乎为零,价值却非常高。
