Loading... # 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 系统: ```bash sudo yum install psacct # 或在新系统上使用 dnf sudo dnf install psacct ``` Ubuntu/Debian 系统: ```bash sudo apt install acct ``` 其他发行版: ```bash # Alpine Linux sudo apk add psacct # Arch Linux sudo pacman -S acct # OpenSUSE sudo zypper install acct ``` ## 3. 启动服务 RHEL 系统需要手动启动: ```bash # 查看服务状态 sudo systemctl status psacct # 启动服务 sudo systemctl start psacct # 设置开机自启 sudo systemctl enable psacct # 再次查看状态确认 sudo systemctl status psacct ``` Debian 系统会自动启动服务。 ## 4. 验证安装 ```bash # 检查进程日志文件是否创建 ls -lh /var/account/pacct # 查看当前登录统计 ac ``` # 三、核心概念 ## 1. 基本术语 - psacct/acct:进程 accounting 工具包 - pacct:进程 accounting 数据文件 - wtmp:用户登录登出记录文件 - 连接时间:用户登录系统的累计时长 ## 2. 工作原理 ```mermaid 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 ```  ## 3. 核心命令功能 | 命令 | 功能说明 | |------|---------| | ac | 显示用户登录/登出统计(连接时间) | | lastcomm | 显示用户之前执行的命令 | | accton | 开启或关闭进程 accounting | | sa | 汇总已执行命令的信息 | | last/lastb | 显示最后登录的用户列表 | # 四、快速上手 ## 1. 查看总连接时间 ```bash ac ``` 输出示例: ``` total 11299.15 ``` 这个数字表示所有用户累计连接小时数。 ## 2. 按日期查看连接时间 ```bash 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. 按用户查看连接时间 ```bash ac -p ``` 输出示例: ``` rockylinux 425.61 tecmint 702.29 root 10171.54 total 11299.44 ``` 可以看到 root 用户的登录时间远超其他用户。 ## 4. 查看特定用户连接时间 ```bash ac ravi ``` 输出示例: ``` total 110.31 ``` # 五、进阶内容 ## 1. 命令执行统计 ### A. 查看所有命令摘要 ```bash sa ``` 输出包含以下列: - 第一列:实际执行时间(挂钟时间,分钟) - 第二列:CPU 时间(系统+用户时间,分钟) - 第三列:平均 CPU 使用量(以 1k 为单位) - 第四列:命令名称 带星号(*)的命令表示以超级用户权限运行。 ### B. 查看特定用户信息 ```bash sa -u ``` 显示每个用户执行的命令及资源消耗。 ### C. 查看进程统计 ```bash sa -m ``` 显示总进程数和 CPU 分钟数。如果这些数字持续增长,需要调查系统状况。 ### D. 按使用率排序 ```bash sa -c ``` 按百分比显示资源使用情况,帮助识别消耗最多资源的命令。 ## 2. 命令历史查询 ### A. 查看用户最后执行的命令 ```bash lastcomm ravi ``` 输出显示用户 ravi 执行的最后命令。 ### B. 限制输出行数 ```bash lastcomm tecmint | head -n 20 ``` 只显示最近 20 条命令。 ### C. 搜索特定命令 ```bash lastcomm ls ``` 查看所有 ls 命令的执行记录。 ### D. 安全审计示例 ```bash 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: ```bash 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](https://www.tecmint.com/monitor-linux-user-activity-psacct-acct/) 最后修改:2026 年 01 月 27 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏