PaperMC 危险指令与防护


为什么指令会带来灾难🔗

服务端指令是管理员对服务器的操作入口,灾难通常来自三条路径:

  1. 管理员误操作 —— 打错参数、选错目标选择器、在错误的位置执行
  2. 权限被过度授予 —— OP 等级给得过高、权限组包含通配符、把指令权限直接给了玩家
  3. 账号 / 控制台被攻破 —— 离线模式冒充管理员、RCON 暴露公网、弱密码被爆破

下面按后果分类列出高频危险指令,以及对应防护。

文中的 /co rollback 依赖 CoreProtect;未安装审计插件时,损坏只能从备份恢复。


灾难性指令清单🔗

世界与数据破坏类🔗

指令灾难性后果防护
/fill / /setblock / /clone一键大面积替换/清空方块,毁掉建筑与地形;巨量方块同时写入还会卡死主线程精确坐标;操作前先 //copy 备份;事后用 /co rollback 回滚
/kill @e清空所有实体:村民、驯养动物、掉落物、画框、展示框全部消失限定目标类型与范围,避免裸 @e
/kill @e[type=!player]清空所有非玩家实体,包含刷出的怪物与经验球同上,先确认过滤器
/clear @a清空全体玩家背包与装备指定具体玩家:/clear <玩家>
/setworldspawn / /spawnpoint误设出生点,新手生成在危险/错误位置使用精确坐标并二次确认
/worldborder set <值>缩小边界时,边界外玩家被推出地图甚至清退逐步缩小、提前公告,别一步到位
/tp <玩家> <坐标>传送到虚空或未加载区块,玩家卡死/掉落虚空核对坐标,避免 Y<0

性能与崩溃类🔗

指令灾难性后果防护
/summon + 恶意 NBT召唤海量隐形实体(NoAI/Invulnerable)甚至隐形末影龙,造成卡服甚至崩溃不授予 minecraft.command.summon;禁止玩家使用
/execute as @a run ...对全体玩家递归执行,形成命令链风暴明确目标选择器,逐段测试
/forceload add强制加载大量区块,内存与 TPS 持续消耗按需加载,用完即移除
命令方块 + /schedule递归触发形成无限循环,服务器被拖死公共服关闭命令方块:enable-command-block=false
/give @a <物品>海量掉落物刷屏、存档膨胀按需给予,避免 @a

权限与安全类🔗

指令灾难性后果防护
/op <玩家>误给 OP;OP 可再 op 他人形成"影子管理员",绕过审计日志用 LuckPerms 替代原生 op;任何组都不授 minecraft.command.op
/whitelist off大门敞开,任意玩家可进上线前确认 enforce-whitelist=true
/publish开启局域网广播,绕过 online-mode 认证公共服务端禁用
/seed泄露世界种子,可反推要塞、史莱姆区块、矿物分布不授予该权限;已泄露则换种子重建
/reloadBukkit 运行中重载 = 模拟停机再启动:内存泄漏、监听器重复、调度器双跑、数据损坏用重启替代 reload;配置变更用插件各自的 reload 子命令
/stop 而未先保存未落盘数据丢失/save-all,用维护脚本优雅停机
/ban / /ban-ip / /kick误封误踢;误封 IP 会波及同网络(NAT)下的无辜玩家核对玩家名与封禁理由

插件相关🔗

指令灾难性后果防护
/plugman reload <插件>/reload 同类问题:类加载器泄漏、监听器重复改插件必须重启;优先插件原生重载命令
WorldEdit //set air选区覆盖整片建筑/地形并替换为空气//sel 确认选区、//expand vert 看全高;误操作用 /co rollback
Essentials /eco give刷钱破坏服务器经济经济类指令只授财务管理员

目标选择器警示🔗

选择器含义常见误用
@a所有玩家忘记限定,影响全体玩家
@e所有实体包含掉落物、画框、村民、驯养动物,裸 @e = 清空一切
@r随机玩家测试时随机命中无关玩家
@s执行者自身命令方块中指向命令方块而非玩家
@p最近玩家无人时执行失败

@e 是最常造成"清空服务器"事故的选择器,务必限定类型与距离,例如 @e[type=minecraft:zombie,distance=..32]


防护原则🔗

  1. 最小权限:用 LuckPerms 做细粒度权限替代原生 OP 4 级;角色分级(访客→成员→建造→管理→服主),每级只给所需最小权限。

  2. 高危节点默认拒绝(不授予任何组):

    minecraft.command.op
    bukkit.command.op
    minecraft.command.give
    minecraft.command.execute
    minecraft.command.fill
    minecraft.command.setblock
    minecraft.command.kill
    minecraft.command.summon
    essentials.stop
    essentials.reload
  3. 绝不授予通配符*luckperms.*essentials.* 会瞬间放大全部权限面。

  4. 命令审计:开启 CoreProtect / LogBlock 记录方块变更与命令;定期执行 co lookup command:"/give" 排查异常。

  5. 用重启代替 /reload:改插件、改配置后直接重启;个别插件有独立重载命令(/lp reloadconfig/wg reload),优先使用。

  6. 关闭命令方块:公共服务器设置 enable-command-block=false,杜绝命令方块脚本攻击面。

  7. 执行前过一遍目标:这条命令会作用到谁?范围多大?能否回滚?


事故复盘示例🔗

案例 1:误 //set air 清空出生点🔗

  • 场景:WorldEdit 选区未确认范围就 //set air,半个出生点城镇消失。
  • 恢复/co rollback u:<玩家> t:1h 回滚一小时内的方块变更;若无审计插件只能从备份恢复。
  • 教训:WorldEdit 操作前 //sel 确认选区,关键建筑先 //copy

案例 2:/kill @e 清空全服实体🔗

  • 场景:本想清理刷怪塔附近的怪物,误输 /kill @e,全服村民、驯养动物、掉落物全灭。
  • 恢复:实体无法恢复,动物需重新繁殖。
  • 教训:实体类指令限定 @e[type=...,distance=..],把裸 @e 视为危险操作。

案例 3:/reload 后插件状态错乱🔗

  • 场景:更新插件配置后 /reload 热加载,出现重复监听器、调度器双跑、数据异常。
  • 恢复:只能重启服务端,部分数据可能已损坏。
  • 教训:“更新插件/改配置"一律走重启;reload 仅用于紧急排查。

参考链接🔗