Linux 系统故障排查


1. 现场环境

  • 如果是 Linux 系统的话,最多的是 CentOS 6 和 CentOS 7,Linux 是全命令界面的;

  • 如果是 Windows 系统的话,一般是 Windows server 2008

2. 常见应急问题

  • 大多数应急常见的问题都是挖矿,或者是被植入菠菜

  • 小部分是中了勒索病毒,如果是勒索病毒的话,看看 360、腾讯有没有什么解密工具

  • 如果没有的话就重装系统吧

3. 排查基本流程

  • 接到应急指令后,一般都需要到客户现场去处理的,最好带上电脑和笔记本
  • 到达现场后,跟客户沟通,我方需要确认一些信息方便定位(甩锅)问题,后面客户可能会让你上机操作,或者是使用你自己电脑登录目标机器查找问题
  • 无论是挖矿还是菠菜,流程都差不多(菠菜注意是不是修改了网站配置文件还是直接在网页植入的链接)
找出问题 -> 解决问题 -> 编写报告

4. 常用排查命令

4.1 查看当前系统状态(top)

挖矿应急通常优先使用 top 命令来查看系统进程,一般挖矿病毒占用 CPU 比较大

[root@c7-1 ~]#top -b -n 3 >1.log
[root@c7-1 ~]#
[root@c7-1 ~]#tail -f 1.log 
107856 root      20   0       0      0      0 S   0.0  0.0   0:00.03 kworker/3:2
107922 root      20   0       0      0      0 S   0.0  0.0   0:00.03 kworker/0:1
108010 root      20   0       0      0      0 S   0.0  0.0   0:00.04 kworker/0:0
108032 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/3:0
108058 root      20   0  163612   6120   4728 S   0.0  0.2   0:00.11 sshd
108060 root      20   0  116792   3504   1800 S   0.0  0.1   0:00.05 bash
108127 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kworker/3:1
108212 postfix   20   0   91892   4084   3068 S   0.0  0.1   0:00.00 pickup
108221 root      20   0  107956    612    520 S   0.0  0.0   0:00.00 sleep
108222 root      20   0  162020   2224   1532 R   0.0  0.1   0:00.00 top

4.2 查看当前系统进程信息(ps)

ps 命令:可以查看进程的瞬间信息

  • -a:显示现行终端机下的所有程序,包括其他用户的程序

  • -e:列出程序时,显示每个程序所使用的环境变量

    扫描二维码关注公众号,回复: 13251725 查看本文章
  • -f:显示 UID , PPIP , C 与 STIME 栏位

[root@c7-1 ~]#ps -ef | head -n 10
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 07:31 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 07:31 ?        00:00:00 [kthreadd]
root          4      2  0 07:31 ?        00:00:00 [kworker/0:0H]
root          6      2  0 07:31 ?        00:00:00 [ksoftirqd/0]
root          7      2  0 07:31 ?        00:00:00 [migration/0]
root          8      2  0 07:31 ?        00:00:00 [rcu_bh]
root          9      2  0 07:31 ?        00:00:04 [rcu_sched]
root         10      2  0 07:31 ?        00:00:00 [lru-add-drain]
root         11      2  0 07:31 ?        00:00:00 [watchdog/0]

查看非 root 运行的进程

[root@c7-1 ~]#ps -U root -u root -N
   PID TTY          TIME CMD
   754 ?        00:00:00 lsmd
   757 ?        00:00:00 rpcbind
   762 ?        00:00:00 avahi-daemon
   763 ?        00:00:00 rtkit-daemon
   771 ?        00:00:00 polkitd
   778 ?        00:00:00 avahi-daemon
......

查看用户 root 运行的进程

[root@c7-1 ~]#ps -u root | head -n 5
   PID TTY          TIME CMD
     1 ?        00:00:01 systemd
     2 ?        00:00:00 kthreadd
     4 ?        00:00:00 kworker/0:0H
     6 ?        00:00:00 ksoftirqd/0

查看有没有奇怪的进程

[root@c7-1 ~]#ps -aef | grep inetd
root     108349 108060  0 14:15 pts/0    00:00:00 grep --color=auto inetd

检测隐藏进程

ps -ef | awk '{print}' | sort -n | uniq >1
ls /proc | sort -n | uniq >2
# sort 命令将文本内容进行排序,-n 依照数值大小排序。
# uniq 命令用于检查及删除文本中重复出现的行列,一般与 sort 命令结合使用。

4.3 检测系统守护进程(ls)

ls /etc/crontab

4.4 任务及用户活动排查命令

说明:机器使用过程中难免会留下一些痕迹

(1) 查看当前有谁登录在服务器上(who)

who 命令查看当前登录用户(tty 本地登录,pts 远程登录)

[root@c7-1 ~]#who
root     :0           2021-09-02 10:04 (:0)
root     pts/0        2021-11-05 13:52 (192.168.10.1)

`w 命令查看系统信息,想知道某一时刻用户的行为``

[root@c7-1 ~]#w
 14:29:52 up  6:58,  2 users,  load average: 0.02, 0.03, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     :0       :0               029月21 ?xdm?   2:46   0.20s /usr/libexec/gnome-sessio
root     pts/0    192.168.10.1     13:52    0.00s  0.08s  0.00s w

(2) 查看近期用户登陆情况(last)

[root@c7-1 ~]#last -n 5
root     pts/0        192.168.10.1     Fri Nov  5 13:52   still logged in   
root     pts/1        192.168.10.1     Thu Nov  4 20:33 - 21:58  (01:25)    
root     pts/0        192.168.10.1     Thu Sep  2 10:04 - 09:33 (63+23:29)  
root     :0           :0               Thu Sep  2 10:04   still logged in   
reboot   system boot  3.10.0-1062.el7. Thu Sep  2 10:02 - 14:33 (64+04:30)  

wtmp begins Thu Sep  2 09:43:38 2021

(3) 查看历史命令(history)

[root@c7-1 ~]#history 10
  111  ps -ef | head -n 10
  112  ps -U root -u root -N
  113  ps -u root
  114  ps -u root | head -n 5
  115  ps -aef | grep inetd
  116  who
  117  w
  118  who -m
  119  last -n 5
  120  history 10

(4) 查看空口令账号(awk)

语法:awk [option] ‘pattern{action}’ file

awk -F: '($2=="")' /etc/shadow

(5) 查看 uid 为 0 的账号(awk)

[root@c7-1 ~]#awk -F: '($3==0)' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@c7-1 ~]#grep -v -E "^#" /etc/passwd | awk -F: '$3==0{print $1}'
root

(6) 查看进程树是否有异常(pstree)

[root@c7-1 ~]#pstree -p | head -n 5
systemd(1)-+-ModemManager(768)-+-{
    
    ModemManager}(797)
           |                   `-{
     
     ModemManager}(810)
           |-NetworkManager(818)-+-{
     
     NetworkManager}(835)
           |                     `-{
    
    NetworkManager}(841)
           |-VGAuthService(756)

4.5 网络排查命令

说明:挖矿病毒避免不了要跟主机通信。

(1) 查看本机连接和监听的端口(netstat)

列出本机所有连接和监听的端口,查看有没有非法连接

常用参数:

-a或–all:显示所有连线中的Socket。
-c或–continuous:持续列出网络状态。
-i或–interfaces:显示网络界面信息表单。
l或–listening:显示监控中的服务器的Socket。
-n或–numeric:直接使用ip地址,而不通过域名服务器。
-t或–tcp:显示TCP传输协议的连线状况。
-u或–udp:显示UDP传输协议的连线状况。

示例:

[root@c7-1 ~]#netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1067/cupsd          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1353/master         
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      108058/sshd: root@p 
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1063/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1067/cupsd          
tcp6       0      0 :::3128                 :::*                    LISTEN      48608/(squid-1)     
tcp6       0      0 ::1:25                  :::*                    LISTEN      1353/master         
tcp6       0      0 ::1:6010                :::*                    LISTEN      108058/sshd: root@p 
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::22                   :::*                    LISTEN      1063/sshd

(2) 查看端口占用情况(lsof)

lsof 命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。

常用参数:

-g:列出GID号进程详情;
-d<文件号>:列出占用该文件号的进程;
-i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
-u:列出UID号进程详情;

示例:

lsof -i:3306	#查看 3306 端口占用情况
lsof -p 2,22	#查看 2 和 22 进程情况
lsof -i tcp		#查看所有 tcp 网络连接信息
lsof -i udp		#查看所有 udp 网络连接信息

4.6 文件查找命令(find)

find 命令用来在指定目录下查找文件。

find ./ -mtime 0	#查找最近 24 小时内修改过的文件

参数 -mtime n 按照文件的更改时间来找文件,n 为整数。

例:

  1. -mtime 0 表示文件修改时间距离当前为 0 天的文件,即距离当前时间

    不到 1 天(24小时)以内的文件。

  2. -mtime 1 表示文件修改时间距离当前为 1 天的文件,即距离当前时间

    1天(24小时-48小时)的文件。

  3. -mtime+1 表示文件修改时间为大于 1 天的文件,即距离当前时间 2 天

    (48小时)之外的文件。

  4. -mtime -1 表示文件修改时间为小于 1 天的文件,即距离当前时间 1 天

    (24小时)之内的文件。

find / -name "*.txt"	#查找以 .txt 结尾的文件名
find / -iname "*.txt"	#忽略大小写
find / ! -name "*.txt"	#查找不是以 .txt 结尾的文件
find / -name *.test.gz.log -a -type f -mtime +30 -exec rm {
    
    } \;

猜你喜欢

转载自blog.csdn.net/shenyuanhaojie/article/details/121164063