如何对 Linux 系统上执行的操作进行详细的审计跟踪
授权(内部人员)和未授权(外部人员)用户之间可能会发生入侵。我的经验表明,不满意的用户可能会损坏系统,尤其是在使用 shell 访问时。有些用户很精明,会删除历史文件(例如 ~/.bash_history),但您可以监视所有用户执行的命令。建议您使用进程记帐记录所有 shell 用户活动。进程记帐允许您查看 Linux 用户执行的每个命令,包括 CPU 和内存时间。使用进程记帐,Linux 系统管理员总能找出哪个命令在什么时间执行了 ????
如何对 Linux 系统上执行的操作进行详细的审计跟踪
psacct 或 pact 包包含几个用于监控进程活动的实用程序,包括 ac、lastcomm、accton 和 sa。
- ac 命令显示有关用户登录时间长度的统计信息。
- lastcomm 命令显示有关以前执行的命令的信息。
- accton 命令打开或关闭进程记帐。
- sa 命令总结了有关先前执行的命令的信息。
在Linux下安装psacct或acct包
如果您使用的是 RHEL ver 4.0 或更早版本,请使用up2date 命令
# up2date psacct
:
RHEL/CentOS/Fedora/Rocky/Alma Linux 用户尝试yum /dnf 命令:
# yum install psacct
$ sudo apt-get install acct
Reading package lists... Done Building dependency tree Reading state information... Done The following package was automatically installed and is no longer required: libfwupdplugin1 Use 'apt autoremove' to remove it. The following NEW packages will be installed: acct 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 87.0 kB of archives. After this operation, 337 kB of additional disk space will be used. Get:1 http://us-east-1.ec2.archive.ubuntu.com/ubuntu focal/main amd64 acct amd64 6.6.4-2 [87.0 kB] Fetched 87.0 kB in 0s (5135 kB/s) Selecting previously unselected package acct. (Reading database ... 130950 files and directories currently installed.) Preparing to unpack .../acct_6.6.4-2_amd64.deb ... Unpacking acct (6.6.4-2) ... Setting up acct (6.6.4-2) ... update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults update-rc.d: warning: stop runlevel arguments (1) do not match acct Default-Stop values (0 1 6) Processing triggers for man-db (2.9.1-1) ... Processing triggers for install-info (6.7.0.dfsg.2-5) ... Processing triggers for systemd (245.4-4ubuntu3.17) ...
在Linux下启用psacct / acct服务
默认情况下,Ubuntu/Debian Linux 上的服务是通过创建 /var/account/pacct 文件来启动的。但在Red Hat/Fedora Core/Cent OS下,您需要手动启动 psacct 服务。输入以下两个命令来创建 /var/account/pacct 或 /var/log/account/pacct 文件并启动服务:
最新版本的 RHEL 和 co 需要以下命令:
如果您使用的是Suse/OpenSUSE Linux,服务名称为 acct。输入以下命令:
现在让我们看看如何利用这些实用程序来监视用户命令和时间。
# chkconfig psacct on
# /etc/init.d/psacct start
$ sudo systemctl enable psacct
$ sudo systemctl start psacct
$ sudo systemctl status psacct
# chkconfig acct on
# /etc/init.d/acct start
## Latest version of SUSE/OpenSUSE users try ##
$ sudo systemctl enable acct
$ sudo systemctl start acct
$ sudo systemctl status acct
任务:显示有关用户连接时间的统计信息
ac 命令会根据登录/注销情况打印出以小时为单位的连接时间报告。还会打印出总数。如果输入 ac 而不带任何参数,它将显示总连接时间。运行:
$ ac
示例输出:
total 95.08
显示每一天的总数,而不是在最后只显示一个大总数,输入:
$ ac -d
输出:
Nov 1 total 8.65 Nov 2 total 5.70 Nov 3 total 13.43 Nov 4 total 6.24 Nov 5 total 10.70 Nov 6 total 6.70 Nov 7 total 10.30 ..... .. ... Nov 12 total 3.42 Nov 13 total 4.55 Today total 0.52
除了通常的所有内容合并为一个值之外,您还可以显示每个用户的时间总数,运行:
$ ac -p
输出:
vivek 87.49 root 7.63 total 95.11
任务:查找有关先前执行的用户命令的信息
使用lastcomm 命令打印出有关 Linux 机器上先前执行的命令的信息。您可以使用用户名、tty 名称或命令名称本身来搜索命令。例如,显示由名为“vivek”的用户执行的命令,运行:
$ lastcomm vivek
这是我看到的:
userhelper S X vivek pts/0 0.00 secs Mon Nov 13 23:58 userhelper S vivek pts/0 0.00 secs Mon Nov 13 23:45 rpmq vivek pts/0 0.01 secs Mon Nov 13 23:45 rpmq vivek pts/0 0.00 secs Mon Nov 13 23:45 rpmq vivek pts/0 0.01 secs Mon Nov 13 23:45 gcc vivek pts/0 0.00 secs Mon Nov 13 23:45 which vivek pts/0 0.00 secs Mon Nov 13 23:44 bash F vivek pts/0 0.00 secs Mon Nov 13 23:44 ls vivek pts/0 0.00 secs Mon Nov 13 23:43 rm vivek pts/0 0.00 secs Mon Nov 13 23:43 vi vivek pts/0 0.00 secs Mon Nov 13 23:43 ping S vivek pts/0 0.00 secs Mon Nov 13 23:42 ping S vivek pts/0 0.00 secs Mon Nov 13 23:42 ping S vivek pts/0 0.00 secs Mon Nov 13 23:42 cat vivek pts/0 0.00 secs Mon Nov 13 23:42 netstat vivek pts/0 0.07 secs Mon Nov 13 23:42 su S vivek pts/0 0.00 secs Mon Nov 13 23:38
对于每个条目,都会打印以下信息。以第一行输出为例:
userhelper S X vivek pts/0 0.00 secs Mon Nov 13 23:58
其中,
- userhelper 是进程的命令名称
- S 和 X 是标志,由系统记帐例程记录。以下是每个标志的含义:
- S — 超级用户执行的命令
- F — 在 fork 之后执行的命令,但没有后续的 exec
- D — 命令终止并生成核心文件
- X — 命令以信号 SIGTERM 终止
- vivek 运行该进程的用户的名称
- prts/0 终端名称
- 0.00 秒 – 进程退出的时间
按命令名称搜索会计日志。例如,查找 Linux 系统上 rm 命令和 passwd 命令的详细审计跟踪:
以下是输出:
$ lastcomm rm
$ lastcomm passwd
rm S root pts/0 0.00 secs Tue Nov 14 00:39 rm S root pts/0 0.00 secs Tue Nov 14 00:39 rm S root pts/0 0.00 secs Tue Nov 14 00:38 rm S root pts/0 0.00 secs Tue Nov 14 00:38 rm S root pts/0 0.00 secs Tue Nov 14 00:36 rm S root pts/0 0.00 secs Tue Nov 14 00:36 rm S root pts/0 0.00 secs Tue Nov 14 00:35 rm S root pts/0 0.00 secs Tue Nov 14 00:35 rm vivek pts/0 0.00 secs Tue Nov 14 00:30 rm vivek pts/1 0.00 secs Tue Nov 14 00:30 rm vivek pts/1 0.00 secs Tue Nov 14 00:29 rm vivek pts/1 0.00 secs Tue Nov 14 00:29
当然,也可以通过终端名称(例如 pts/1)搜索会计日志。输入:
$ lastcomm pts/1
总结Linux下的会计信息
使用 sa 命令显示或汇总有关先前执行的 Linux 命令的信息。此外,它还会将这些数据压缩到名为 savacct 的摘要文件中,其中包含调用命令的次数和使用的系统资源。还可以按每个用户汇总这些信息。sa 会将此信息保存到名为 usracct 的文件中。例如:
# :sa
输出:
579 222.81re 0.16cp 7220k 4 0.36re 0.12cp 31156k up2date 8 0.02re 0.02cp 16976k rpmq 8 0.01re 0.01cp 2148k netstat 11 0.04re 0.00cp 8463k grep 18 100.71re 0.00cp 11111k ***other* 8 0.00re 0.00cp 14500k troff 5 12.32re 0.00cp 10696k smtpd 2 8.46re 0.00cp 13510k bash 8 9.52re 0.00cp 1018k less
以第一行为例:
4 0.36re 0.12cp 31156k up2date
其中,
- 0.36re “真实时间”,以挂钟分钟为单位
- 0.12cp系统和用户时间(以 CPU 分钟为单位)的总和
- 31156k CPU 时间平均核心使用率,以 1k 为单位
- up2date命令名称
您也可以显示每个用户的输出:
$ sa -u
输出:
root 0.00 cpu 595k mem accton root 0.00 cpu 12488k mem initlog root 0.00 cpu 12488k mem initlog root 0.00 cpu 12482k mem touch root 0.00 cpu 13226k mem psacct root 0.00 cpu 595k mem consoletype root 0.00 cpu 13192k mem psacct * root 0.00 cpu 13226k mem psacct root 0.00 cpu 12492k mem chkconfig postfix 0.02 cpu 10696k mem smtpd vivek 0.00 cpu 19328k mem userhelper vivek 0.00 cpu 13018k mem id vivek 0.00 cpu 13460k mem bash * lighttpd 0.00 cpu 48240k mem php *
显示每个用户的进程数和 CPU 分钟数,运行:
# sa -m
输出:
667 231.96re 0.17cp 7471k root 544 51.61re 0.16cp 7174k vivek 103 17.43re 0.01cp 8228k postfix 18 162.92re 0.00cp 7529k lighttpd 2 0.00re 0.00cp 48536k
找出谁在消耗 Linux 上的 CPU
通过查看 re、k、cp/cpu(请参阅上面的输出说明)时间,您可以找到可疑活动或占用所有 CPU 的用户/命令的名称。CPU /内存使用率(命令)的增加表明存在问题。请注意,上述命令和软件包在其他类 UNIX 操作系统(如 Sun Solaris 和 *BSD 操作系统)上可用。
总结
这就是在 Linux 下对执行的命令和系统管理员维护系统完整性和安全性所需的其他内容进行详细审计跟踪的方法。使用 man 命令或 help 命令阅读以下手册页:
$ man ac
$ man lastcomm