PaperMC 危险指令与防护
为什么指令会带来灾难🔗
服务端指令是管理员对服务器的操作入口,灾难通常来自三条路径:
- 管理员误操作 —— 打错参数、选错目标选择器、在错误的位置执行
- 权限被过度授予 —— OP 等级给得过高、权限组包含通配符、把指令权限直接给了玩家
- 账号 / 控制台被攻破 —— 离线模式冒充管理员、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 | 泄露世界种子,可反推要塞、史莱姆区块、矿物分布 | 不授予该权限;已泄露则换种子重建 |
/reload | Bukkit 运行中重载 = 模拟停机再启动:内存泄漏、监听器重复、调度器双跑、数据损坏 | 用重启替代 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]。
防护原则🔗
最小权限:用 LuckPerms 做细粒度权限替代原生 OP 4 级;角色分级(访客→成员→建造→管理→服主),每级只给所需最小权限。
高危节点默认拒绝(不授予任何组):
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绝不授予通配符:
*、luckperms.*、essentials.*会瞬间放大全部权限面。命令审计:开启 CoreProtect / LogBlock 记录方块变更与命令;定期执行
co lookup command:"/give"排查异常。用重启代替
/reload:改插件、改配置后直接重启;个别插件有独立重载命令(/lp reloadconfig、/wg reload),优先使用。关闭命令方块:公共服务器设置
enable-command-block=false,杜绝命令方块脚本攻击面。执行前过一遍目标:这条命令会作用到谁?范围多大?能否回滚?
事故复盘示例🔗
案例 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 仅用于紧急排查。