网络世界安全性第一,如何排查主机是否受到入侵,对于简单的入侵可以从以下几个方面着手:
- 查看当前登录用户信息。
- 查询当前与过去登录系统的用户的信息
- 查询所有登录系统失败的用户的信息。
- 查询用户最后一次登录的信息。
- 显示命令历史记录。
who
who、w 和 users 等命令通过 utmp(/var/run/utmp) 文件查询当前登录用户的信息。
# who
root pts/0 2022-11-20 04:34 (113.120.91.96)
# w
05:18:19 up 45 min, 1 user, load average: 0.12, 0.07, 0.04
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 113.120.91.96 04:34 1.00s 0.02s 0.00s w
# users
root
last
last 和 ac 命令通过 wtmp(/var/log/wtmp) 文件查询当前与过去登录系统的用户的信息。
last 指令输出结果字段说明
- 第一列:用户名
- 第二列:终端位置。pts/0 (伪终端) 意味着从诸如 SSH 或 telnet 的远程连接的用户tty (teletypewriter) 。意味着直接连接到计算机或者本地连接的用户。
- 第三列:登录ip或者内核 。如果你看见:0.0 或者什么都没有,这意味着用户通过本地终端连接。除了重启活动,内核版本会显示在状态中。
- 第四列:开始时间
- 第五列:结束时间(still login in 还未退出 down 直到正常关机 crash 直到强制关机)
- 第六列:持续时间
-f |
指定记录文件,默认是显示/var/log目录下的wtmp文件的记录,但/var/log目录下得btmp能显示的内容更丰富,可以显示远程登录,例如ssh登录 ,包括失败的登录请求。 |
-x |
显示系统关闭、用户登录和退出的历史 |
-i |
-i显示特定ip登录的情况。 |
ac命令根据当前/var/log/wtmp文件中的登录的进入和退出来报告用户连接的时间,默认是以小时为单位,如果不使用标识,则报告的是总时间。
lastb
lastb 命令通过 btmp(/var/log/btmp) 文件查询所有登录系统失败的用户的信息。
# lastb
test ssh:notty 136.185.1.40 Sun Nov 20 03:46 - 03:46 (00:00)
test ssh:notty 136.185.1.40 Sun Nov 20 03:46 - 03:46 (00:00)
lastlog
lastlog 命令通过 lastlog(/var/log/lastlog) 文件查询用户最后一次登录的信息。
# lastlog
Username Port From Latest
root pts/0 113.120.91.96 Sun Nov 20 04:34:11 -0500 2022
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
operator **Never logged in**
games **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
dbus **Never logged in**
systemd-coredump **Never logged in**
systemd-resolve **Never logged in**
tss **Never logged in**
polkitd **Never logged in**
sssd **Never logged in**
chrony **Never logged in**
sshd **Never logged in**
unbound **Never logged in**
mysql **Never logged in**
apache **Never logged in**
nginx **Never logged in**
history
history命令用于显示历史记录和执行过的指令命令。history命令读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!执行指定序号的历史命令。例如,要执行第2个历史命令,则输入!2。
history命令:是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量 HISTSIZE进行控制。默认是不显示命令的执行时间,命令的执行时间,history 已经记录,只是没有显示。
注:如想查询某个用户在系统上执行了什么命令,可以使用root用户身份登录系统,检查Home目录下的用户主目录下的“.bash_history”文件,该文件记录了用户所使用的命令和历史信息。
# history
1 yum remove kernel
2 yum remove kernel*
3 yum list installed |grep kernel
4 dnf list | grep mysql
5 dnf install mysql-server
6 systemctl enable --now mysqld
7 mysql_secure_installation
8 mysql -uroot -p
// 命令选项含义
-N: 显示历史记录中最近的N个记录;
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中;
-d<offset>:删除历史记录中第offset个命令
-n<filename>:读取指定文件