如何使用 psacct 和 acct 工具监控 Linux 用户活动:谁在登录?执行了什么命令?消耗了多少资源?

作为 Linux 系统管理员,特别是管理多用户服务器时,需要我们全面掌握系统动态:谁在登录?他们在执行什么命令?消耗了多少 CPU 时间?这些问题不仅是好奇心驱使,更是系统安全、故障排查和资源管理的重要基础。
psacct 和 acct 是一组开源工具集,专门用于监控 Linux 系统中的用户活动。这些工具在后台运行,能够追踪每个用户在系统上的行为及其资源消耗情况。
1.为什么这些工具至关重要
在实际运维中,它们提供了以下核心功能:
- 用户行为监控:实时掌握用户正在执行的操作;
- 命令审计:记录每个用户执行的具体命令;
- 资源消耗分析:统计 CPU、内存等资源使用情况;
- 会话时长追踪:记录用户在系统上的活跃时间;
- 服务资源统计:汇总 Nginx/Apache、MySQL、FTP、SSH 等服务的总资源消耗。
这些功能使得 psacct/acct 成为每位 Linux/Unix 系统管理员工具箱中不可或缺的利器,特别是对于那些需要严格审计服务器用户活动的环境。
2.工具核心功能解析
psacct/acct 软件包提供了一系列进程活动监控功能:
| 命令 | 主要功能 | 应用场景 |
|---|---|---|
| ac | 统计用户登录/注销时间(以小时计) | 用户活跃度分析、容量规划 |
| lastcomm | 显示用户历史执行命令的详细信息 | 安全审计、行为分析 |
| accton | 启用/禁用进程记账功能 | 系统监控开关控制 |
| sa | 汇总并分析历史执行命令的统计信息 | 资源使用趋势分析 |
| last / lastb | 显示最近登录用户列表(含失败尝试) | 安全监控、异常登录检测 |
3.安装指南:不同发行版的差异
检查系统如查已安装,就直接使用,如果没有安装,根据不同 Linux 发行版进行安装:
3.1 RHEL/CentOS/Fedora:使用 psacct 包
# RHEL 7/CentOS 7 sudo yum install psacct # RHEL 8+/CentOS 8+/Fedora sudo dnf install psacct
3.2 Ubuntu/Debian/Linux Mint:使用 acct 包
sudo apt update && sudo apt install acct
4.服务启动与配置
4.1 RHEL/CentOS 系统
一般需要手动启动,先检查服务状态,启动服务:
# 检查服务状态(通常初始状态为禁用) sudo systemctl status psacct # 启动并启用服务(会自动创建 /var/account/pacct 文件) sudo systemctl start psacct sudo systemctl enable psacct # 确认服务正常运行 sudo systemctl status psacct
4.2 Debian/Ubuntu 系统
服务通常会在安装后自动启动,无需额外操作。
5.实际监控操作
5.1 用户连接时间统计
查看所有用户累计连接时间,使用ac命令:
[root@testdb ~]# ac total 3235.87 [root@testdb ~]#
这个数字表示所有用户连接到系统的累计小时数,对于容量规划和理解使用模式非常有价值。
按日期查看连接时间分布,使用ac -d命令:
[root@testdb ~]# ac -d May 29 total 17.67 May 30 total 14.92 May 31 total 33.82 May 31 total 6.67 Jun 1 total 11.74 Jun 2 total 2.45 Jun 3 total 18.23 Jun 4 total 2.22 Jun 5 total 14.81 Jun 6 total 6.60 …… Dec 23 total 33.25 Dec 24 total 28.30 Dec 26 total 50.29 Dec 27 total 33.03 Dec 29 total 48.44 Jan 7 total 216.23 Jan 17 total 240.06 Jan 24 total 168.17 Today total 33.14 [root@testdb ~]#
如果发现某一天有异常峰值(如 1 月 7 日和 1 月 17 日),就需要深入调查是什么导致了活动激增。
查看每个用户的总登录时间,使用ac -p命令:
[root@testdb ~]# ac -p ymadmin 23.66 bjkb 53.75 root 3158.55 total 3235.96 [root@testdb ~]#
这里可以看到root用户的登录时间显著高于其他用户。这可能符合您的环境特点,也可能提示需要将更多任务委托给非 root 用户。
5.2 特定用户活动分析
查看特定用户的总登录时间:
ac ymadmin
查看用户按日登录明细:
[root@testdb ~]# ac -d ymadmin Nov 17 total 10.84 Nov 18 total 7.26 Nov 19 total 5.56 [root@testdb ~]#
查看最近 31 天的登录情况:
[root@zybcdb81 ~]# ac -d oracle | tail -n 31 Nov 26 total 0.68 Nov 27 total 0.20 [root@zybcdb81 ~]#
5.3 命令执行统计分析
汇总所有执行过的命令:
[root@zybcdb81 ~]# sa 339 523.45re 0.04cp 0avio 43329k 30 0.01re 0.01cp 0avio 38240k pgrep 20 294.88re 0.01cp 0avio 39545k ***other* 2 30.57re 0.01cp 0avio 0k kworker/1:1* 2 30.08re 0.01cp 0avio 0k kworker/1:0* 2 30.57re 0.01cp 0avio 0k kworker/1:2* 6 0.01re 0.00cp 0avio 114840k ora_mz00_zybcdb 3 30.08re 0.00cp 0avio 0k kworker/0:2* 3 30.08re 0.00cp 0avio 0k kworker/0:0* 2 47.13re 0.00cp 0avio 0k kworker/2:1* 4 0.00re 0.00cp 0avio 47216k crond* 120 0.02re 0.00cp 0avio 28880k ksmtuned* 62 0.00re 0.00cp 0avio 28416k awk 31 30.02re 0.00cp 0avio 27008k sleep 8 0.00re 0.00cp 0avio 27024k date 7 0.00re 0.00cp 0avio 717312k ora_psp0_zybcdb* 7 0.00re 0.00cp 0avio 2168k systemd-cgroups 5 0.00re 0.00cp 0avio 633k accton 4 0.00re 0.00cp 0avio 27008k logger
输出各列含义说明:
- r
e:实际运行时间(分钟); cp:用户+系统 CPU 时间(分钟);k:平均核心使用率(1k 单位);- 命令名后的 *:表示以超级用户权限运行。
查看详细用户级命令信息:
[root@zybcdb81 ~]# sa -u root 0.00 cpu 1055k mem 0 io accton root 0.00 cpu 30928k mem 0 io ls root 0.00 cpu 0k mem 0 io accton root 0.00 cpu 1055k mem 0 io accton root 0.00 cpu 27008k mem 0 io sleep root 0.00 cpu 28416k mem 0 io awk root 0.00 cpu 28880k mem 0 io ksmtuned * root 0.00 cpu 38240k mem 0 io pgrep root 0.00 cpu 28880k mem 0 io ksmtuned * root 0.00 cpu 28880k mem 0 io ksmtuned * root 0.00 cpu 28416k mem 0 io awk root 0.00 cpu 28880k mem 0 io ksmtuned * root 0.00 cpu 28848k mem 0 io accton-create root 0.00 cpu 2168k mem 0 io systemd-cgroups root 0.00 cpu 2168k mem 0 io systemd-cgroups root 0.00 cpu 0k mem 0 io accton root 0.00 cpu 1055k mem 0 io accton root 0.00 cpu 2168k mem 0 io systemd-cgroups root 0.00 cpu 3858k mem 0 io systemd-tty-ask root 0.00 cpu 73664k mem 0 io gmain root 0.00 cpu 33728k mem 0 io systemctl root 0.00 cpu 110976k mem 0 io gdbus root 0.00 cpu 29216k mem 0 io bash *
这会显示特定用户运行的每个命令及其资源消耗,是用户行为分析的基础。
进程数量与 CPU 时间统计:
[root@zybcb81 ~]# sa -m 349 524.45re 0.04cp 0avio 42776k root 334 425.42re 0.03cp 0avio 27188k oracle 14 0.01re 0.00cp 0avio 416077k postfix 1 99.03re 0.00cp 0avio 22976k [root@zybcdb81 ~]#
如果发现这些数字持续增长,就应该立即检查系统发生了什么情况。
5.4 资源使用排序与百分比分析
按使用率排序显示用户:
[root@zybcdb81 ~]# sa -c 350 100.00% 524.45re 100.00% 0.04cp 100.00% 0avio 42659k 31 8.86% 0.01re 0.00% 0.01cp 18.70% 0avio 38240k pgrep 20 5.71% 294.88re 56.23% 0.01cp 15.22% 0avio 39545k ***other* 2 0.57% 30.57re 5.83% 0.01cp 14.35% 0avio 0k kworker/1:1* 2 0.57% 30.08re 5.74% 0.01cp 14.35% 0avio 0k kworker/1:0* 2 0.57% 30.57re 5.83% 0.01cp 13.48% 0avio 0k kworker/1:2* 6 1.71% 0.01re 0.00% 0.00cp 10.00% 0avio 114840k ora_mz00_zybcdb 3 0.86% 30.08re 5.74% 0.00cp 5.22% 0avio 0k kworker/0:2* 3 0.86% 30.08re 5.74% 0.00cp 4.78% 0avio 0k kworker/0:0* 2 0.57% 47.13re 8.99% 0.00cp 2.61% 0avio 0k kworker/2:1* 4 1.14% 0.00re 0.00% 0.00cp 1.30% 0avio 47216k crond* 124 35.43% 0.02re 0.00% 0.00cp 0.00% 0avio 28880k ksmtuned* 64 18.29% 0.00re 0.00% 0.00cp 0.00% 0avio 28416k awk 32 9.14% 31.02re 5.91% 0.00cp 0.00% 0avio 27008k sleep 8 2.29% 0.00re 0.00% 0.00cp 0.00% 0avio 27024k date 7 2.00% 0.00re 0.00% 0.00cp 0.00% 0avio 717312k ora_psp0_zybcdb* 7 2.00% 0.00re 0.00% 0.00cp 0.00% 0avio 2168k systemd-cgroups ……
这种细分帮助您识别哪些命令消耗了最多的资源,可以快速发现是否有异常进程占用了超出预期的 CPU 或内存。
5.5 历史命令审计
查看特定用户的命令历史:
[root@zybcdb81 ~]# lastcomm oracle ora_mz00_zybcdb oracle __ 0.00 secs Mon Jan 26 09:15 ora_psp0_zybcdb F oracle __ 0.00 secs Mon Jan 26 09:15 ora_mz00_zybcdb oracle __ 0.17 secs Mon Jan 26 09:07 ora_psp0_zybcdb F oracle __ 0.00 secs Mon Jan 26 09:07 ora_mz00_zybcdb oracle __ 0.00 secs Mon Jan 26 09:02 ora_psp0_zybcdb F oracle __ 0.00 secs Mon Jan 26 09:02 ora_mz00_zybcdb oracle __ 0.03 secs Mon Jan 26 09:00 ora_psp0_zybcdb F oracle __ 0.00 secs Mon Jan 26 09:00 ora_mz00_zybcdb oracle __ 0.03 secs Mon Jan 26 08:52 ora_psp0_zybcdb F oracle __ 0.00 secs Mon Jan 26 08:52 ora_mz01_zybcdb oracle __ 0.02 secs Mon Jan 26 08:52 ora_mz00_zybcdb oracle __ 0.00 secs Mon Jan 26 08:52 ora_psp0_zybcdb F oracle __ 0.00 secs Mon Jan 26 08:52 ora_psp0_zybcdb F oracle __ 0.00 secs Mon Jan 26 08:52 [root@zybcdb81 ~]#
其中的F标志表示命令已分叉但未执行(通常是 shell 初始化),这是正常行为,但在审计日志时需要了解。
查看最近 10 条命令:
[root@zybcdb81 ~]# lastcomm root | head -n 10 ksmtuned F root __ 0.00 secs Mon Jan 26 09:22 awk root __ 0.00 secs Mon Jan 26 09:22 ksmtuned F root __ 0.00 secs Mon Jan 26 09:22 ksmtuned F root __ 0.00 secs Mon Jan 26 09:22 pgrep root __ 0.02 secs Mon Jan 26 09:22 ksmtuned F root __ 0.00 secs Mon Jan 26 09:22 awk root __ 0.00 secs Mon Jan 26 09:22 sleep root __ 0.00 secs Mon Jan 26 09:21 head root pts/0 0.00 secs Mon Jan 26 09:22 lastcomm root pts/0 0.00 secs Mon Jan 26 09:22 [root@zybcdb81 ~]#
审计特定敏感命令:
# 查看谁执行过 ls 命令 lastcomm ls # 审计敏感文件访问 lastcomm cat | grep -i "shadow\|passwd"
6.实际应用场景
6.1 排查性能问题
当服务器运行缓慢时:
# 识别 CPU 消耗最高的命令 sa -c | head -20 # 查看内存使用情况 sa -l | sort -rnk6 | head -10
6.2 安全事件调查
发生安全事件后:
# 查看事件时间点前后的命令执行情况 lastcomm | grep "2026-01-20" # 审计特定用户的异常行为 lastcomm ymadmin
6.3 资源使用计费
在共享主机环境中:
# 生成月度用户活动报告 ac -p > user_activity_report_$(date +%Y%m).txt
6.4 用户问题诊断
当用户声称”我什么都没做”时:
# 客观展示用户实际执行的操作 lastcomm username | tail -50
7.日志文件管理
主记账文件/var/account/pacct会随时间增长。建议配置日志轮转:
创建/etc/logrotate.d/psacct文件:
/var/account/pacct {
monthly # 每月轮转一次
rotate 12 # 保留 12 个月的历史文件
compress # 压缩旧日志
notifempty # 空文件不轮转
create 0600 root root # 设置正确的权限
}
# 更多的使用方法,请查看各工具的详细手册:
man ac # 连接时间统计 man sa # 命令汇总分析 man lastcomm # 历史命令审计 man accton # 记账功能控制
通过这些工具和最佳实践,可以建立完善的用户活动监控体系,既保障系统安全,又能有效管理资源使用,为系统稳定运行提供有力支撑。
以上关于如何使用 psacct 和 acct 工具监控 Linux 用户活动:谁在登录?执行了什么命令?消耗了多少资源?的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 如何使用 psacct 和 acct 工具监控 Linux 用户活动:谁在登录?执行了什么命令?消耗了多少资源?
微信
支付宝