首页/安全/应急响应速查/当前在线会话核查(w 与 who 与 loginctl)

当前在线会话核查(w 与 who 与 loginctl)

先确认现在还有谁连着:正在线的未知会话意味着攻击者还没走,处置顺序必须先断其通道再清理。

应急响应速查安全更新于 2026-10-13

三个命令各看什么

w 显示当前登录用户、空闲时长、终端与最后一列正在执行的命令;who -a 给出会话列表与 PID;loginctl 补充会话类型(tty/ssh)与远端地址。三者交叉才能回答「现在还有谁连着这台机器」。

为什么必须最先做

未知的在线会话意味着攻击者仍握着通道,清理动作会被实时看见甚至被反向操作。处置顺序上,第一步是记录在线会话并保留证据,第二步才是切断通道,最后才是清理主机。

基本信息

w会话、负载与最后一列正在执行的命令
who -a含 PID、运行级别与空闲时间的全量会话
loginctl list-sessions会话 ID 与所属用户
loginctl show-sessionType、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 与端口,用于后续封禁
  • 登录时间与登录方式(密码或密钥)
  • 会话期间执行的命令与文件改动
  • 会话是否对应堡垒机或监控账号,避免误判

易错点

  • 只看 who 不看 w:漏掉了 IDLE 与当前命令这两列信息量最大的字段
  • 把空闲时间当唯一判据:空闲假象可由脚本维持,需结合来源与命令
  • 踢出会话不先记录:来源 IP 与时间点丢失,封禁与溯源同时失去依据
  • 只查当前会话不看历史:已退出的会话仍留在 last 与 wtmp 中
  • 看到 root 会话就动手:先确认是否为在办的运维操作,避免打断正常变更

数据来源与参考

  • procps-ng w(1) 与 who(1) 手册
  • loginctl(1) 手册

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌