linux应急响应(深度详细解析) 2

排查历史命令

cat .bash_history     #仅包含之前会话保存的命令
history               #包含当前会话执行的所有命令

在这里插入图片描述

查看计划任务

存储用户级别的计划任务定义文件

cat /var/spool/cron/crontabs/root   #查看特定用户的任务(如 root)

如果返回空或"no such file",表示该用户无计划任务
在这里插入图片描述


记录 cron 进程的活动日志

cat /var/log/cron                  #计划任务执行日志

在这里插入图片描述

查看规定时间内修改的文件

find / -name "*.php" -mtime -30

命令解析

  1. find /
    从根目录 / 开始递归搜索所有子目录
  2. -name “*.php” :
    匹配所有以 .php 结尾的文件(需要用引号包裹)
  3. -mtime -30
    过滤出最近30天内被修改过的文件(以为单位,-30表示”小于30天“)

检查系统完整性

验证系统关键目录中的文件是否被篡改

rpm -Vf /usr/sbin/*

rpm -Vf /usr/bin/*

命令解析

  1. rpm
    Red Hat 包管理器
  2. -V
    验证模式:检查文件完整性
  3. -f
    指定要验证的文件路径(而非软件包名)
  4. /usr/sbin/* 和 /usr/bin/* 的区别
    /usr/sbin/ 是系统管理命令(如 sshd, iptables, cron)
    /usr/bin/ 用户级命令(如 ls, ps, bash, python)
  5. ’ * ’ 通配符
    检查目录下的所有非隐藏文件

典型输出示例
情况一:file … is not owned by any package(文件未被任何包管理)
这意味着里面的文件不是通过系统的RPM包管理器安装

情况二:带字母标记的输出 (如 S.5…T. /usr/sbin/sshd)
这种格式的输出表明文件 /usr/sbin/sshd 是由某个 RPM 包管理的,但是它的一个或多个属性与 RPM 数据库记录的该文件最初安装时的状态不一致。

rpm -V 的输出格式通常是:
标记 文件属性 文件名
位置是固定的,顺序为:S, M, 5, D, L, U, G, T

拿例子说明: (如 S.5…T. /usr/sbin/sshd)

  1. 第1位 S:文件 Size (大小) 不一致。文件的当前大小与安装时记录的大小不同
  2. 第2位 .:文件 Mode (权限/类型) 一致。没有 M 标记,说明权限位(rwx)和文件类型(普通文件、目录等)匹配
  3. 第3位 5:文件 MD5 checksum (校验和) 不一致。文件的当前内容计算出的 MD5 哈希值与安装时记录的值不同。这就证明内容被修改了!
  4. 第4位 .:Device (设备号) 一致。对于设备文件才有意义,普通文件此项通常为 .
  5. 第5位 .Symbolic Link (符号链接目标) 一致。文件不是符号链接或其指向的路径未变
  6. 第6位 .User (属主) 一致。文件的所有者用户未变
  7. 第7位 .Group (属组) 一致。文件的所属用户组未变
  8. 第8位 TmTime (修改时间) 不一致。文件的最后修改时间与安装时记录的时间不同

排查网络连接情况

方法一:

查看系统中所有TCP/UDP网络连接、监听端口及相关进程

netstat -antup

参数解析

  • -a:显示所有连接和监听的端口(包括已建立的和等待连接的)
  • -n:用数字形式显示地址和端口(不解析主机名、服务名,加快输出速度)
  • -t:仅显示 TCP 协议连接
  • -u:仅显示 UDP 协议连接
  • -p:显示进程标识符(PID)和程序名(需 root 权限查看所有进程)

netstat -antup 输出详情

  1. proto(协议)
    连接使用的传输层协议:tcp / udp / tcp6 / udp6
  2. recv-Q(接收队列)
    等待应用程序读取的数据量(字节)
    对于 LISTEN 状态:通常是 0(表示无积压)
    对于 ESTABLISHED 状态:未被应用程序读取的数据大小
  3. Send-Q (发送队列)
    等待发送给对方的数据量(字节)
    对于 LISTEN 状态:最大积压连接数(Linux 2.2+)
    对于 ESTABLISHED 状态:未被对方确认的数据大小
  4. Local Address (本地地址)
    本地 IP + 端口(格式:IP:端口
    关键标识:
    0.0.0.0:监听所有 IPv4 接口
    127.0.0.1:仅监听本地回环
    :::监听所有 IPv6 接口
  5. Foreign Address (远程地址)
    远程主机 IP + 端口
    特殊值:
    0.0.0.0:*:未建立连接(LISTEN 状态)
  6. State (连接状态)
    LISTEN ---------------服务正在监听端口
    ESTABLISHED -----已建立连接
    TIME_WAIT ---------等待关闭完成(2MSL 状态)
    SYN_SENT ---------主动发起连接
    CLOSE_WAIT ------等待本地关闭
  7. PID/Program name (进程信息)
    格式:PID / 程序名
    显示占用该连接的进程
    需要 root 权限才能查看所有进程

在这里插入图片描述


方法二:

netstat 功能相同,但更高效更现代(更加推荐)

ss -antup

参数解析(与 netstat 一致)

  • -a:所有连接/监听端口。
  • -n:数字格式显示。
  • -t:TCP 连接。
  • -u:UDP 连接。
  • -p:显示进程信息(需 root 权限)

ss -antup 输出列详解

  1. Netid (网络标识)
    连接类型:tcp / udp / icmp / raw
  2. State (状态)
  3. Local Address:Port (本地地址)
    格式:IP:端口
    支持 IPv6 地址(如 [::]:80
  4. Peer Address:Port (远程地址)
    通信对端的 IP + 端口
  5. Process (进程详情)
    详细格式:users:((“程序名”,pid=PID,fd=文件描述符))
    直接显示进程使用的文件描述符(fd)
    在这里插入图片描述

方法三:

列出所有正在使用网络连接的进程(IPv4/IPv6 的 TCP/UDP 连接)

lsof -i

参数解析:

  • -i 仅显示网络连接

lsof -i 输出列详解

  1. COMMAND:进程名称(如 nginx)
  2. PID:进程 ID
  3. USER:运行进程的用户
  4. FD:文件描述符(关键标识)
    数字+字母 如 8u:数字=文件描述符,字母=访问模式(u=读写,r=只读)
  5. TYPE:文件类型
    IPv4/IPv6:网络套接字
    REG:普通文件
    DIR:目录
  6. DEVICE:设备号
  7. SIZE/OFF:文件大小/偏移量
  8. NODE:Inode 号
  9. NAME:核心信息
    网络连接:[协议] 本地地址->远程地址 (状态)
    普通文件:文件绝对路径

在这里插入图片描述

紧接着可以用下面的命令查看指定进程打开的所有文件(包括网络连接、普通文件、管道等)

lsof -p PID

参数解析:

  • -p PID 指定要查询的进程 ID
  • -p 123,456 查询多个进程(逗号分隔)
  • -p ^nginx 排除特定进程(排除 nginx)

输出列详情
同上

这里以 lsof -p 7171 为例
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值