应先运行ss -tulnp | grep ":.*:"揪出LISTEN状态但COMMAND列为“-”或“users:(())”的无人认领监听端口,重点关注0.0.0.0绑定的非业务端口(如31337、4444等),再通过systemctl、ps、ls -l /proc/PID/exe和systemctl cat等命令交叉验证PID归属与服务真实性。

直接看监听端口和对应服务是否对得上——名字能伪造,端口和进程真实路径很难藏住。重点不是找“陌生服务名”,而是揪出“该由谁管、却没人认领”的网络连接。
先揪出没人认领的监听端口
运行这条命令,只看真正对外监听、且有 PID 却没显示进程名的项:
- ss -tulnp | grep ":.*:" —— 筛出所有 TCP/UDP 监听行,重点关注 State 是 LISTEN、但 COMMAND 列显示为 “-” 或 “users:(())” 的条目
- 特别盯紧非业务端口:比如 31337、5555、6666、4444、65534,这些几乎从不用于正规服务
- 如果监听在 0.0.0.0:端口(而非 127.0.0.1),又没对应明确服务(如 nginx、sshd),高度可疑
反查端口归属的服务单元
拿到可疑端口对应的 PID 后,别急着 kill,先确认它到底属于哪个 systemd 服务:
- systemctl --type=service --all | grep "PID=" —— 快速列出所有服务及其主进程 PID,比对是否匹配
- 若 PID 不在列表中,执行 ps -fp PID 查它的启动命令,再用 cat /proc/PID/cmdline | tr '\0' ' ' 看原始参数
- 再查它的真实可执行文件:ls -l /proc/PID/exe —— 若显示 (deleted) 或指向
/tmp/、/dev/shm/、/var/tmp/,基本坐实非法
验证服务定义是否被篡改
即使有个服务名看着正常(比如 sysmonitor.service 或 update-checker.service),也必须打开看内容:
-
systemctl cat 服务名 —— 重点检查
ExecStart=行:是否调用/tmp/.x、含curl/wget下载执行、或用bash -c 'base64 -d'类动态加载 -
systemctl show 服务名 | grep -E "(User|WorkingDirectory|Environment)" —— 看是否以 root 运行却设
User=nobody,或工作目录在临时路径 -
ls -l /usr/lib/systemd/system/服务名 /etc/systemd/system/服务名 2>/dev/null —— 确认 unit 文件位置;非官方路径(尤其
/etc/systemd/system/下无来源的)要人工审计
交叉验证网络行为与服务状态
一个合法服务,它的监听行为、进程状态、日志输出应该自洽:
- systemctl status 服务名 —— 看 Main PID 是否和 ss 输出一致;若显示 inactive (dead) 却有进程在监听,说明服务已被绕过或劫持
-
journalctl -u 服务名 -n 20 --no-pager —— 搜
curl、wget、/tmp、reverse、shell,看有没有异常执行痕迹 - ss -tunlp | grep :端口号 和 ps -fp $(pgrep -f "服务名") 对照看:端口是它开的吗?命令行里真有监听逻辑吗?

















