为了安全,会经常性的查看服务器登录的用户的情况,下面列举常用命令的使用
1 utmp wtmp btmp 文件
这里做个前置说明,因为接下来的很多命令都与这些文件有着千丝万缕的关系。
1.1 文件说明
Linux 用户登录的信息一般放在了这三个文件中。
/var/run/utmp
:记录当前正在登录系统的用户信息,who
和 w
,uptime
命令默认使用此文件。/var/log/wtmp
:记录登录过此系统的用户信息,包括现在和过去(其实就是记录 utmp 文件的历史记录),默认由 last
命令查看。/var/log/btmp
:记录失败的尝试登录信息(这个也囊括了恶意的尝试暴力登录的尝试),默认由 lastb
命令查看。
这三个文件都是二进制文件,并且这三个文件结构完全相同,结构体的定义在 /usr/include/utmp.h
文件中。
1.2 logrotate
默认情况下,文件的日志信息会通过 logrotate
日志管理工具定期清理,logrotate
的配置文件(/etc/logrotate.conf
),其是 logrotate
的缺省配置。
通常情况下不需要对它进行修改。日志文件的轮循压缩等配置存放在独立的配置文件中,它们位置是:/etc/logrotate.d/
目录下,他会覆盖缺省配置。
如果不想记录相关信息,则可以直接删除相关的配置文件。如果系统不存在改文件,则新建一个配置文件即可。这里看下默认的系统日志配置
1 2 3 4 5 6 7 8 9 10 11 12 13
| [root@kycool-strict logrotate.d]# cat syslog /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { missingok sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
|
1.3 注意细节
上面为什么说 /var/log/wtmp
其实是记录 /var/run/utmp
文件的历史记录呢,通过内容对下下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| [root@kycool-strict bits]# utmpdump /var/run/utmp Utmp dump of /var/run/utmp [2] [00000] [~~ ] [reboot ] [~ ] [3.10.0-1160.66.1.el7.x86_64] [0.0.0.0 ] [三 6月 29 23:54:09 2018 ] [1] [00051] [~~ ] [runlevel] [~ ] [3.10.0-1160.66.1.el7.x86_64] [0.0.0.0 ] [三 6月 29 15:54:19 2018 ] [6] [01060] [tty1] [LOGIN ] [tty1 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2018 ] [6] [01059] [tyS0] [LOGIN ] [ttyS0 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2018 ] [7] [14985] [ts/0] [root ] [pts/0 ] [121.32.197.136 ] [121.32.197.136 ] [一 7月 18 10:59:15 2018 ]
[root@kycool-strict bits]# utmpdump /var/log/wtmp Utmp dump of /var/log/wtmp [8] [01088] [tyS0] [ ] [ttyS0 ] [ ] [0.0.0.0 ] [三 5月 25 10:46:00 2018 ] [8] [01089] [tty1] [ ] [tty1 ] [ ] [0.0.0.0 ] [三 5月 25 10:46:00 2018 ] [2] [00000] [~~ ] [reboot ] [~ ] [3.10.0-1160.66.1.el7.x86_64] [0.0.0.0 ] [三 6月 29 23:54:09 2018 ] [1] [00051] [~~ ] [runlevel] [~ ] [3.10.0-1160.66.1.el7.x86_64] [0.0.0.0 ] [三 6月 29 15:54:19 2018 ] [5] [01060] [tty1] [ ] [tty1 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2018 ] [5] [01059] [tyS0] [ ] [ttyS0 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2018 ] [6] [01060] [tty1] [LOGIN ] [tty1 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2018 ] [6] [01059] [tyS0] [LOGIN ] [ttyS0 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2018 ] [7] [01379] [ts/0] [root ] [pts/0 ] [113.65.29.194 ] [113.65.29.194 ] [三 6月 29 15:55:51 2018 ] [8] [01377] [ ] [ ] [pts/0 ] [ ] [0.0.0.0 ] [三 6月 29 15:56:27 2018 ] [7] [01404] [ts/0] [root ] [pts/0 ] [113.65.29.194 ] [113.65.29.194 ] [三 6月 29 15:56:29 2018 ] [8] [01402] [ ] [ ] [pts/0 ] [ ] [0.0.0.0 ] [三 6月 29 16:03:01 2018 ] [7] [01589] [ts/0] [root ] [pts/0 ] [113.65.29.194 ] [113.65.29.194 ] [三 6月 29 16:04:39 2018 ] [8] [01587] [ ] [ ] [pts/0 ] [ ] [0.0.0.0 ] [三 6月 29 20:12:05 2018 ] [7] [04064] [ts/0] [root ] [pts/0 ] [121.32.199.178 ] [121.32.199.178 ] [二 7月 12 15:03:05 2018 ] [8] [04062] [ ] [ ] [pts/0 ] [ ] [0.0.0.0 ] [二 7月 12 17:26:21 2018 ] [7] [14985] [ts/0] [root ] [pts/0 ] [121.32.197.136 ] [121.32.197.136 ] [一 7月 18 10:59:15 2018 ]
|
2 常用命令
2.1 w
查看当前登入系统的用户信息及用户当前的线程。
1 2 3 4 5
| [root@kycool-strict ~]# w
11:09:28 up 18 days, 19:15, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 121.32.197.136 10:59 0.00s 0.00s 0.00s w
|
输出解释:
上半部分
11:09:28 up 18 days, 19:15, 1 user, load average: 0.00, 0.01, 0.05
这里其实类似于 top
的第一行,显示了当前的系统时间,开机运行多久(up
),有多少用户登录(users
),
以及 1
分钟,5
分钟,15
分钟前的平均负载(load average
)。
下半部分
下班部分类似于表格,这就就简述下表头的含义
USER
:登录的用户名TTY
:登录的终端FROM
:用户从哪个 IP 地址进行登录LOGIN@
:登录时间IDLE
:用户闲置时间JCPU
:处于该终端连接下的所有进程占用的 CPU 运算时间。这个时间不包含过去的后台作业时间,但是
包括当前正在运行的后台作业时间PCPU
:当前进程所占用的 CPU 运算时间WHAT
:当前正在运行的命令
2.2 who
查看当前登录用户的情况
当不指定任何参数时,将按照以下顺序打印信息:
登录用户名称,终端信息,登录时间,用户登录 IP 地址
1 2
| [root@kycool-strict ~]# who root pts/0 2018-07-18 10:59 (112.22.194.16)
|
通过 man who 时,发现了一句话:
If FILE is not specified, use /var/run/utmp. /var/log/wtmp as FILE is common.
即如果不指定文件,默认使用 /var/run/utmp
文件,当前也可以指定文件,进行查看
下面使用 wtmp
文件进行查看
1 2 3 4 5 6 7
| [root@kycool-strict ~] root pts/0 2018-06-29 15:55 (113.65.29.194) root pts/0 2018-06-29 15:56 (113.65.29.194) root pts/0 2018-06-29 16:04 (113.65.29.194) root pts/0 2018-07-12 15:03 (121.32.199.178) root pts/0 2018-07-18 10:59 (121.32.197.136)
|
这里看到了过去,现在登录用户的情况
2.3 users
查看当前服务器所有登录用户的情况,更详细的可以查看手册。
1 2
| [root@kycool-strict ~]# users root
|
2.4 lastlog
列出所有用户最近登录的信息,或者指定用户的最近登录信息。其引用的文件是:/var/log/lastlog
1 2 3 4 5 6 7 8 9 10 11 12
| [root@kycool-strict log]# lastlog 用户名 端口 来自 最后登陆时间 future pts/0 121.32.197.136 一 7月 18 10:59:15 +0800 2022 bin **从未登录过** daemon **从未登录过** adm **从未登录过** lp **从未登录过** sync **从未登录过** shutdown **从未登录过** halt **从未登录过** mail **从未登录过** operator **从未登录过**
|
3.5 last
列出当前和曾经登录系统的用户信息。默认读取 /var/log/wtmp
1 2 3 4 5 6 7
| [root@kycool-strict log]# last root pts/0 121.32.197.136 Mon Jul 18 10:59 still logged in root pts/0 121.32.199.178 Tue Jul 12 15:03 - 17:26 (02:23) root pts/0 113.65.29.194 Wed Jun 29 16:04 - 20:12 (04:07) root pts/0 113.65.29.194 Wed Jun 29 15:56 - 16:03 (00:06) root pts/0 113.65.29.194 Wed Jun 29 15:55 - 15:56 (00:00) reboot system boot 3.10.0-1160.66.1 Wed Jun 29 23:54 - 13:54 (18+14:00)
|
当然,也可以通过 last -f
参数指定读取文件,可以是 /var/log/btmp
,/var/run/utmp
1 2 3 4 5
| [root@kycool-strict log]# last -f /var/run/utmp root pts/0 121.32.197.136 Mon Jul 18 10:59 still logged in reboot system boot 3.10.0-1160.66.1 Wed Jun 29 23:54 - 13:55 (18+14:01)
utmp begins Wed Jun 29 23:54:09 2022
|
3.6 lastb
列出失败的尝试登陆信息,和 last 命令功能相同,不过默认读取的文件是:/var/log/btmp
。
当然也可以通过 -f
参数指定其他的读取文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| [root@kycool-strict log]# lastb -n 20 avorion ssh:notty 150.185.5.6 Mon Jul 18 13:25 - 13:25 (00:00) admin ssh:notty 109.197.194.157 Mon Jul 18 13:18 - 13:18 (00:00) admin ssh:notty 150.185.10.122 Mon Jul 18 13:18 - 13:18 (00:00) lucas ssh:notty 103.169.34.130 Mon Jul 18 12:57 - 12:57 (00:00) abby ssh:notty 193.122.108.42 Mon Jul 18 12:55 - 12:55 (00:00) nick ssh:notty 195.218.137.42 Mon Jul 18 12:53 - 12:53 (00:00) anurag ssh:notty 43.128.104.254 Mon Jul 18 12:40 - 12:40 (00:00) admin ssh:notty 206.189.87.108 Mon Jul 18 12:32 - 12:32 (00:00) testuser ssh:notty 192.3.211.39 Mon Jul 18 12:31 - 12:31 (00:00) quagga ssh:notty 118.27.36.26 Mon Jul 18 12:30 - 12:30 (00:00) ismael ssh:notty 175.47.205.72 Mon Jul 18 12:28 - 12:28 (00:00) tanya ssh:notty 62.64.86.44 Mon Jul 18 12:26 - 12:26 (00:00) weixin ssh:notty 218.111.88.185 Mon Jul 18 12:25 - 12:25 (00:00) bob ssh:notty 121.26.142.238 Mon Jul 18 11:29 - 11:29 (00:00) test03 ssh:notty 190.147.165.61 Mon Jul 18 11:25 - 11:25 (00:00) ubuntu ssh:notty 107.184.205.109 Mon Jul 18 10:33 - 10:33 (00:00) cafe24 ssh:notty 190.246.155.29 Mon Jul 18 10:11 - 10:11 (00:00) upload ssh:notty 196.20.68.81 Mon Jul 18 10:09 - 10:09 (00:00) postgres ssh:notty 202.29.13.51 Mon Jul 18 10:07 - 10:07 (00:00) scanner ssh:notty 111.67.197.134 Mon Jul 18 08:18 - 08:18 (00:00)
|
通过日志,可以看到存在 ssh
暴力破解的情况。
3.7 utmpdump
用于转储二进制日志文件到文本格式的的文件以便查看,同时也可以修改二进制文件。包括
/var/run/utmp
/var/log/wtmp
/var/log/btmp
修改文件可以篡改记录,所以权限一定要严格限定,防止非法操作,例如篡改 wtmp
文件中的登录地址,祸水东引。
查看 wtmp
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [root@kycool-strict log]# utmpdump wtmp Utmp dump of wtmp [8] [01088] [tyS0] [ ] [ttyS0 ] [ ] [0.0.0.0 ] [三 5月 25 10:46:00 2022 ] [8] [01089] [tty1] [ ] [tty1 ] [ ] [0.0.0.0 ] [三 5月 25 10:46:00 2022 ] [2] [00000] [~~ ] [reboot ] [~ ] [3.10.0-1160.66.1.el7.x86_64] [0.0.0.0 ] [三 6月 29 23:54:09 2022 ] [1] [00051] [~~ ] [runlevel] [~ ] [3.10.0-1160.66.1.el7.x86_64] [0.0.0.0 ] [三 6月 29 15:54:19 2022 ] [5] [01060] [tty1] [ ] [tty1 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2022 ] [5] [01059] [tyS0] [ ] [ttyS0 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2022 ] [6] [01060] [tty1] [LOGIN ] [tty1 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2022 ] [6] [01059] [tyS0] [LOGIN ] [ttyS0 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2022 ] [7] [01379] [ts/0] [root ] [pts/0 ] [113.65.29.194 ] [113.65.29.194 ] [三 6月 29 15:55:51 2022 ] [8] [01377] [ ] [ ] [pts/0 ] [ ] [0.0.0.0 ] [三 6月 29 15:56:27 2022 ] [7] [01404] [ts/0] [root ] [pts/0 ] [113.65.29.194 ] [113.65.29.194 ] [三 6月 29 15:56:29 2022 ] [8] [01402] [ ] [ ] [pts/0 ] [ ] [0.0.0.0 ] [三 6月 29 16:03:01 2022 ] [7] [01589] [ts/0] [root ] [pts/0 ] [113.65.29.194 ] [113.65.29.194 ] [三 6月 29 16:04:39 2022 ] [8] [01587] [ ] [ ] [pts/0 ] [ ] [0.0.0.0 ] [三 6月 29 20:12:05 2022 ] [7] [04064] [ts/0] [root ] [pts/0 ] [121.32.199.178 ] [121.32.199.178 ] [二 7月 12 15:03:05 2022 ] [8] [04062] [ ] [ ] [pts/0 ] [ ] [0.0.0.0 ] [二 7月 12 17:26:21 2022 ] [7] [14985] [ts/0] [root ] [pts/0 ] [121.32.197.136 ] [121.32.197.136 ] [一 7月 18 10:59:15 2022 ]
|
模拟修改最后一行的 IP
地址,把 121.32.197.136
修改为 121.32.197.122
第一步:导出文本信息
1 2
| [root@kycool-strict log]# utmpdump wtmp > tmp_wtmp Utmp dump of wtmp
|
第二步:修改 tmp_wtmp 文件
将 121.32.197.136
修改为 121.32.197.122
第三步:覆盖源文件
1 2
| [root@kycool-strict log]# utmpdump -r tmp_wtmp > wtmp Utmp undump of tmp_wtmp
|
第四步:再次查看,进行确认
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [root@kycool-strict log]# utmpdump wtmp Utmp dump of wtmp [8] [01088] [tyS0] [ ] [ttyS0 ] [ ] [0.0.0.0 ] [三 5月 25 10:46:00 2022 ] [8] [01089] [tty1] [ ] [tty1 ] [ ] [0.0.0.0 ] [三 5月 25 10:46:00 2022 ] [2] [00000] [~~ ] [reboot ] [~ ] [3.10.0-1160.66.1.el7.x86_64] [0.0.0.0 ] [三 6月 29 23:54:09 2022 ] [1] [00051] [~~ ] [runlevel] [~ ] [3.10.0-1160.66.1.el7.x86_64] [0.0.0.0 ] [三 6月 29 15:54:19 2022 ] [5] [01060] [tty1] [ ] [tty1 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2022 ] [5] [01059] [tyS0] [ ] [ttyS0 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2022 ] [6] [01060] [tty1] [LOGIN ] [tty1 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2022 ] [6] [01059] [tyS0] [LOGIN ] [ttyS0 ] [ ] [0.0.0.0 ] [三 6月 29 15:54:19 2022 ] [7] [01379] [ts/0] [root ] [pts/0 ] [113.65.29.194 ] [113.65.29.194 ] [三 6月 29 15:55:51 2022 ] [8] [01377] [ ] [ ] [pts/0 ] [ ] [0.0.0.0 ] [三 6月 29 15:56:27 2022 ] [7] [01404] [ts/0] [root ] [pts/0 ] [113.65.29.194 ] [113.65.29.194 ] [三 6月 29 15:56:29 2022 ] [8] [01402] [ ] [ ] [pts/0 ] [ ] [0.0.0.0 ] [三 6月 29 16:03:01 2022 ] [7] [01589] [ts/0] [root ] [pts/0 ] [113.65.29.194 ] [113.65.29.194 ] [三 6月 29 16:04:39 2022 ] [8] [01587] [ ] [ ] [pts/0 ] [ ] [0.0.0.0 ] [三 6月 29 20:12:05 2022 ] [7] [04064] [ts/0] [root ] [pts/0 ] [121.32.199.178 ] [121.32.199.178 ] [二 7月 12 15:03:05 2022 ] [8] [04062] [ ] [ ] [pts/0 ] [ ] [0.0.0.0 ] [二 7月 12 17:26:21 2022 ] [7] [14985] [ts/0] [root ] [pts/0 ] [121.32.197.122 ] [121.32.197.122 ] [一 7月 18 10:59:15 2022 ]
|
最后一行中的 IP
地址已经变成了 121.32.197.122