排查中手滑的那一刻
一句话总结
调查期间只要改动了什么,之后我们看到的所有值,就分不清是原来的值还是我们造出来的值。如果非改不可,就要先固化改动之前的状态,再改动、确认、还原。
为什么需要它
对客户公司的调查,通常从只读权限开始。但过上大半天,必然会遇到这样的时刻:“只要把这个配置值临时调高一点,马上就能知道了。”事实确实如此,把那个值调高,5 分钟就能得出答案。问题在于这 5 分钟之后的世界。
改动之后,有三件事会同时变得模糊。第一,现在看到的症状,分不清是原本的症状还是我们造成的症状。第二,客户在这期间看到的日志和指标被污染了。第三,之后有人问“是从什么时候开始变成这样的”,我们自己就成了答案的一部分。
这里有一个常见的误解:“只是个小改动,没关系。”改动越小,越容易忘记还原。而且,相信自己已经还原了,与已经还原这件事得到了证明,是两回事。
工作原理
顺序有四步。
1 굳힌다 바꾸기 전 상태를 지문으로 기록한다 (파일 해시·크기·권한)
2 바꾼다 한 건만, 무엇을 왜 바꾸는지와 되돌리는 명령을 함께 적고
3 확인한다 바꾼 것이 의도한 효과를 냈는지 값으로 본다
4 되돌린다 되돌린 뒤 1번의 기록과 견주어 다르지 않음을 보인다
该代码块中的韩文依次说明:1 固化:在修改之前,用指纹记录状态(文件哈希、大小、权限);2 修改:每次只改一项,同时写明改什么、为什么改,以及还原命令;3 确认:用值来查看所改动的内容是否产生了预期的效果;4 还原:还原之后与第 1 步的记录比较,证明没有差异。
第 1 步最常被漏掉。不固化的话,第 4 步就没有可以证明的东西。“已经恢复原样”是一句无法验证的话,客户既可以相信,也可以不信。而“还原之后与快照比较,内容不同的文件有 0 个”,则是可以确认的话。
固化的记录里应该放什么?文件的内容指纹(sha256)、大小和权限必须放。修改时间也要放,但比较时要单独处理。因为还原后的文件即使内容相同,修改时间也不同,这不是失败,而是我们动过手的痕迹。不要试图抹掉痕迹,而要把它写进报告。
不过,有一件事应当先问:真的必须改动才能得到答案吗?很多情况下,同一个问题可以用只读的方式回答:打开配置文件读取值,以只读方式打开数据库来统计,数日志行数,运行已有的查询工具。先花 30 分钟左右寻找这条路,再决定要不要改动,也来得及。
不欺骗自己“是不是只读”的办法,是记录所用的命令。
固化的范围也要确定。对整台服务器取指纹,耗时很长,而且这期间日志还在增长,下一次比较就会一片标红。反过来,只取要改的那一个文件,又会漏掉它旁边被连带改动的东西。实际工作中,取的是要改动的对象所在目录的一层:把配置目录整个固化下来,即使编辑器留下了备份文件或临时文件,也会原样暴露出来。日志这类持续增长的位置,要么放进范围、比较时单独处理,要么一开始就放在范围之外,并把这件事写下来。
固化下来的文件本身也要放在安全的位置。如果在调查对象目录里创建快照,这个文件会在下一次比较中被当作“新出现的文件”,更糟的是,这就等于我们在客户服务器上留下了一个文件。快照和记录要放在我们自己的工作目录里,交接时一并交出。每个答案都写明是用什么命令得到的,就能一眼看出其中是否混入了 UPDATE 或重定向。不写的话,留下的就只有“只是查询而已”的记忆。
在现场相遇的样子
第一,每次只改一项。同时改两样,就不知道效果来自哪一边。还原时也要一项一项地还原,才知道还剩下什么。
第二,把还原命令写在改动之前。如果改完之后才想写,原始值就只能靠记忆。是 3 还是 30,30 分钟后会模糊得令人吃惊。
第三,把批准用一句话留下来。调查中的临时改动也要得到某个人的同意。“运维团队 Choi 科长口头批准 13:40”,一行就足够。没有这一行,之后这个改动就成了我们偷偷做的。
第四,证明还原时,不要隐瞒修改时间的差异。内容相同而只有时间不同,就如实写成“内容相同,仅修改时间变化”。如果把时间也调回原样,那从此开始,就成了我们在抹掉痕迹。
第五,这与经过批准的变更作业是两回事。制订计划、确定中止标准、取得客户批准后再实施的变更,有另外的纪律。这里讨论的是它之前的阶段:调查过程中手滑的那一瞬间,在第一周应当遵守的纪律。
实际工作中真正重要的事
- 先寻找可以只读回答的办法。把所用的命令记下来,就不会欺骗自己。
- 改动之前先固化。不固化的话,就无法证明已经还原。
- 每次只改一项,并提前写好还原命令。
- 还原用比较的结果来呈现,而不是用话语。留下的痕迹不要抹掉,要写下来。
下一项实验要做什么
拿到(虚构的)Suwon Pay 的生产服务器。先只用只读手段回答五个问题,并把所用的命令一并留下。然后编写把目录状态固化成指纹的工具,并给这个工具加上比较功能:评分器会构造出新增文件、删除文件、修改内容、只改权限、只改时间这几种位置,看你的工具能否区分这五种情况。接着把必须改动的一行配置,连同批准和还原命令一起改掉,用查询工具确认效果,再真正还原,并证明与快照相比内容不同的文件有 0 个。