如何在 Linux 中监控用户活动

作为 Linux 管理员,您需要跟踪所有用户的活动。 当服务器出现问题时,这将很有帮助。 您可以分析和调查用户的活动,并尝试找出问题的根本原因。 有很多方法可以监控用户。 在本指南中,我们将讨论 GNU 会计实用程序 可用于监视 Linux 中的用户活动。 记帐实用程序提供有关系统使用情况的有用信息,例如连接、执行的程序和系统资源的使用情况。 这些会计实用程序可以使用安装 psacct 或者 账户 包裹。 psacct 或 acct 相同。 在基于 RPM 的系统中,它以 psacct 的形式提供,而在基于 DEB 的系统中,它以 acct 的形式提供。

通常,用户的命令行历史详细信息将存储在 .bash_history 文件在他们的 $HOME 目录中。 一些用户可能会尝试编辑、修改或删除历史记录。 但是,会计实用程序仍然能够检索用户活动,即使他们 清除他们的命令行历史 完全地。 因为,所有的进程记帐文件都归root用户所有,普通用户不能编辑它们。

安装 psacct 或 acct

在 RHEL、CentOS、 Fedora,Scientific Linux,以root用户运行以下命令安装psacct:

$ sudo yum install psacct

使用命令启用并启动 psacct 服务:

$ sudo systemctl enable psacct
$ sudo systemctl start psacct

在 Debian、Ubuntu、Linux Mint 上,如下所示安装它。

$ sudo apt-get install acct

上面的命令会自动安装 acct 并启动它的服务。

您可以使用命令验证它是否已启动:

$ sudo systemctl status acct

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

在 Linux 中监控用户活动

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

  • 交流 – 显示有关用户登录时间的统计信息。
  • 最后的通讯 – 显示有关先前执行的命令的信息。
  • 阿克顿 – 打开或关闭进程记帐。
  • 转储账户 – 将输出文件从 accton 格式转换为人类可读的格式。
  • 转储utmp – 以人类可读的格式打印 utmp 文件。
  • – 总结有关先前执行的命令的信息。

让我们用例子来一一看看。

交流

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

$ ac

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

total       30.62

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

$ ac -d

样本输出:

Nov 24 total 0.81
Apr 12 total 0.01
Jun 20 total 9.27
Jun 30 total 0.23
Mar 11 total 5.34
Mar 16 total 0.70
Mar 21 total 9.55
Mar 23 total 1.77
Today total 3.03

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

$ ac -p

样本输出:

sk 0.03
root 30.73
total 30.76

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

$ ac sk

样本输出:

total 0.03

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

$ ac -d root

样本输出:

Nov 24 total 0.81
Apr 12 total 0.01
Jun 20 total 9.27
Jun 30 total 0.23
Mar 11 total 5.34
Mar 16 total 0.70
Mar 21 total 9.55
Mar 23 total 1.77
Today total 3.41

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

$ man ac

最后的通讯

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

$ lastcomm

样本输出:

sshd SF sshd __ 0.01 secs Fri Mar 24 15:09
unix_chkpwd S root __ 0.00 secs Fri Mar 24 15:09
unix_chkpwd S root __ 0.00 secs Fri Mar 24 15:09
systemd-cgroups S root __ 0.00 secs Fri Mar 24 15:09
systemd-cgroups S root __ 0.00 secs Fri Mar 24 15:09
sshd S root __ 0.06 secs Fri Mar 24 15:09
sshd SF sk __ 0.06 secs Fri Mar 24 15:09
bash sk pts/1 0.00 secs Fri Mar 24 15:09
clear sk pts/1 0.00 secs Fri Mar 24 15:09
vi sk pts/1 0.00 secs Fri Mar 24 15:09
cat sk pts/1 0.00 secs Fri Mar 24 15:09
bash F sk pts/1 0.00 secs Fri Mar 24 15:09
consoletype sk pts/1 0.00 secs Fri Mar 24 15:09
grep sk pts/1 0.00 secs Fri Mar 24 15:09
bash F sk pts/1 0.00 secs Fri Mar 24 15:09

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

$ lastcomm sk

样本输出:

sshd SF sk __ 0.06 secs Fri Mar 24 15:09
bash sk pts/1 0.00 secs Fri Mar 24 15:09
clear sk pts/1 0.00 secs Fri Mar 24 15:09
vi sk pts/1 0.00 secs Fri Mar 24 15:09
cat sk pts/1 0.00 secs Fri Mar 24 15:09
bash F sk pts/1 0.00 secs Fri Mar 24 15:09
consoletype sk pts/1 0.00 secs Fri Mar 24 15:09
grep sk pts/1 0.00 secs Fri Mar 24 15:09

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

$ lastcomm vi

样本输出:

vi sk pts/1 0.00 secs Fri Mar 24 15:09
vi root pts/1 0.00 secs Fri Mar 24 15:03

正如你在上面的输出中看到的,vi 命令已经被 root 和 sk 用户执行了两次。

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

$ man lastcomm

阿克顿

此实用程序将允许您打开或关闭会计。

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

$ accton on

要关闭它,请运行:

$ accton off

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

$ man accton

转储账户和转储utmp

转储账户 实用程序将输出文件从 accton 格式显示为人类可读的格式。

$ dump-acct /var/account/pacct

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

$ dump-utmp /var/run/utmp

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

$ man dump-acct
$ man dump-utmp

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

$ sa

样本输出:

 318 951.07re 0.01cp 0avio 15299k
 4 33.04re 0.01cp 0avio 26352k sshd
 7 2.05re 0.00cp 0avio 25184k sshd*
 2 0.01re 0.00cp 0avio 89856k dnf
 35 0.00re 0.00cp 0avio 29767k man*
 29 0.00re 0.00cp 0avio 7377k bash*
 12 0.00re 0.00cp 0avio 6259k unix_chkpwd
 12 0.00re 0.00cp 0avio 2674k systemd-cgroups
 10 0.00re 0.00cp 0avio 2260k grep
 9 166.31re 0.00cp 0avio 25375k ***other*
 9 110.33re 0.00cp 0avio 0k kworker/0:2*
 9 110.33re 0.00cp 0avio 0k kworker/0:0*
 9 0.00re 0.00cp 0avio 3830k id
 8 0.00re 0.00cp 0avio 1080k ac
 8 0.00re 0.00cp 0avio 26976k logger
 8 0.00re 0.00cp 0avio 26976k basename
 6 93.90re 0.00cp 0avio 29712k man
 6 0.00re 0.00cp 0avio 1629k clear
 5 119.94re 0.00cp 0avio 0k kworker/0:2H*
 5 93.90re 0.00cp 0avio 27568k less

要打印每个用户的进程数和 CPU 分钟数,只需运行:

$ sa -m

样本输出:

337 961.10re 0.01cp 0avio 15593k
root 286 857.82re 0.01cp 0avio 16672k
sk 45 3.88re 0.00cp 0avio 7992k
sshd 5 0.34re 0.00cp 0avio 20966k
postfix 1 99.06re 0.00cp 0avio 22272k

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

$ man sa

推荐阅读:

  • 如何限制用户对 Linux 系统的访问

就这样。 每个 Linux 管理员都应该了解 GNU 会计实用程序,以密切关注所有用户。 这些实用程序将有助于排除故障。

资源:

感谢您的光临!

帮助我们帮助您:

祝你有美好的一天!!