|||
TroubleShooting(故障排除)是我的老本行——不管是做网管还是做开发。TroubleShooting最引人入胜的地方在于就像破案,抓住各种线索、没有线索也要制造线索,一点一点地剥开真相。
导师交过来一个难破的案子,尽管我心里在说:“这不是我的份内之事”,但其实我这前半生又做过多少份内之事呢,还不是有啥事做啥事,这回就发扬一下国际主义精神吧。更重要的是,哥已经七八年不在江湖,江湖上早已没有了哥的传说。看看这案子似乎不难,重出江湖拿来过过瘾也不错啊。
首先要去案发现场。到处打听去案发现场的路,却发现这个案发现场是看不见摸不着的。原来是一个虚拟的机器,而且这个虚拟机寄宿在哪里也不知道。只通过邮件联系上一个学生,这个学生说硬盘坏了,正在将虚拟机迁移到另一台宿主机器。这台宿主机器在哪里、谁来管?没有人知道,都是远程操作。拖了很久,终于迁移好了,给我一个地址、一个账号和密码,于是可以通过SSH远程连上去了。
能看到现场是激动人心的,仿佛战士又来到了战场,但我所看到的其实都是幻象。这比阿凡达还要虚幻,纳美人尽管接触的是地球人的化身,起初对真正的地球人在哪里、长得什么样一无所知,但毕竟纳美人所看到的化身是具体的、可触摸的、真实可见的。而我所看到的虚拟机,存粹是我自己的电脑中显现的一个窗口。我只知道,地球的某个角落,有一台计算机假扮着各种不同的机器,模拟各种不同操作系统的响应,把一幅幅信息发给不同的人,让每个人都以为自己是在和一个真实的计算机打交道。这倒有点像人工智能中的图灵测试,只是现在这台计算机不是在模拟人的智能,而是在模拟另外一台电脑。
进了现场才发觉里面用的操作系统是Linux,不是我平时用的Windows。天!哥不用Solaris都n年了,linux更只是摸过几次。依稀记得cd, ls -al等几个简单的指令,找学生要了启动游戏的指令,就准备还原现场了。一个启动命令发过去,突然看到提示,Jess过期了。呵,原来这个案子这么简单。赶紧google,下载,上传。碰到问题了:怎么将我下载的新的Jess上传上去? 以前这可谓举手之劳,但这台电脑没有装FTP, 也无法运行浏览器。而且我的账号也没有权限安装。想到找个中间服务器倒一下,但离开故校多年,早就没有故校的FTP服务器的账号了,最后还好想到母校的服务器上有个账号支持FTP,终于把软件从我的机器中传到母校,再从母校下载到游戏服务器。搞定。
一切风平浪静,用了一段时间却突起波澜,游戏服务器又连不上了。急着要用,导师限时一天之内搞定。
这时真是后悔当初接了这个烫手山芋。破案最怕的就是限时,对我们一线的警察来说,不计时间和成本的话其实没有破不了的案子,只是时间和投入的多少问题。就像方玄昌遇袭的案子拖了很久也没破,但同一批人再袭击方舟子时,上头一下决心,很快就破案了。但如今一天之内就要搞定这么没有头绪的案子,确实有些天方夜谭。
再去现场,这一次的案子非常棘手,连游戏的第一关:网页都上不去。做网管最拿手的是重新启动,重启Web服务器,没有权限;重启整个操作系统,又没有权限。就像一个警察到了枪战现场却没有枪,空有力气使不出来啊。谁给我超级用户口令?幸好有网络,群发邮件,可惜学生都在上课,等到中午时分终于等到了口令。n年没有做过超级用户了,此时的我,就像电影中被缴了枪的警察又重新搞到了枪,再也没有能阻挡我的障碍了。有了超级用户,就可以说没有任何搞不定的事情了。真正的破案终于开始了。
重启、再重启,没有效果。查看日志,找不到蛛丝马迹。
当破案没有线索的时候,一种做法是走访目击证人,搜集线索。幸好现在是网络时代,不用自己去跑,只要继续群发邮件,等学生下课后看看大家做过什么就行了。不过对学生不报太大希望,因为问题的复杂性在于经过几届学生经手,每个学生都只知道其中一个非常局部的信息。
在等待大家的回音时继续创造条件制造线索,寻找犯罪嫌疑人。
大胆假设:Web服务器软件坏了。
小心求证:自己编一个最简单的Web服务器,结果仍旧连不上。
继续大胆假设:学校网管设置了防火墙把这台机器封了。
小心求证:学校的网管都不知道怎么联系,还是先从自己做起吧,查这台机器的防火墙设置。
没有图形界面,一切都靠命令行,仿佛回到了原始社会。搞不清这台机器用了什么防火墙,就从最常用的找起来吧。虽然n年前在路由器上配置防火墙的技能已经炉火纯青了,但如今除了基本的概念以外,实际的命令早就忘了,而且现在是在Linux上配置防火墙,连Linux本身都不怎么熟,对其防火墙就更是一头雾水了。万能的Google,终于让我搜索到Linux上常有防火墙的配置文件。虽然看不懂也理解不了其中的指令,但依靠胆大心细,照葫芦画瓢,比照着修改,终于把80号端口放行,可以通过浏览器能访问了。
满心欢喜地运行游戏客户端,结果却仍旧连不上服务器。
得看游戏的运行机制了,缺少文档,还好游戏有源代码,尽管时间紧急,但择要地读了一下代码还是看出了一些端倪。加上最原始的调试手段:加上打印语句进行跟踪。终于发现游戏服务器打开一个端口后就不再走下去了。
大胆假设:防火墙把游戏客户端和服务器通信的端口也封了。
小心求证:防火墙上放行后,果然可以连接了,但所有的游戏帐号都无法登录。
大胆假设:防火墙把服务器上数据库的端口也封了。
小心求证:,循着踪迹跟踪过去发现连接数据库时就出错。google查到MySQL默认端口,将其放行。
但仍旧无法登录,看来还有其他原因。
大胆假设:数据库配置有问题。
正要去google,走访目击证人搜集到一个重要线索:数据库root密码被改过。终于找到原因了,但密码保存在哪里呢?在浩瀚的文件里哪个里面有数据库密码?用password检索的话有很多文件都有这个词。最后根据出错提示猜测犯罪嫌疑人,这时候警察的直觉就很派用场了。找个文件抓来以后一看,果然有个地方有密码。
终于进了游戏了,但游戏中间突然提示缺文件。全局搜索也没搜索到所缺的文件,继续根据出错提示猜测,原来还有另外一个文件也保存有数据库密码,得一起修改掉。看来这个游戏设计得有问题,密码明文保存在这么多不同的源代码里面。重新编译部署,游戏终于可以玩起来了。
夜深了,但人很兴奋,一个难缠的案子初步破掉了,这个案子要综合用到网管和编程的知识,涉及Linux系统、防火墙、DNS配置、SSH、Apache服务器、Jess引擎、Java编程、DarkStar,幸好我刚工作时同时做过网管和编程。尽管很多知识和技能都荒废多年了,但这些领域的基本的原理和基本概念并没有变化,在强大的google的帮助下竟然依靠七八年前的知识在半懂不懂的状况下自己动手破了这个案子,八年前自己编写的一些小工具也都还能派上用场。
做网管,其实挺幸福的。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-5 03:14
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社