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

AI 概述
psacct/acct 是监控 Linux 用户活动的开源工具,能追踪用户行为、记录命令、分析资源消耗等。不同 Linux 发行版安装方式不同,安装后需启动服务。通过 ac、sa、lastcomm 等命令,可实现用户连接时间统计、命令执行统计分析、资源使用排序与百分比分析、历史命令审计等功能。实际应用中,可用于排查性能问题、调查安全事件、资源使用计费、用户问题诊断等。此外,还需管理好日志文件,通过这些工具可建立完善的用户活动监控体系。
目录
文章目录隐藏
  1. 1.为什么这些工具至关重要
  2. 2.工具核心功能解析
  3. 3.安装指南:不同发行版的差异
  4. 4.服务启动与配置
  5. 5.实际监控操作
  6. 6.实际应用场景
  7. 7.日志文件管理

如何使用 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

输出各列含义说明:

  • re:实际运行时间(分钟);
  • 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 用户活动:谁在登录?执行了什么命令?消耗了多少资源?的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 如何使用 psacct 和 acct 工具监控 Linux 用户活动:谁在登录?执行了什么命令?消耗了多少资源?

发表回复