如何在Linux中监视用户活动

时间:2020-03-21 11:46:21  来源:igfitidea点击:

在本教程中,我们将讨论可用于监视Linux中用户活动的GNU记帐实用程序。
记帐实用程序提供有关系统使用情况的有用信息,例如连接,执行的程序以及系统资源的使用情况。
可以使用psacct或者acct软件包安装这些记帐实用程序。
psacct或者acct相同。
在基于RPM的系统中,它可以作为psacct来使用,而在基于DEB的系统中,它可以作为acct来使用。

通常,用户的命令行历史记录详细信息将存储在其$HOME目录中的.bash_history文件中。
某些用户可能会尝试编辑,修改或者删除历史记录。
但是,即使他们完全清除了命令行历史记录,会计实用程序仍将能够检索用户活动。

因为,所有流程记帐文件均由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

在Linux中监控用户活动

psacct(流程记帐)软件包包含以下有用的实用程序,用于监视用户和流程活动。

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

ac

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

$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实用程序显示以前执行的命令的列表。
最新执行的命令将首先列出。

$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

从上面的输出中可以看到,root和sk用户已经两次执行了vi命令。

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

$man lastcomm

Accton

此实用程序将允许我们打开或者关闭记帐。

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

$accton on

要关闭它,请运行:

$accton off

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

$man accton

dump-acct和dump-utmp

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

$dump-acct /var/account/pacct

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

$dump-utmp /var/run/utmp

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

$man dump-acct
$man dump-utmp

SA

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