三个命令各看什么
w 显示当前登录用户、空闲时长、终端与最后一列正在执行的命令;who -a 给出会话列表与 PID;loginctl 补充会话类型(tty/ssh)与远端地址。三者交叉才能回答「现在还有谁连着这台机器」。
为什么必须最先做
未知的在线会话意味着攻击者仍握着通道,清理动作会被实时看见甚至被反向操作。处置顺序上,第一步是记录在线会话并保留证据,第二步才是切断通道,最后才是清理主机。
基本信息
| w | 会话、负载与最后一列正在执行的命令 |
|---|---|
| who -a | 含 PID、运行级别与空闲时间的全量会话 |
| loginctl list-sessions | 会话 ID 与所属用户 |
| loginctl show-session | Type、Remote、Service、State 等细节 |
| 关键字段 | FROM(来源)、IDLE、WHAT(当前命令)、TTY |
| 适用平台 | Linux(loginctl 需 systemd) |
典型使用场景
- 处置前确认入侵者是否仍在线
- 核对是否存在非授权来源 IP 的 SSH 会话
- 排查共享账号被多人同时使用
- 踢出会话前留存来源与时间点证据
- 与 auth.log 成功登录行对照,找出未正常记录的会话
交叉核查与记录
交叉核查与记录
w -i # -i 显示来源 IP 而不是主机名
who -a # 全量会话,含 PID 与运行级别
loginctl list-sessions
loginctl show-session c2 | grep -E 'Remote|Service|State|Type'
last -ai | head -n 20 # 与历史登录记录对照
ps -eo pid,tty,user,cmd | grep -E 'pts/' | head -n 20输出逐列读法
| 字段 | 含义 | 正常/异常 |
|---|---|---|
| FROM | 会话来源地址 | 陌生公网 IP 优先核对 |
| IDLE | 空闲时长 | 长期空闲的 root 会话多为遗留运维窗口 |
| WHAT | 当前执行的命令 | 出现下载、打包、脚本等未知命令需立即追查 |
| TTY | 终端类型 | pts 为远程会话,tty1 为本地控制台 |
loginctl 只给会话 ID,要配 show-session 才看得到 Type 与远端地址;/run/utmp 被清空时 w 与 who 会同时失灵,此时以 loginctl 与 ps 输出为准。
发现可疑在线会话,先记录来源 IP、登录时间与正在执行的命令,再按预案切断;直接踢出会丢掉当时的活动证据。
记录后切断会话
记录后切断会话
who -u # 确认会话 PID 与空闲时间
loginctl terminate-session c3 # 结束指定会话
pkill -KILL -t pts/3 # 极端情况按终端强制结束(慎用)现场记录要点
- 会话来源 IP 与端口,用于后续封禁
- 登录时间与登录方式(密码或密钥)
- 会话期间执行的命令与文件改动
- 会话是否对应堡垒机或监控账号,避免误判