这一次我们不看渲染器,也不看大模型,来看一个很容易让 Minecraft 腐竹和玩家头皮发麻的问题:“神秘 HIM 在服务器跟踪某人”。
先把话说清楚:HIM 就是 Herobrine,Minecraft 社区里最出名的都市传说角色。在单人世界或客户端里,它更多是资源包、Mod 或心理暗示的产物。但在多人服务器里,这个“神秘 HIM 跟踪”通常不是灵异事件,而是服务器里存在一个你看不见、但确实在线或有明确位置的实体——可能是隐身观察的 OP,可能是假人 Bot,可能是 NPC 插件刷出的实体,也可能只是玩家本地的渲染异常。问题听起来玄乎,但用服务器日志、权限审计、实体扫描和客户端纯净测试,是可以定位到具体原因的。
这篇文章会按“现象拆解 → 日志排查 → 实体扫描 → 权限审计 → 客户端验证 → 自动化监控”的顺序展开,完整演示一套排查流程。你会看到我实际使用的命令、需要查看的日志文件、需要重点关注的插件列表,以及如何通过 RCON 接口把这类排查做成定期巡检的脚本。整个过程不需要改服务端核心,不需要装乱七八糟的协议,适合 Paper、Spigot、Forge、Fabric 等主流服务端环境。
先说结论:所谓“HIM 跟踪”,大多数情况下是服务器权限被滥用、假人插件残留或客户端 Mod 显示异常。真正需要重点排查的不是“幽灵实体”,而是看不见的在线玩家和非玩家实体。
1. “神秘HIM跟踪”现象拆解与排查思路速览
先给一张速览表,方便你直接对照现象选择排查路径。
| 现象表现 | 最常见成因 | 排查层级 | 排查难度 |
|---|---|---|---|
| 玩家报告身边跟着一个白色眼睛的“人形实体” | NPC 插件 / 自定义实体 / 资源包贴图 | 实体扫描 + 客户端验证 | 低 |
| 玩家走到哪里,对方都能精准出现在附近 | 隐身观察的 OP / 传送类插件滥用 | 权限审计 + 日志指令记录 | 高 |
| 控制台在线列表看不到人,但玩家一直感觉被盯着 | Vanish 隐身插件 / 假人 Bot | 权限审计 + 插件列表核对 | 中 |
| 服务器人数显示为 0,但地图上能看到玩家坐标点 | Carpet Mod 假人 / 数据包实体 | 实体列表扫描 | 中 |
| 玩家一上线就被“传送”到某个神秘人身边 | 传送插件 / 权限节点异常 | 日志指令记录 + 权限节点检查 | 高 |
| 只有特定玩家能看到,其他人看不到 | 客户端 Mod / 资源包问题 | 纯净客户端测试 | 低 |
这里要明确一个技术前提:原版 Minecraft 服务端不存在“服务器自主生成的 HIM 实体”。如果服务端没有装任何 Mod、插件、数据包,那么服务器里只有一种东西能移动、能跟踪、能站在玩家旁边——真实在线玩家。所以,当你听到“HIM 跟踪某人”时,本质上是在问:服务器里有没有一个“看不见的玩家或实体”,以及它是怎么出现的。
排查顺序建议是这样:先查在线玩家列表和登录日志,确认是否存在隐藏玩家;再查实体列表,确认是否存在非玩家实体;然后查 OP 和权限组,确认是否有管理员在隐身观察;最后回到客户端,用纯净环境排除本地渲染问题。不要一上来就怀疑服务端被“入侵”,90% 的情况都只是配置问题。
2. 适用场景与使用边界
这套排查流程对以下几类人最有用。
第一类是服务器腐竹和管理员。当玩家频繁反馈“被神秘实体跟踪”或“被看不见的玩家骚扰”时,你需要快速判断是插件问题、权限问题还是恶意行为的伪装。第二类是自建服务器的普通玩家。如果你在别人服务器里被跟踪,可以通过这篇文章学会用日志和权限查询保护自己,而不是陷入恐慌。第三类是做整合包或自定义服务端的技术玩家。你可能会在测试假人、NPC 实体、自定义生物时遇到类似现象,本文的实体扫描与清理方法可以直接复用。
同时必须强调使用边界。服务器管理员拥有很高的权限,但这不意味着可以随意隐身跟踪玩家、查看玩家背包或窃听玩家聊天。在公网运营的服务器中,长期对玩家进行未告知的监控观察,很可能违反服务器规则、平台公约甚至相关隐私保护要求。任何监控行为都应该以“安全审计”和“异常排查”为目的,并且提前写进服务器规则或玩家须知中。
如果排查后发现是管理员或 OP 利用隐身权限恶意跟踪骚扰玩家,应当立即取消其管理权限,并保留日志证据。如果发现是第三方插件在偷偷上传玩家数据,或者插件 JAR 包内嵌恶意代码,要立刻停用并删除插件,同时检查服务器文件是否被篡改。
3. 排查前准备:服务端类型、日志与控制台
在开始敲命令之前,先弄清楚自己的服务端环境。不同服务端的日志格式和命令支持范围不一样,直接照搬别人的命令可能无效。
先确认服务端类型。如果是 Paper、Spigot、Purpur 这些 Bukkit 系服务端,你会有完整的插件系统,可以通过/plugins命令列出所有已加载插件。如果是 Forge 或 Fabric 模组服,你需要检查的是 mods 目录和配置文件。如果是纯原版服务端,那重点就看日志和 ops.json。
日志文件是这次排查的主线。Minecraft 服务端会把所有登录、退出、指令、聊天和错误信息写入日志。日志目录一般在服务端根目录的logs/文件夹下,实时文件叫latest.log,历史日志会按日期压缩成2025-01-01-1.log.gz这类文件。Debian 或 Ubuntu 服务器上如果服务端是用 systemd 或 screen 启动的,日志也可能被重定向到单独的文件,这一点要先确认。
控制台访问也有讲究。最简单的场景是你直接有服务器后台,能打开命令行窗口。如果服务器在远程主机上,通常会通过 SSH 连接,然后进入服务端目录操作。如果是用面板服的网页控制台,大部分命令也能直接输入。要注意的是,控制台输入命令时不需要游戏客户端,所以排查时优先在控制台执行查询类命令,不要用游戏内指令,这样能减少对在线玩家体验的影响。
另外,Windows 服务器和 Linux 服务器的日志检索命令略有不同。Linux 下可以用grep快速过滤日志,Windows 下如果没有 grep 环境,可以用编辑器的搜索功能,或者 PowerShell 的Select-String命令。后面给出的命令示例以 Linux 为主,Windows 用户可以对照着换成 PowerShell 写法。
还有一点要注意:排查前先确认服务端当前是否在正常运行,TPS 是否正常。如果服务器已经卡到玩家都进不来,先解决性能问题再排查“跟踪”现象,否则日志记录可能本身就有缺失。
4. 第一步:用在线列表与日志确认“多出来的人”
排查的第一步,永远是确认服务器里到底有谁。
先在控制台执行最基本的在线查询命令:
/list这个命令会返回当前在线玩家列表和人数。如果你开着 Essentials 之类的插件,也可以用:
/essentials:list有些服务端还支持:
/tab list如果/list显示的人数和实际玩家对得上,那问题大概率不在“在线玩家”上。如果列表里出现了一个你不认识的 ID,先不要急着判断,继续去日志里看这个 ID 的登录记录和行为轨迹。
接下来看日志。用 grep 过滤出所有登录和退出记录:
# 查看最近 50 条登录/退出记录 grep -E "(logged in|logged out|joined the game|left the game)" logs/latest.log | tail -n 50Paper、Spigot 服务端的日志里,玩家进入游戏通常会显示:
UUID of player Steve is ... Steve joined the game退出时则显示:
Steve left the game有些版本显示为:
Steve lost connection: Disconnect Steve left the game如果你怀疑某个神秘玩家跟踪了某位玩家,可以直接用被跟踪者的游戏 ID 过滤日志,看它上线期间服务器里还发生了什么:
# 过滤某个玩家的相关日志 grep -i "Steve" logs/latest.log | tail -n 100这里要注意一个细节:如果服务端开了 online-mode,也就是正版验证,那么玩家的 UUID 是唯一的,不太容易被伪造。但如果服务端关闭了正版验证,即 offline-mode,那么任何人只要知道 ID 就能登录同名账号,这种情况下出现“神秘同名玩家”就非常可疑了。
日志里也需要重点观察指令记录。Bukkit 系服务端在玩家执行命令时,经常会在日志中留下类似这样的记录:
Steve issued server command: /tp Player123可以过滤所有玩家指令:
# 查看最近 50 条玩家指令记录 grep -E "(issued server command|issued the following command)" logs/latest.log | tail -n 50如果有 OP 隐身观察玩家,通常会在指令记录里留下传送、切换游戏模式、隐身等操作痕迹。比如:
/back /gamemode spectator Steve /vanish /v /tp Steve看到这种指令序列,基本可以断定有人在用管理权限跟踪玩家。即使他开着隐身插件,指令日志也通常会记录下来,除非服务端装了专门的指令隐藏插件,这就说明问题更严重了。
判断成功的标准是:你能够把“被跟踪玩家在线期间”的服务器活动,大致还原成一条时间线。谁上下线、谁执行了什么指令、有没有传送到被跟踪者身边。如果时间线里出现了一个未知玩家或一次异常传送,那目标就锁定了。
5. 第二步:扫描实体与假人 Bot,排查非玩家实体
如果在线列表里没有陌生人,日志里也看不出异常玩家,那就要考虑“非玩家实体”和“假人 Bot”的情况。
在 Minecraft 技术语境里,假人通常指由 Carpet Mod 生成的 Fake Player,或者由专门的假人插件生成的虚拟玩家。假人有一个特点:它会出现在玩家列表里,但又不完全像真实玩家;它没有真实的网络连接,却能移动、能交互、能站在玩家旁边。Carpet Mod 是 Fabric 服务端常用的技术性模组,如果服务器里装了它,并且有人执行过:
/player Steve spawn那么服务器里就会出现一个叫 Steve 的假人。它可以被设定为站岗、跟随、攻击生物等。这种假人在/list里有时候能看到,有时候看不到,取决于服务端和模组的配置。更隐蔽的是,假人还能被命名为类似“HIM”的名字,配合自定义皮肤或资源包,制造出“白色眼睛幽灵”的视觉效果。
Book 系服务端不一定要用 Carpet Mod,也可能装的是 Citizens 或 CommandNPC 这类 NPC 插件。这类插件可以在服务器中生成自定义村民、玩家模样的 NPC,还能设置巡逻路线和跟随逻辑。如果你在插件列表里看到这些名字,并且玩家报告“有个人形实体一直跟着我”,优先怀疑它们:
/plugins控制台会返回所有已加载插件列表。看到 Citizens、CommandNPC、Titan NPC、FancyNpcs 之类的插件时,就要继续查 NPC 的生成配置。
Paper 服务端自带一个非常实用的实体列表命令。在控制台执行:
/paper entity list该命令会打印当前世界所有实体的类型、数量、坐标和 UUID。如果你发现玩家报告位置的附近有armor_stand、villager、player类型的实体,但对应的玩家 ID 又不在在线列表里,那基本就是 NPC 或假人。
如果你不想用 Paper 自带命令,也可以考虑安装一个实体管理插件来辅助排查。常见的思路是用类似ExecutableItems或Guardian这类工具列出实体数量,但这类插件更偏重玩法,排查效率不一定高。更轻量的做法是使用 Spark 插件的性能分析功能,通过实体数量统计来发现异常:
/spark profilerSpark 的主要用途是分析 TPS 和卡顿,不是专门列实体,但它能告诉你每个世界的实体数量分布,可以作为辅助判断。
确认存在异常实体之后,清理方法很简单。如果是 Carpet Mod 假人,在控制台执行:
/player Steve kill如果是 Citizens NPC,需要通过插件指令删除:
/npc remove请务必在服务器人数较少的时段操作,并且提前备份 world 文件夹。清理后观察一段时间,如果玩家不再报告“被跟踪”现象,那就说明问题在假人或 NPC 实体上,和真正的玩家权限无关。
6. 第三步:权限审计与隐身 OP 排查
排除了普通玩家和假人之后,剩下的高危嫌疑就是“自带隐身权限的真实玩家”。
先看 OP 列表。原版服务端的 OP 信息保存在服务端根目录的ops.json文件里。在控制台或 SSH 终端中查看:
cat ops.json正常输出应该是一个包含玩家名和 UUID 的 JSON 数组,例如:
[ { "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "name": "Steve", "level": 4, "bypassesPlayerLimit": false } ]看到任何你不认识的名字,立刻在控制台取消 OP:
/deop 不认识的ID如果是权限插件管理的服务端,还需要查看权限组。比如 LuckPerms 的用法:
/lp user Steve parent info这条命令会返回 Steve 所在的权限组。再查权限组里有没有minecraft.command.gamemode、minecraft.command.tp、vanish.use、vanish.see之类的权限节点:
/lp group admin permission info这里要提醒一下:很多隐身插件,比如 VanishNoPacket、PremiumVanish、SuperVanish,都有一个特点,就是被隐藏的玩家不会出现在/list中,也不会被普通玩家看到,但依然可以移动、传送、观察。如果你在插件列表里看到了这类插件,并且在线人数对不上,很可能就是有人在用隐身模式观察玩家。
检查隐身插件是否有玩家正在使用,通常可以使用插件自带的查询指令。以常用隐身插件为例:
/vanish list /v list如果插件没有查询指令,就去看插件配置文件和日志。有些隐身插件会把隐身状态记录在 playerdata 目录下,或者在控制台留下“Player X vanished”的日志。
还有一个隐藏通道不能忽略:RCON 远程管理端口。RCON 是 Minecraft 服务端自带的一个远程控制协议,默认端口通常是 25575,可以通过 server.properties 开启。如果 RCON 被开启并且密码很弱,那外面的人可以直接远程登录控制台,执行包括/op 自己、/tp 玩家、/gamemode spectator 玩家在内的任何指令。
检查 server.properties:
enable-rcon=true rcon.port=25575 rcon.password=需要检查是否弱密码如果你发现 RCON 是开启状态,但服务器并不需要远程管理功能,建议直接关闭。如果必须使用,请把端口绑定到本机回环地址,不要暴露到公网。这个点非常重要,很多“神秘管理员跟踪玩家”的案例,最后查下来都是 RCON 被弱口令爆破,而不是服务端被植入模组。
权限审计结束后,你的判断标准是:服务器所有 OP 和权限组里,都能找到对应的管理员本人,并且没有多余的隐身停用指令在日志里出现。只要存在一个你无法解释权限来源的 ID,就说明跟踪者还没被排除。
7. 第四步:客户端侧验证,排除本地渲染问题
如果服务端所有排查都干净,玩家还是坚称看到了白色眼睛的人形实体,那就要把视线移到客户端。
玩家看到的“HIM”有可能根本不存在于服务器世界里,只是客户端 Mod 或资源包渲染出来的幻象。小地图 Mod 是重灾区,比如 Xaero 的小地图、JourneyMap、VoxelMap,它们会在地图上显示实体标记和玩家位置。有些整合包里的怪物雷达功能,会把远处的玩家或 NPC 显示成特殊图标,如果图标材质和 HIM 皮肤相似,就会出现“地图上有个神秘图标一直跟着我”的错觉。
还有一些自定义资源包会替换末影人、僵尸、玩家的皮肤材质。如果资源包把某个生物模型改成了白色眼睛的人形,玩家在低亮度环境下看到白色眼睛的“人”,就会联想起 HIM。这个时候,服务器里其实只有一个普通的僵尸或玩家。
处理方法是让玩家换一个纯净环境测试:
- 备份当前的 mods 文件夹和 config 文件夹。
- 从官方启动器启动一个 1.20.1 或对应服务端版本的纯净客户端。
- 不安装任何 Mod、OptiFine、光影或资源包。
- 加入服务器,在之前“被跟踪”的位置站一会儿,观察是否有实体靠近。
如果纯净客户端下没有出现任何异常实体,那问题就锁定在客户端的 Mod 或资源包。引导玩家逐个启用 Mod,启用一个测一次,快速定位到是哪个 Mod 造成的幻象。
客户端侧也可以开启实体碰撞箱显示。在游戏内按 F3 + B 可以显示所有实体的碰撞箱。如果玩家旁边确实有一个看不见的实体,碰撞箱会以白色线框显示出来。如果 F3 + B 之后什么碰撞箱都没有,但玩家依然声称看到了白色眼睛的人,那基本可以确定是渲染或心理层面的问题。
同时要注意版本兼容性。玩家客户端和服务端版本不一致,或者安装了不匹配的 OptiFine 版本,也会导致实体渲染错乱。可以先让玩家升级或降级显卡驱动,再关闭所有光影,再测试;如果显卡驱动和光影都正常,才考虑进一步排查服务器。
这一步的验证标准很明确:纯净客户端下没有任何异常实体,服务端日志也没有新增可疑玩家,那“跟踪”现象就可以定性为客户端本地问题,而不是服务器端的安全事件。
8. 批量监控与 RCON 接口自动化排查
手动排查只能解决一次问题,但“神秘跟踪”这类现象往往会在不同玩家身上反复出现。更好的做法是把排查写成定期巡检脚本,让服务器自动记录异常行为。
RCON 是这里的关键接口。开启 RCON 后,你可以通过远程命令获取在线列表、执行查询、踢出异常玩家。虽然 RCON 不适合暴露在公网,但在本机局域网或通过安全通道使用时,是运维排查的好帮手。
先确认 server.properties 中 RCON 配置:
enable-rcon=true rcon.port=25575 rcon.password=替换成强密码修改后需要重启服务端。远程管理时,推荐使用 mcrcon 工具。在 Ubuntu 服务器上安装:
sudo apt update sudo apt install mcrcon测试连接:
mcrcon -H 127.0.0.1 -P 25575 -p 你的密码 "/list"如果返回在线玩家列表,说明 RCON 可用。接下来写一个简单的 Python 脚本,通过 mcrcon 定时拉取在线列表,记录到日志文件,并在出现“未知玩家”时给出提示。这里用 Python 的 mcrcon 库:
import time from mcrcon import MCRcon RCON_HOST = "127.0.0.1" RCON_PORT = 25575 RCON_PASSWORD = "你的密码" LOG_FILE = "/tmp/mc_player_watch.log" KNOWN_PLAYERS = {"Steve", "Alex", "Notch"} def check_online_players(): with MCRcon(RCON_HOST, RCON_PASSWORD, port=RCON_PORT) as mcr: response = mcr.command("/list") return response while True: try: result = check_online_players() with open(LOG_FILE, "a", encoding="utf-8") as f: f.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} {result}\n") # 这里简单解析玩家名,如果出现名单外的玩家就记录 if "players online" in result: player_part = result.split(":")[-1] online = [p.strip() for p in player_part.split(",") if p.strip()] for name in online: if name not in KNOWN_PLAYERS: print(f"[ALERT] 未知玩家在线: {name}") except Exception as e: print(f"[ERROR] RCON 查询失败: {e}") time.sleep(60)这个脚本每隔 60 秒查询一次在线列表,然后把结果写入日志。你可以把已知玩家名单维护成一个集合,脚本检测到未知 ID 时立刻输出告警。注意,这个脚本要在内网或通过安全通道运行,不要直接暴露到公网,避免 RCON 被爆破。
批量任务方面,如果你想对多个世界或多个服务器节点做统一巡检,可以把这个脚本改造成批量模式,读取一个服务器列表文件,对每个服务器的 RCON 地址和密码分别发起查询。但这里要强调,RCON 密码不能明文写在脚本里。生产环境建议改用环境变量或密钥管理工具读取密码。
自动巡检可以写这么几类规则:
| 巡检项 | 命令或日志 | 告警条件 |
|---|---|---|
| 未知玩家在线 | /list+ 名单比对 | 出现名单外玩家 |
| 未知指令操作 | 解析 latest.log 中的指令记录 | 出现/op或/deop |
| OP 列表变更 | 定时读取 ops.json | 文件修改时间变化 |
| RCON 登录记录 | 服务端日志 | 大量“RCON”登录失败 |
| 隐身状态 | 隐身插件查询指令 | 有玩家处于 vanish 状态 |
自动化不是目的,目的是在“被跟踪玩家举报之前”就发现异常。如果巡检脚本能连续运行 7 天,服务器里有没有隐藏玩家、有没有权限变更,都会留下完整的日志记录。之后再出问题,直接翻巡检日志就能定位。
9. 资源占用与性能影响观察
排查“神秘实体跟踪”的同时,也要留意实体数量对服务器性能的影响。如果服务器里存在大量 NPC 实体或假人,TPS 会明显下降,玩家会感受到卡顿,指令响应变慢。
先用服务端自带命令查看 TPS:
/tpsPaper、Spigot、Purpur 服务端都会返回类似:
TPS from last 1m, 5m, 15m: 20.0, 19.8, 19.5正常服务器 TPS 应该在 20 左右。如果你发现 TPS 低于 15,同时实体数量异常,那很可能就是大量假人或 NPC 消耗了性能。
在 Linux 服务器上,可以配合htop和free -h观察 CPU 和内存占用:
htop free -h不过这里要强调一点:不要单看内存占用就判断“有 hacker 入侵”。Minecraft 服务端的 GC 机制决定了很多玩家数据会常驻内存,内存占用高并不代表被人攻击。更直接的性能入口是实体数量。Paper 服务端可以通过/paper entity list查看实体数量分布,如果某个区块的实体数量异常多,再针对性地清理即可。
使用 Spark 插件做性能分析也是好办法:
/spark profiler执行后等待 1 到 2 分钟,再执行:
/spark profiler --stopSpark 会生成一份性能报告,里面会列出 TPS 下降期间哪个 tick 耗时最高、哪个实体类型占用了最多的计算资源。如果报告里显示大量player类型的实体,但实际在线人数又很少,那就说明存在假人或隐藏实体。
清理实体时要注意,不要直接在控制台执行:
/kill @e这会杀死包括掉落物、经验球在内的所有实体,可能对玩家正在进行的游戏造成影响。更稳妥的做法是定位到特定实体类型,或者使用 NPC 插件的删除指令。对于假人,优先用假人所在 Mod 的指令删除;对于 NPC,用 NPC 插件指令删除;对于无法确定来源的实体,可以先记录它的 UUID 和坐标,再决定是否清理。
性能观察的最终目标是:建立一条实体数量与 TPS 的对应基线。比如日常在线 10 人时,实体数量大约是多少,TPS 稳定在多少。后续再出现“神秘实体”或“看不见的玩家”导致卡顿时,你就能用基线快速判断异常程度,而不用每次都从头查。
10. 常见问题与排查方法
下面把这次排查中容易遇到的现象、原因和解决方案整理成一张速查表。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 玩家列表没有陌生人,但玩家被跟踪 | 隐身 OP 或 Vanish 插件 | 查插件列表、Vanish 状态和控制台日志 | 撤销对应玩家权限,修改 RCON 密码 |
| 在线连接记录正常,却有实体跟随 | Carpet 假人或 NPC 插件生成实体 | /paper entity list、查询 NPC 配置 | 删除假人/NPC,备份世界并清理配置 |
| 客户端能看到白色眼睛人形,服务器日志为空 | 客户端 Mod 或资源包渲染异常 | 纯净客户端 + F3+B 测试 | 逐个启用 Mod 定位问题源,删除异常资源包 |
| 服务器人数显示为 0,但地图上有目标点 | FakePlayer 插件或离线账户残留数据 | 检查/list和 RCON 返回 | 清理假人实体,检查相关插件配置 |
| 玩家上线后被传送到某个神秘位置 | 传送插件指令被滥用或权限节点异常 | 检查指令日志、LuckPerms 权限 | 移除异常权限节点,修改权限组结构 |
| RCON 被外部登录执行了操作 | RCON 密码弱或端口暴露公网 | 查看服务端日志中的 RCON 登录记录 | 立即关闭 RCON,修改密码,防火墙禁端口 |
| 钟表类模组显示玩家位置异常 | 小地图实体雷达功能导致误报 | 客户端关闭实体雷达选项 | 使用纯净客户端对比测试 |
| 清理 NPC 后仍被跟踪 | 插件数据或假人数据写入存档 | 停止服务端后备份并检查 playerdata | 使用 NBT 工具清理残留实体数据 |
实际排查时,先做第 4 节和第 5 节的日志与实体扫描,再做第 6 节的权限审计,最后回到客户端验证。不要倒过来从客户端开始,那样容易漏掉服务端的安全问题。
11. 服务器运维最佳实践:权限、日志与合规
排查完一次“神秘 HIM 跟踪”之后,建议顺手把服务器的安全基线提上来。下面的实践清单可以直接作为服务器维护清单使用。
第一,控制 OP 数量。一个服务器原则上不需要超过两个管理员。每个 OP 都应该有明确对应的真人玩家,并且定期检查ops.json和白名单文件。不要给普通玩家任何包含minecraft.command.gamemode、minecraft.command.tp、minecraft.command.op、vanish.use的权限节点。权限节点最小化是防止“被跟踪”的第一道防线。
第二,保护 RCON。RCON 是一个非常强力的远程管理通道,也是攻击者最喜欢的入口。要么不开启,要么绑定 127.0.0.1 并使用强密码,且密码不要写进启动脚本。生产环境建议通过安全通道访问服务器内部管理端口,而不是直接把 RCON 端口映射到公网。
第三,日志留存。建议开启日志轮转,定期把logs/目录复制到备份存储中。对于玩家举报类事件,日志就是唯一可靠的事实依据。如果日志文件被清空或修改时间异常,那本身就是安全警报。可以在 systemd 服务中增加日志持久化,或者用第三方日志收集工具把服务端日志同步到独立存储。
第四,插件来源要可信。只从官方论坛、知名插件仓库下载插件。安装新插件前,先解压查看 JAR 里是否存在可疑类名,比如涉及网络请求、反射操作和文件读写的类。如果插件来源不明,不要为了一个“隐身功能”去冒安全风险。被“HIM 跟踪”本身不可怕,可怕的是服务端被恶意插件盯上后,玩家隐私数据被持续外传。
第五,将监控手段写入服务器规则。如果确实需要用隐身模式排查问题,必须提前在服务器公告中说明“管理员可能使用隐身模式进行安全巡检”,并且只在必要时开启,用完立刻关闭。透明化监控可以避免玩家因“被神秘实体跟踪”产生恐慌,也能防止管理员滥用职权。
第六,定期执行实体与权限审计。可以把第 8 节的自动化巡检脚本加入 crontab,每天凌晨执行一次:
0 2 * * * /usr/local/bin/mc_security_scan.sh >> /var/log/mc_security_scan.log 2>&1审计内容包括:在线列表快照、OP 列表 MD5、最近新增插件文件、日志中的敏感指令。这样即使你自己没有意识到服务器出现问题,自动化任务也会留下记录。
12. 总结与下一步
“神秘 HIM 在服务器跟踪某人”这个问题的排查终点,不是寻找灵异现象,而是确认服务器里有没有一个“看不见但真实存在的玩家或实体”。从这篇文章的流程看,先看在线列表和日志,再看实体和假人,然后查权限和隐身,最后回客户端验证,每一步都能排除一类原因。最容易踩的坑,是玩家报告“看到了 HIM”,但实际排查下来,要么是管理员忘了自己开着 Vanish,要么是资源包把普通僵尸渲染成了白色眼睛的人形。
建议先做的验证很简单:打开控制台,执行/list,然后用grep过滤日志里的登录和指令记录。如果发现不了异常,再进入实体扫描和权限审计。服务器安全不是一件一劳永逸的事情,定期查日志、查权限、查插件,比等到玩家投诉“被神秘人跟踪”再动手要有效得多。
这篇排查办法对单节点的小型服务器完全够用。如果你的服务器已经上了集群或多节点架构,下一步可以考虑引入统一的日志收集和分析平台,把多个节点的登录、指令和实体快照聚合到一起,再基于规则自动告警。这样即使“幽灵管理员”在某个节点隐身操作,也会在统一的审计日志里留下痕迹。