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 psacctUbuntu/Debian 系统:
sudo apt install acct其他发行版:
# Alpine Linux
sudo apk add psacct
# Arch Linux
sudo pacman -S acct
# OpenSUSE
sudo zypper install acct3. 启动服务
RHEL 系统需要手动启动:
# 查看服务状态
sudo systemctl status psacct
# 启动服务
sudo systemctl start psacct
# 设置开机自启
sudo systemctl enable psacct
# 再次查看状态确认
sudo systemctl status psacctDebian 系统会自动启动服务。
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 --> I3. 核心命令功能
| 命令 | 功能说明 |
|---|---|
| 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 自动轮转日志
九、参考资料
- ac 命令手册:man ac
- sa 命令手册:man sa
- lastcomm 命令手册:man lastcomm
- accton 命令手册:man accton