Linux 用户活动监控工具 psacct 与 acct 使用教程

一、概述

1. 简介

A. 是什么

psacct 和 acct 是 Linux 系统中用于监控用户活动的开源工具。这些工具在后台运行,持续跟踪系统中每个用户的活动以及所消耗的资源。

B. 为什么学

  • 多用户服务器管理需要了解用户行为
  • 安全审计和问题排查的基础工具
  • 资源管理和容量规划的数据来源
  • 系统管理员必备的监控技能

C. 学完能做什么

  • 查看用户登录时长和连接时间统计
  • 追踪用户执行的所有命令
  • 监控系统资源消耗情况
  • 生成用户活动报告用于审计

2. 前置知识

A. 必备技能

  • 基本 Linux 命令操作
  • 了解 Linux 用户和权限概念
  • 熟悉 systemctl 服务管理命令

B. 推荐知识

  • Linux 进程管理基础
  • 系统日志和日志轮转概念

二、环境准备

1. 系统要求

  • Linux 发行版:RHEL/CentOS/Fedora 或 Ubuntu/Debian
  • root 或 sudo 权限
  • 磁盘空间:至少 500MB 用于日志存储

2. 安装步骤

RHEL/CentOS/Fedora 系统:

sudo yum install psacct
# 或在新系统上使用 dnf
sudo dnf install psacct

Ubuntu/Debian 系统:

sudo apt install acct

其他发行版:

# Alpine Linux
sudo apk add psacct

# Arch Linux
sudo pacman -S acct

# OpenSUSE
sudo zypper install acct

3. 启动服务

RHEL 系统需要手动启动:

# 查看服务状态
sudo systemctl status psacct

# 启动服务
sudo systemctl start psacct

# 设置开机自启
sudo systemctl enable psacct

# 再次查看状态确认
sudo systemctl status psacct

Debian 系统会自动启动服务。

4. 验证安装

# 检查进程日志文件是否创建
ls -lh /var/account/pacct

# 查看当前登录统计
ac

三、核心概念

1. 基本术语

  • psacct/acct:进程 accounting 工具包
  • pacct:进程 accounting 数据文件
  • wtmp:用户登录登出记录文件
  • 连接时间:用户登录系统的累计时长

2. 工作原理

graph TB
    A[用户登录] --> B[系统记录 wtmp]
    A --> C[用户执行命令]
    C --> D[acct 记录进程信息]
    D --> E[写入 pacct 文件]
    B --> F[ac 命令读取]
    E --> G[sa 命令读取]
    E --> H[lastcomm 命令读取]
    F --> I[生成统计报告]
    G --> I
    H --> I

psacct/acct 工作原理

3. 核心命令功能

命令功能说明
ac显示用户登录/登出统计(连接时间)
lastcomm显示用户之前执行的命令
accton开启或关闭进程 accounting
sa汇总已执行命令的信息
last/lastb显示最后登录的用户列表

四、快速上手

1. 查看总连接时间

ac

输出示例:

total     11299.15

这个数字表示所有用户累计连接小时数。

2. 按日期查看连接时间

ac -d

输出示例:

Oct 28  total      234.50
Oct 29  total      189.23
Oct 30  total      198.67
Oct 31  total      456.12
Nov 1   total      267.45
Nov 2   total      201.34
Nov 3   total      423.45

注意某些日期的异常峰值,需要调查原因。

3. 按用户查看连接时间

ac -p

输出示例:

rockylinux                         425.61
tecmint                            702.29
root                             10171.54
total    11299.44

可以看到 root 用户的登录时间远超其他用户。

4. 查看特定用户连接时间

ac ravi

输出示例:

total      110.31

五、进阶内容

1. 命令执行统计

A. 查看所有命令摘要

sa

输出包含以下列:

  • 第一列:实际执行时间(挂钟时间,分钟)
  • 第二列:CPU 时间(系统+用户时间,分钟)
  • 第三列:平均 CPU 使用量(以 1k 为单位)
  • 第四列:命令名称

带星号(*)的命令表示以超级用户权限运行。

B. 查看特定用户信息

sa -u

显示每个用户执行的命令及资源消耗。

C. 查看进程统计

sa -m

显示总进程数和 CPU 分钟数。如果这些数字持续增长,需要调查系统状况。

D. 按使用率排序

sa -c

按百分比显示资源使用情况,帮助识别消耗最多资源的命令。

2. 命令历史查询

A. 查看用户最后执行的命令

lastcomm ravi

输出显示用户 ravi 执行的最后命令。

B. 限制输出行数

lastcomm tecmint | head -n 20

只显示最近 20 条命令。

C. 搜索特定命令

lastcomm ls

查看所有 ls 命令的执行记录。

D. 安全审计示例

lastcomm cat | grep -i "shadow\|passwd"

查看谁访问过敏感文件。

3. 实战应用场景

A. 追踪资源消耗

当服务器运行缓慢时,使用 sa -c 识别哪些命令消耗最多 CPU 时间。

B. 安全审计

使用 lastcomm 审查安全事件前执行的命令,创建比 shell history 更难篡改的审计跟踪。

C. 计费和统计报告

对于共享主机环境,ac -p 提供用户活动的具体数据用于计费。

D. 问题排查

当用户声称"我什么都没做"时,可以验证实际执行的命令。

六、日志管理

1. 日志文件位置

主要的 accounting 文件位于 /var/account/pacct

2. 日志轮转配置

创建 logrotate 配置文件 /etc/logrotate.d/psacct:

sudo nano /etc/logrotate.d/psacct

添加以下内容:

/var/account/pacct {
    monthly
    rotate 12
    compress
    notifempty
    create 0600 root root
}

配置说明:

  • monthly:每月轮转一次
  • rotate 12:保留 12 个历史文件
  • compress:压缩旧日志
  • notifempty:空文件不轮转
  • create 0600 root root:创建新文件并设置权限

七、最佳实践

1. 定期检查报告

  • 每周查看用户连接时间统计
  • 关注异常登录模式
  • 监控资源消耗趋势

2. 日志保留策略

  • 根据合规要求确定保留时间
  • 定期备份日志文件
  • 确保磁盘空间充足

3. 安全建议

  • 限制日志文件访问权限(0600)
  • 定期审计管理员活动
  • 将日志发送到远程日志服务器

4. 性能考虑

  • accounting 会带来轻微性能开销
  • 高负载系统需要评估影响
  • 可以使用 accton 命令临时关闭

八、常见问题

1. 安装问题

Q:psacct 服务无法启动
A:检查 /var/account 目录是否存在,权限是否正确

2. 配置问题

Q:ac 命令没有输出
A:确认 psacct 服务已启动,且用户登录过系统

3. 运行问题

Q:日志文件过大
A:配置 logrotate 自动轮转日志

九、参考资料

  1. ac 命令手册:man ac
  2. sa 命令手册:man sa
  3. lastcomm 命令手册:man lastcomm
  4. accton 命令手册:man accton

参考资料

  1. How to Monitor Linux User Activity with psacct and acct Tools
最后修改:2026 年 01 月 27 日
如果觉得我的文章对你有用,请随意赞赏