◇◇新语丝(www.xys.org)(xys5.dxiong.com)(www.xinyusi.info)(xys2.dropin.org)◇◇   “破案”手记   晓鸿   故障排除(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的帮助下竟然依靠七八年前的知识在半懂不懂的状况下自己动手 破了这个案子,八年前自己编写的一些小工具也都还能派上用场。   做网管和编程,其实挺幸福的。 ◇◇新语丝(www.xys.org)(xys5.dxiong.com)(www.xinyusi.info)(xys2.dropin.org)◇◇