第五十一章 whitelist-白名单
在Minecraft服务器中,有一个很重要的系统:白名单系统。
什么是白名单?简单来说,白名单就是服务器随身携带的一个小本本,上面记录了一些玩家。当一个服务器启用白名单系统后,每个玩家想要进入服务器时,服务器就会从兜里掏出小本本,看看该玩家是否被记录在小本本上。如果有记录,那么服务器会允许玩家游玩服务器,反之则会拒之门外。
可以说,有了白名单系统,服务器就能够几乎不受熊的骚扰。对于Java服务器来说,白名单再加上正版验证,那安全性简直不要太好。
Minecraft服务器的白名单系统简单来说由两部分组成:服务器根目录下的whitelist.json文件和/whitelist指令。(注:作者没有开过基岩版Minecraft服务器,暂不清楚基岩版服务器是否和Java版服务器情况一致。如果有开过基岩版服务器的读者可以在这儿留言说明一下。)
这个whitelist.json文件内用JSON记录了白名单上的玩家数据。这个玩家数据的组成也很简单:由玩家名和UUID组成。
在Java版服务器中,开启正版验证的情况下,玩家名和UUID都有用处。因为每个正版玩家都有一个独一无二的UUID和玩家名。什么是UUID?简单来说,UUID就是你在Minecraft中的身份证号码,游戏需要通过UUID来识别你。UUID可以通过Mojang提供的官方abr /i接口进行查询,因此可以保证不会有玩家冒充某个获得白名单的另一个玩家进入服务器。
至于基岩版服务器。基岩版服务器没有离线账号一说,全部账号都是XBOX的游戏账号,因此也有独一无二的UUID。
但如果没有开启正版验证,离线服务器的白名单就没有那么保险了。至于为什么会不保险,我们待会再研究。
白名单的另一部分是/whitelist指令。该指令的使用方法如下:
/whitelist add <玩家名>——将玩家添加到白名单,并且该玩家不需要在线。
/whitelist list——列出白名单中的玩家。
/whitelist off——在此服务器上禁用白名单系统。
/whitelist on——在此服务器上启用白名单系统。
/whitelist reload——从服务器文件夹中重新读取white-list.txt(1.7.5及以前)或whitelist.json(1.7.6及以后)文件中的白名单列表。
/whitelist remove <玩家>——将玩家名从白名单中移除。被移除的玩家不需要在线。
是不是很简单?我们现在来看一个情景:
当天下午,某名玩家通过MC百科的找服玩功能找到了一个开启了正版验证和白名单系统的1.12.2版本Java服务器,并通过了该服务器的白名单获取考试和QQ群加入审核。现在服务器管理员要将该玩家加入到服务器白名单列表当中,他一共可以采取三种方法来完成这项任务:
①暂时禁用服务器白名单功能(运行/whitelist off),等待该玩家加入服务器。该玩家加入服务器后,管理员运行“/whitelist add 该玩家名称”将该玩家加入白名单中,最后再运行/whitelist on开启白名单功能。
②与该玩家私聊,获取该玩家的玩家名信息。让该玩家先尝试加入一遍服务器,然后服务器管理员打开服务器根目录的usernamecache.json文件(该文件记录着玩家名和对应的UUID),根据用户名找到对应的UUID,接着手动修改whitelist.json文件,最后运行/whitelist reload重载白名单。
③与该玩家私聊,获取该玩家的玩家名信息。然后直接运行“/whitelist add 玩家名”即可。
很明显,①方案是个下策,风险性很高。②方案如果不是服主或服主的好朋友,否则很难获取服务器目录的访问和修改权。③方案是最好的方案,也是最简单的方案。
现在你学会了吧?
那么为什么离线服务器的白名单不保险呢?
首先,我们要了解:什么是离线服务器。
离线服务器,并不是指可以断网玩的Minecraft服务器,而是指没有开启正版验证的服务器。离线服务器不会验证进入的玩家是否为正版玩家,因此自然也不会专门去获取该玩家的UUID(就算该玩家是正版玩家),而是会随机生成一串UUID。由于UUID是服务端随机生成的,那么肯定就无法通过UUID来验证玩家,因为客户端不知道也不会记录服务端随机生成了什么UUID。所以在离线服务器中,唯一能够验证玩家的便是玩家名。
由于离线账号下的玩家名可以不受限制的重复,因此开启了白名单验证的离线服务器就有可能会出现以下情况(该情况根据真实事件改编):
A是一名获取了该服务器白名单的玩家,玩家名叫做scbr /
B是另外一名玩家,但玩家名也是scbr /
B有一天尝试直接进入到A所玩的服务器,然后他成功了,并且一开局就有经验值和一堆物品!
很明显,离线服务器就算开启了白名单,只要他人搞到了能够进入服务器的玩家名字,就可以通过“盗取”他人游戏账号来进入服务器,这也就是为什么Mojang在每次离线服务器启动的时候都要加上一句警告信息。
而获取能够进入服务器的玩家名字很简单。只要有人在线,就算是没有白名单的人也能通过服务器信息搞到在线玩家名,进而修改自己的玩家名进入服务器。
那么离线服务器能否解决这个问题呢?
有两个解决办法:
①开启正版验证。但是离线服务器玩的人基本上没有正版,所以对于那些玩家来说打击很大。
②不要使用原版的服务端,采用第三方可以装插件的服务端或在原版服务端的基础上裝Forge再加上Sbr /ongeForge(海绵端),并给服务器装上适宜的登录插件,让玩家进入服务器还需输入一次密码进行二次验证。
③采用第三方皮肤站或自建皮肤站,修改官方服务端的验证服务器为自己的验证服务器,然后开启正版验证。此时使用指定皮肤站账号的玩家就被服务器视作正版玩家,也就解决了白名单问题,还顺带解决了皮肤显示问题。
第一个解决办法虽然很保险,但是可能会因此丧失几乎所有的玩家(因为玩离线服务器的玩家大多数没有正版账号)。对于已经运行一段时间,有一定体量的服务器来说,最好采用第二个解决办法,顺带还可以给服务器裝更多插件,搞得更加高大上一些。对于没多少玩家的新开服务器,还可以采用第三个解决办法,目前很多MC Java服务器也是采用这个办法通过开源的Blessing Skin Server自建MC皮肤站来解决皮肤显示和白名单问题。
那么本章就到此结束了。下一章我们将了解黑名单和/kick指令的使用。(/kick还要讲吗?是个人都会用!)