accton命令用于开启或关闭linux进程记账功能,需root权限运行,指定记账文件(如/var/log/account/pacct)启用后可记录uid、命令名、终端、运行时长等基础信息,但不记录命令参数或完整路径,适合轻量级统计而非高保真审计。

accton 是 acct(也叫 process accounting)工具集中的命令,用于开启或关闭进程记账功能。它能记录每个进程的执行者(UID)、命令路径、运行时长、CPU 使用、内存占用等,但不记录命令参数或完整命令行,也不像 auditd 那样捕获 execve 系统调用的全部细节。
它适合轻量级、低开销的全局进程行为统计,但不能替代审计级命令历史追踪(如“谁执行了 rm -rf /”这类关键操作)。不过,作为辅助手段,在无法启用 auditd 的受限环境(如某些容器或旧内核)中仍有价值。
如何用 accton 开启用户进程审计
1. 安装 acct 工具包
-
Debian/Ubuntu:
sudo apt update && sudo apt install acct
-
RHEL/CentOS/Rocky/AlmaLinux:
sudo yum install psacct # 或 dnf install sysstat-acct(新版可能整合)
✅ 安装后,
accton、sa、lastcomm等命令即可用。
2. 启用进程记账
sudo accton /var/log/account/pacct
-
/var/log/account/pacct是默认记账文件路径(若目录不存在请先创建):sudo mkdir -p /var/log/account sudo touch /var/log/account/pacct sudo chmod 600 /var/log/account/pacct sudo chown root:root /var/log/account/pacct
⚠️ 注意:
accton必须由 root 运行;记账文件权限需严格(仅 root 可读写),否则acct会拒绝写入。
3. 设置开机自启(持久化)
- 编辑
/etc/default/acct(Debian/Ubuntu)或/etc/sysconfig/acct(RHEL系),确保ACCTON=yes; - 或直接启用 systemd 服务(部分发行版支持):
sudo systemctl enable --now psacct # 或 acct.service
4. 验证是否生效
sudo accton -v # 查看当前状态 ls -l /var/log/account/pacct # 应有写入时间更新
执行任意命令(如 ls, date),稍等几秒后检查:
sudo lastcomm | head -5
输出类似:
ls user pts/1 0.00 secs Mon Jul 21 12:15 bash user pts/1 0.01 secs Mon Jul 21 12:15
能查什么?不能查什么?
| 功能 | 是否支持 | 说明 |
|---|---|---|
| 记录 UID、命令名(不含参数) | ✅ | 如 ls、cp,但不是 ls -la /tmp
|
| 记录终端(tty)、启动时间、运行时长、CPU 时间 | ✅ |
lastcomm -i 可显示 PID 和启动时间 |
按用户过滤(如 lastcomm user) |
✅ | 支持用户名或 UID(lastcomm -u 1001) |
记录 sudo、su、脚本内调用的命令 |
✅ | 所有 fork+exec 的进程都会记账,不依赖 shell |
| 记录命令参数、完整路径、登录会话 ID、IP 地址 | ❌ |
acct 不保存这些,需 auditd 或 syslog 补充 |
防绕过(如 exec /bin/sh、python -c) |
⚠️ 有限 | 能记录 python 进程启动,但无法还原 -c "import os; os.system('rm')"
|
实用查询技巧
- 查某用户最近执行的所有命令(不含参数):
sudo lastcomm user
- 按时间倒序显示(最新在前):
sudo lastcomm --reverse
- 统计各命令执行频次:
sudo sa -c | head -10
- 查看某命令总 CPU 时间消耗:
sudo sa -m | grep 'ls'
补充建议:与 auditd 协同使用更可靠
acct 是补充,不是替代:
- 用
acct做长期资源消耗分析和粗粒度行为概览; - 用
auditd(规则-a always,exit -F arch=b64 -S execve)做高保真命令审计(含参数、TTY、session、loginuid); - 日志统一转发至远程 SIEM,避免本地删改。
acct 简单、稳定、低开销,但别指望它回答“谁删了数据库配置文件”——那得靠 auditd + ausearch -f /etc/my.cnf。











