欢迎光临
我们一直在努力

如何在 Linux 中监控用户活动

作为 Linux 管理员,您需要跟踪所有用户的活动。当服务器出现问题时,您可以分析和调查用户的活动,并尝试找出问题的根本原因。在 Linux中有很多方法可以监视用户。在本指南中,我们将讨论可用于监控 Linux 中用户活动的GNU 会计实用程序

什么是会计实用程序?

记帐实用程序提供有关系统使用情况的有用信息,例如 Linux 中的连接、执行的程序和系统资源的使用情况。可以使用psacctacct包安装这些记帐实用程序。

psacct 或 acct 相同。在基于 RPM 的系统中,它以 psacct 的形式提供,而在基于 DEB 的系统中,它以 acct 的形式提供。

psacct 或 acct 实用程序有什么用?你可能想知道。通常,用户的命令行历史详细信息将存储.bash_history在其 $HOME 目录中的文件中。一些用户可能会尝试编辑、修改或删除历史记录。

但是,会计实用程序仍然能够检索用户活动,即使他们完全清除了命令行历史记录。因为,所有的进程记帐文件都归root用户所有,普通用户不能编辑它们。

在 Linux 中安装 psacct 或 acct

psacct/acct 实用程序是为流行的 Linux 发行版打包的。

要在 Alpine Linux 中安装 psacct,请运行:

$ sudo apk add psacct

要在 Arch Linux 及其变体(如 EndeavourOS 和 Manjaro Linux)中安装 acct,请运行:

$ sudo pacman -S acct

在 Fedora、RHEL 及其克隆版本(如 CentOS、AlmaLinux 和 Rocky Linux)上,运行以下命令来安装 psacct:

$ sudo dnf install psacct

在 RHEL 6 和更早的版本中,您应该使用yum而不是dnf安装 psacct。

$ sudo yum install psacct

在 Debian、Ubuntu、Linux Mint 上,使用以下命令安装 acct:

$ sudo apt install acct

要在 openSUSE 上安装 acct,请运行:

$ sudo zypper install acct

启动 psacct/acct 服务

要启用和启动 psacct 服务,请运行:

$ sudo systemctl enable psacct
$ sudo systemctl start psacct

要检查 psacct 服务是否已加载并处于活动状态,请运行:

$ sudo systemctl status psacct

在基于 DEB 的系统上,安装后会自动启动 acct 服务。

您可以使用以下命令验证 acct 服务是否已启动:

$ sudo systemctl status acct

输出:

● acct.service - Kernel process accounting
     Loaded: loaded (/lib/systemd/system/acct.service; enabled; vendor preset: enabled)
     Active: active (exited) since Thu 2022-10-13 16:06:35 IST; 28s ago
       Docs: man:accton(8)
    Process: 3241 ExecStart=/usr/sbin/accton /var/log/account/pacct (code=exited, status=0/SUCCESS)
   Main PID: 3241 (code=exited, status=0/SUCCESS)
        CPU: 879us

Oct 13 16:06:35 ubuntu2204 systemd[1]: Starting Kernel process accounting...
Oct 13 16:06:35 ubuntu2204 accton[3241]: Turning on process accounting, file set to '/var/log/account/pacct'.
Oct 13 16:06:35 ubuntu2204 systemd[1]: Finished Kernel process accounting.

下载免费电子书:“Nagios 监控手册”

使用 psacct 或 acct 监控 Linux 中的用户活动

psacct(进程记帐)包包含以下有用的实用程序来监视用户和进程活动。

  • ac – 显示有关用户登录时间的统计信息。
  • lastcomm – 显示有关先前执行的命令的信息。
  • accton – 打开或关闭进程记帐。
  • dump-acct – 将输出文件从 accton 格式转换为人类可读的格式。
  • dump-utmp – 以人类可读的格式打印 utmp 文件。
  • sa – 总结有关先前执行的命令的信息。

让我们通过示例使用每个实用程序来学习如何监控 Linux 用户的活动。

1. ac 命令示例

ac实用程序将以小时为单位显示连接时间报告。它可以告诉您一个用户或一组用户连接到系统的时间。

1.1。显示所有用户的总连接时间

$ ac

此命令以小时为单位显示所有用户的总连接时间。

total       52.91

1.2. 按天显示所有用户的总连接数

您可以使用-d标志按天对结果进行排序,如下所示。

$ ac -d

输出:

May 11	total        4.29
May 13	total        3.23
May 14	total        7.66
May 15	total        8.97
May 16	total        0.52
May 20	total        4.09
May 24	total        1.32
Jun  9	total       15.18
Jun 10	total        2.97
Jun 22	total        2.61
Jul 19	total        1.95
Today	total        0.29

1.3. 按用户获取总连接时间

此外,您可以使用-p标志显示每个用户与系统连接的时间。

$ ac -p

输出:

ostechnix                           52.85
root                                 0.51
total       53.36

1.4. 打印特定用户的总连接时间

此外,您还可以显示单个用户的总登录时间。

$ ac ostechnix

输出:

total       52.95

1.5。按天查看某个用户的总连接时间

要按天显示单个用户的登录时间,请运行:

$ ac -d ostechnix

输出:

May 11	total        4.29
May 13	total        3.23
May 14	total        7.66
May 15	total        8.97
May 16	total        0.01
May 20	total        4.09
May 24	total        1.32
Jun  9	total       15.18
Jun 10	total        2.97
Jun 22	total        2.61
Jul 19	total        1.95
Today	total        0.68

有关更多详细信息,请参阅手册页。

$ man ac

2. lastcomm 命令示例

lastcomm实用程序显示以前执行的命令的列表。最近执行的命令将首先列出。

2.1。显示以前执行的命令

$ lastcomm

输出:

systemd-hostnam  S     root     __         0.06 secs Thu Oct 13 17:21
systemd-localed  S     root     __         0.06 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
awk                    ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
uname                  ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
sed                    ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
grep                   ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
grep                   ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
bash              F    ostechni pts/1      0.00 secs Thu Oct 13 17:22
[...]

2.2. 打印特定用户最后执行的命令

上面的命令显示所有用户的命令。您可以使用以下命令显示特定用户先前执行的命令:

$ lastcomm ostechnix

输出:

less                   ostechni pts/1      0.00 secs Thu Oct 13 17:26
lastcomm               ostechni pts/1      0.00 secs Thu Oct 13 17:26
lastcomm               ostechni pts/1      0.00 secs Thu Oct 13 17:26
lastcomm               ostechni pts/1      0.00 secs Thu Oct 13 17:26
gdbus                X ostechni __         0.00 secs Thu Oct 13 17:24
lastcomm               ostechni pts/1      0.00 secs Thu Oct 13 17:24
ac                     ostechni pts/1      0.00 secs Thu Oct 13 17:24
update-notifier   F    ostechni __         0.00 secs Thu Oct 13 17:23
apport-checkrep        ostechni __         0.06 secs Thu Oct 13 17:23
apport-checkrep        ostechni __         0.05 secs Thu Oct 13 17:23
systemctl              ostechni __         0.00 secs Thu Oct 13 17:23
apt-check              ostechni __         0.81 secs Thu Oct 13 17:23
dpkg                   ostechni __         0.00 secs Thu Oct 13 17:23
ischroot               ostechni __         0.00 secs Thu Oct 13 17:23
dpkg                   ostechni __         0.00 secs Thu Oct 13 17:23
[...]

2.3. 打印命令执行的总数

此外,您可以查看特定命令已执行了多少次。

$ lastcomm apt

输出:

apt              S     root     pts/2      0.70 secs Thu Oct 13 16:06
apt               F    root     pts/2      0.00 secs Thu Oct 13 16:06
apt               F    root     pts/2      0.00 secs Thu Oct 13 16:06

正如您在上面的输出中看到的,该apt命令已被root用户执行了 3 次。

有关更多详细信息,请参阅手册页。

$ man lastcomm

3. 命令示例

sa 实用程序将汇总有关先前执行的命令的信息。

3.1。打印所有命令的摘要

$ sa

输出:

  1522    1598.63re       0.23cp         0avio     32712k
    139     570.90re       0.05cp         0avio     36877k   ***other*
     38     163.63re       0.05cp         0avio    111445k   gdbus
      3       0.05re       0.04cp         0avio     12015k   apt-check
     27     264.27re       0.02cp         0avio         0k   kworker/dying*
      2      51.87re       0.01cp         0avio   5310464k   Docker Desktop
      5       0.03re       0.01cp         0avio       785k   snap-confine
      8      59.48re       0.01cp         0avio     85838k   gmain
      5     103.94re       0.01cp         0avio    112720k   dconf worker
     24       3.38re       0.00cp         0avio      2937k   systemd-udevd*
      7       0.01re       0.00cp         0avio     36208k   5
      3       1.51re       0.00cp         0avio      3672k   systemd-timedat
      2       0.00re       0.00cp         0avio     10236k   apport-checkrep
      2       0.01re       0.00cp         0avio   4316160k   ThreadPoolForeg*
      2       0.00re       0.00cp         0avio      8550k   package-data-do
      3       0.79re       0.00cp         0avio      2156k   dbus-daemon
     12       0.00re       0.00cp         0avio     39631k   ffmpeg
[...]

3.2. 查看进程数和 CPU 分钟数

要打印每个用户的进程数和 CPU 分钟数,请运行sa带有-m标志的命令:

$ sa -m

输出:

root                                  561     647.23re       0.09cp         0avio      3847k
ostechnix                             825     780.79re       0.08cp         0avio     47788k
gdm                                   117      13.43re       0.06cp         0avio     63715k
colord                                  2      52.01re       0.00cp         0avio     89720k
geoclue                                 1       1.01re       0.00cp         0avio     70608k
jellyfin                               12       0.00re       0.00cp         0avio     39631k
man                                     1       0.00re       0.00cp         0avio      3124k
kernoops                                4     104.12re       0.00cp         0avio      3270k
sshd                                    1       0.05re       0.00cp         0avio      3856k
whoopsie                                1       0.00re       0.00cp         0avio      8552k

3.3. 打印用户 ID 和命令名称

对于记帐文件中的每个命令,使用-u标志打印用户 ID 和命令名称。

$ sa -u

输出:

root       0.00 cpu      693k mem      0 io accton          
root       0.00 cpu     3668k mem      0 io systemd-tty-ask 
root       0.00 cpu     3260k mem      0 io systemctl       
root       0.01 cpu     3764k mem      0 io deb-systemd-inv 
root       0.00 cpu      722k mem      0 io acct.postinst   
root       0.00 cpu      704k mem      0 io rm              
root       0.00 cpu      939k mem      0 io cp              
root       0.00 cpu      704k mem      0 io rm              
root       0.00 cpu      951k mem      0 io find            
root       0.00 cpu      911k mem      0 io gzip            
root       0.00 cpu      722k mem      0 io sh              
root       0.00 cpu      748k mem      0 io install-info    
root       0.00 cpu      911k mem      0 io gzip            
[...]

有关更多详细信息,请参阅手册页。

$ man sa

4. dump-acctdump-utmp 命令示例

dump-acct实用程序将输出文件从 accton 格式显示为人类可读的格式。

$ dump-acct /var/account/pacct

dump-utmp 以人类可读的格式显示 utmp 文件。

$ dump-utmp /var/run/utmp

有关更多详细信息,请参阅手册页。

$ man dump-acct
$ man dump-utmp

5. accton 命令示例

accton 命令将允许您打开或关闭记帐。

要打开进程记帐,请运行:

$ accton on

要关闭它,请运行:

$ accton off

有关更多详细信息,请参阅手册页。

$ man accton

结论

每个 Linux 管理员都应该了解 GNU 会计实用程序以密切关注所有用户。这些实用程序在故障排除时间将非常有帮助。

资源:

窗外天空
关注公众号『窗外天空』

获取更多建站运营运维新知!
互联网创业、前沿技术......

赞(0) 打赏
文章名称:《如何在 Linux 中监控用户活动》
文章链接:https://www.nixonli.com/24402.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏