路容站在工位旁,手里端着刚接的热水。周哲从会议室出来,看到她,笑着走过来。“早啊,若溪。昨晚休息好了吗?”路容点头,声音平稳:“好多了。关于昨晚的规则问题,我想再详细请教一下,避免以后犯类似错误。”周哲拉开旁边的椅子坐下:“没问题,你说。”路容放下水杯,手指在桌面上轻轻敲了敲:“我想了解,‘深蓝计划’的数据从接入到最终处理,整个链条的权限是怎么设计的?比如,谁能看到原始日志?审计记录是谁在维护?”周哲想了想,身体微微前倾:“这个啊,核心权限都在李总那边。不过……”他压低声音,“项目刚开始的时候,其实有一套临时的本地日志系统,那时候的权限分配和操作记录,我这边可能还有备份。”
路容的手指在杯壁上停住了。
热水透过陶瓷杯壁传来温度,烫着她的指尖。她闻到茶水淡淡的茉莉花香,混合着办公室里空调吹出的、带着灰尘味道的冷风。远处传来打印机工作的嗡嗡声,规律而单调。
“备份?”她的声音依然平稳,甚至比刚才更轻了一些,“在哪儿?”
“我工位那台旧测试机。”周哲指了指技术部办公区角落,“深蓝项目刚启动的时候,我们还没上安全服务器,所有日志都临时存在本地。后来迁移到正式环境,那台机器就闲置了,一直没重装系统。”
路容端起水杯,喝了一口。
热水滑过喉咙,带来灼烧感。
她需要这种灼烧感——来压制住胸腔里突然加速的心跳,来冷却那双在镜片后骤然收缩的眼睛。三年前,天启科技的“灯塔”项目,也是从一套临时日志系统开始的。李剑喜欢这种模式:先用本地测试环境跑通流程,记录所有操作痕迹,等正式上线时再“清理”掉那些不该留下的东西。
同样的手法。
同样的幽灵。
“那台机器……”路容放下杯子,陶瓷与桌面碰撞发出清脆的声响,“现在还能开机吗?”
“应该可以。”周哲耸耸肩,“不过里面都是些旧数据,可能早就没用了。而且——”他顿了顿,“那些日志格式很乱,当时为了赶进度,连时间戳的写法都没统一,有的用横杠,有的用斜杠,有的连时区都没标。”
路容的呼吸在那一瞬间停滞了半秒。
横杠。
斜杠。
时区。
十七处细节。
她昨晚在屏幕前数过的那些细节,那些烙印在李剑技术习惯里的指纹——它们不是偶然,不是巧合,是这个人十年如一日的编码风格,是他操纵数据时留下的、无法抹去的笔迹。
“听起来确实很乱。”路容说,声音里带着恰到好处的、新人工程师对技术债务的无奈,“不过如果能看看当时的权限分配逻辑,也许能帮我理解现在的设计思路。我昨晚设计的过滤规则,可能就是没吃透数据流转的完整链条。”
周哲看着她,眼神里闪过一丝欣赏。
“你这种态度很好。”他说,“很多新人遇到问题,第一反应是推卸责任,或者急着掩盖。你能主动复盘,还想深挖原因,这很难得。”
路容低下头,整理桌上的文件。
纸张在她手指间发出沙沙的摩擦声。她能感觉到周哲的目光落在她身上,温暖而真诚。这种温暖像针,扎在她用谎言构筑的盔甲上,留下细密的、看不见的孔洞。
“昨晚的事,我确实考虑不周。”她抬起头,目光直视周哲,“我太想证明自己了,想设计一个足够严密的规则,结果反而忽略了边界情况。给你添麻烦了,对不起。”
这句话说得很诚恳。
诚恳到连她自己都差点相信——相信她只是一个急于表现的新人,相信她的愧疚只源于技术失误,相信她此刻的冷静只是专业素养的体现。
而不是因为,她刚刚确认了仇人就在眼前。
而不是因为,她胸腔里那团复仇的火焰,已经烧得她五脏六腑都在疼。
“别这么说。”周哲摆摆手,“技术问题难免。而且你昨晚的反应很快,排查思路也很清晰,这已经比很多人强了。”他站起身,“这样吧,我上午有个会,下午两点之后有空。如果你真想看那些旧日志,我可以帮你把那台机器找出来。”
“谢谢。”路容说。
两个字,说得轻而稳。
周哲笑了笑,转身离开。他的脚步声在走廊里渐行渐远,最后消失在电梯间的方向。
路容坐在工位上,没有动。
她看着电脑屏幕,屏幕上是公司内部系统的登录界面,蓝色的背景上印着星耀集团的logo——一个抽象的、由无数光点组成的星环。那些光点在她瞳孔里旋转,旋转,最后凝固成三年前天启科技会议室里,李剑那张微笑着的脸。
“路容,这个数据包是你处理的吧?”
“时间戳对不上。”
“加密密钥的流转记录里,有你的操作痕迹。”
“董事会需要一个解释。”
那些话语,那些眼神,那些在会议室惨白灯光下翻动的文件——所有画面在这一刻全部涌回来,清晰得像是昨天刚发生。路容的手指握紧了鼠标,塑料外壳在她掌心留下深深的压痕。
她深吸一口气。
然后松开手,打开邮箱。
收件箱里躺着十几封未读邮件:项目进度汇报、部门例会通知、数据质量周报。她一封封点开,阅读,回复。回复的语气专业而克制,用词精准,标点规范。她甚至在其中一封关于“深蓝计划”数据清洗规范的修订邮件里,提出了两条具体的修改建议。
键盘敲击声在工位上规律地响起。
哒,哒,哒。
像某种心跳的替代品。
上午十点,王总监从办公室出来,高跟鞋敲击地面的声音由远及近。路容没有抬头,继续处理手头的报表。她能感觉到那道目光在她身上停留了几秒——审视的,评估的,带着惯常的挑剔。
“若溪。”王总监的声音在头顶响起。
路容抬起头。
王总监站在她工位旁,手里拿着一份打印出来的文件。她今天穿了深灰色的套装,头发一丝不苟地盘在脑后,嘴唇涂着正红色的口红。那红色在办公室惨白的灯光下,显得格外刺眼。
“昨晚的告警事件,周哲已经写报告了。”王总监把文件放在路容桌上,“报告里提到,是你设计的过滤规则触发了异常。虽然问题解决了,但这种事以后最好避免。‘深蓝计划’是集团的重点项目,任何数据波动都会引起高层关注。”
路容看着那份报告。
纸张很白,上面的黑色宋体字整齐排列。她能闻到油墨的味道,混合着王总监身上传来的、浓郁的香水味——那是某种昂贵的商业香,前调是柑橘,中调是茉莉,后调是檀木。香气太浓了,浓到几乎盖过了办公室里空调的灰尘味。
“我明白。”路容说,“我已经在复盘了,下午会跟周工进一步学习数据流转的完整机制,确保不再犯类似错误。”
王总监盯着她看了几秒。
那双涂着精致眼线的眼睛里,有什么东西在闪烁——是怀疑?是试探?还是单纯的、对下属的例行敲打?
“学习是好事。”王总监最终说,声音里听不出情绪,“但也要注意分寸。周哲手头有更重要的工作,不要占用他太多时间。”
“好的。”
王总监转身离开。
高跟鞋的声音再次响起,哒,哒,哒,最后消失在总监办公室的门后。路容看着那扇关上的磨砂玻璃门,门后隐约能看到王总监坐回办公桌前的模糊身影。
她收回目光,继续工作。
报表,邮件,会议纪要。
一项项处理,一件件完成。
中午十二点,办公室里的同事陆续起身去吃饭。路容没有动,她点了一份外卖,在工位上吃完。塑料餐盒里是简单的番茄炒蛋和米饭,味道寡淡,但她吃得很慢,每一口都仔细咀嚼,像在进行某种仪式。
饭后,她去了洗手间。
洗手间的镜子很大,很亮,照出她苍白的脸。她打开水龙头,冷水哗哗流下。她把手伸到水流下,让冰冷的水冲刷手指,冲走指尖残留的、来自餐盒的油腻感。
镜子里的人看着她。
黑框眼镜,马尾辫,白衬衫。
一张完全陌生的脸。
路容盯着那张脸,看了很久。然后她伸手,调整了一下眼镜的位置。镜片后的眼睛,依然平静,依然专业,看不出任何情绪的波澜。
下午一点五十分。
路容回到工位,打开和周哲的聊天窗口。
“周工,下午方便吗?想请教一下数据权限的问题。”
消息发出去,不到一分钟,周哲回复了:“刚开完会。你来我工位吧,那台旧机器我找出来了。”
路容站起身。
她的心跳在这一刻突然加快了——不是紧张,不是恐惧,是一种更复杂的东西:期待,警惕,还有那种在黑暗中摸索了太久、终于看到一线光时,本能产生的战栗。
她穿过办公区。
技术部在楼层的另一头,需要经过一条长长的走廊。走廊两侧是透明的玻璃隔断,里面是各个项目组的办公区。路容能听到键盘敲击声,电话铃声,偶尔爆发的讨论声。空气里弥漫着咖啡的味道,还有某种电子产品长时间运行后产生的、淡淡的塑料焦味。
她走到技术部门口。
门开着,里面比外面嘈杂一些。十几张工位排列整齐,每张桌子上都摆着至少两台显示器。屏幕上滚动着代码,图表,监控数据。周哲坐在靠窗的位置,正弯腰在一堆杂物里翻找什么。
“周工。”路容走过去。
周哲直起身,手里抱着一台黑色的台式机主机。机器很旧,外壳上积了一层薄灰。他把主机放在桌上,灰尘在空气中扬起,在午后的阳光里形成细小的光柱。
“就这台。”周哲拍了拍机箱,发出沉闷的响声,“放了快一年了,不知道还能不能启动。”
路容看着那台机器。
黑色的金属外壳,侧面贴着星耀集团的资产标签,标签上的条形码已经有些模糊。机箱顶部的散热孔里,能看到积攒的灰尘,像某种黑色的绒毛。
“电源线应该还在。”周哲蹲下身,在桌子底下的收纳箱里翻找。路容听到塑料碰撞的声音,还有纸张摩擦的沙沙声。几秒钟后,周哲抽出一根黑色的电源线,线身上也蒙着灰。
他把电源线插上。
按下开机键。
机器发出一阵低沉的嗡鸣——风扇开始转动,灰尘从散热孔里被吹出来,在空气中飘散。路容闻到一股陈旧电子产品的味道,混合着灰尘和塑料老化后的微酸气息。
显示器亮了。
蓝色的启动界面,Windows系统的标志在屏幕上旋转。进度条缓慢移动,1%,2%,3%……路容站在周哲身后,看着那个进度条。她的手指在身侧微微蜷缩,指甲陷进掌心,留下浅浅的月牙形痕迹。
“看来还能用。”周哲说,声音里带着点意外,“我以为硬盘早就坏了。”
系统启动完成。
桌面很干净,只有几个基本的图标:我的电脑,回收站,浏览器。背景是Windows默认的蓝天白云图。周哲移动鼠标,点开“我的电脑”,在D盘里找到一个名为“深蓝_项目归档”的文件夹。
“应该在这里面。”他说。
路容俯下身。
她的肩膀几乎挨到周哲的手臂。她能感觉到从他身上传来的温度,还有那种干净的、洗衣液混合着淡淡汗水的味道。屏幕的光映在她脸上,映在她镜片上,反射出冷白的光斑。
周哲点开文件夹。
里面是几十个子文件夹,命名杂乱无章:“测试日志_初版”、“权限配置_备份”、“操作记录_临时”、“数据映射表_废弃”……路容的目光快速扫过那些名字,最后停在一个叫“初始权限日志_本地备份”的文件夹上。
“这个。”她说。
声音很轻,但很清晰。
周哲点进去。
文件夹里是几十个文本文件,命名格式是“perm_log_YYYYMMDD.txt”。最早的日期是十一个月前,正是“深蓝计划”立项的时间。周哲随机点开一个文件,屏幕上瞬间弹出密密麻麻的日志记录。
路容的瞳孔收缩了。
那些日志的格式——
时间戳:[2024-04-12 14:23:11]
操作者:LJ(李剑)
动作:创建数据通道
参数:source_ip=198.51.100.0/24, encrypt_method=AES-256-GCM, key_rotation=7d
审批状态:已通过(电子签名:LJ_ZHAO)
时间戳:[2024-04-12 14:25:43]
操作者:LJ
动作:配置访问权限
参数:user_group=core_team, access_level=full, audit_flag=true
审批状态:已通过(电子签名:LJ_ZHAO)
横杠分隔的日期。
方括号包裹的时间戳。
操作者缩写。
参数列表用等号连接。
审批状态括号里的电子签名。
每一个细节,都和昨晚她在系统日志里看到的格式一致。每一个细节,都和三年前天启科技“灯塔”项目的日志格式一致。这不是巧合,不是偶然,这是同一个人用同一套思维模式、同一套编码习惯留下的痕迹。
路容的呼吸变得缓慢而深沉。
她盯着屏幕,眼睛一眨不眨。那些文字在她瞳孔里跳动,重组,最后拼凑出一幅完整的画面:李剑坐在电脑前,敲击键盘,配置权限,创建数据通道。他的手指在键盘上移动,他的思维在代码里流淌,他的习惯在每一个标点、每一个空格里留下烙印。
而此刻,这些烙印就在她眼前。
就在这台积满灰尘的旧机器里。
“这些日志……”路容开口,声音依然平稳,但仔细听能察觉到一丝极轻微的颤抖,“看起来权限很高。操作者都是LJ——是李总吗?”
“对。”周哲点头,“项目初期的核心配置都是李总亲自做的。他说这些涉及数据安全,不能假手于人。”
“那审批里的‘ZHAO’是?”
“赵律师。”周哲说,“集团法务部的负责人。所有涉及数据出口和加密配置的操作,都需要李总和赵律师的双重电子签名。这是合规要求。”
路容的手指在桌沿上轻轻敲了敲。
敲击的节奏很慢,一下,一下,像某种思考时的无意识动作。但实际上,她在用这个动作来分散注意力——分散那股从胸腔深处涌上来的、几乎要冲破喉咙的冷笑。
合规要求。
双重签名。
多么完美的设计。用合规的外衣,包裹非法的内核。用双重审批的流程,制造“集体决策”的假象。等东窗事发时,每个人都可以说:“我只是按流程签字,具体内容我不清楚。”
三年前,李剑用的也是这一套。
只不过那时候,他需要陷害的人是她。所以他在日志里伪造了她的操作痕迹,在审批流程里偷换了她的电子签名,在数据流转的关键节点上,埋下了足以让她身败名裂的“证据”。
而现在,他不需要陷害谁了。
他只需要保护自己。
所以这套流程变得更严密,更“合规”,更无懈可击。
“那这些日志现在还有用吗?”路容问,“既然已经迁移到安全服务器了,为什么还要留着本地备份?”
周哲耸耸肩。
“按理说应该销毁。但当时迁移的时候,安全团队说要做一次完整性校验,需要对比本地和服务器两边的日志,确保没有遗漏。校验做完之后,这台机器就闲置了,一直没人来处理。”他顿了顿,“其实我也想过重装系统,但总怕万一哪天需要查什么旧数据……你知道的,技术债嘛,能拖就拖。”
他说这话时,语气里带着点自嘲。
路容听出了那种自嘲——那是每个工程师都有的、对技术债务的无奈。但她更听出了这句话里潜藏的机会:这台机器还在,数据还在,那些记录了项目初期所有操作的原始日志,还在。
“那审计呢?”她继续问,声音里带着恰到好处的好奇,“这些操作被记录之后,谁来审计?审计日志又存在哪儿?”
周哲转过身,看向她。
午后的阳光从窗外斜进来,照在他脸上,照出他眼睛里那种认真的、愿意分享知识的神情。
“审计系统是独立的。”他说,“所有核心操作——包括数据访问、权限变更、加密配置——都会被实时推送到一个专门的审计服务器。那台服务器不在我们部门,在集团安全中心,物理隔离,访问权限极高。”
“多高?”
“至少副总裁级别。”周哲说,“而且需要动态令牌和生物识别双重认证。李总可以看,赵律师可以看,董事会授权的审计委员会可以看。我们这种级别,连服务器IP地址都不知道。”
路容点点头。
她的表情很平静,像只是在学习一个普通的技术架构。但她的脑子里,已经在快速构建一幅地图:核心数据需要李剑和赵律师的双重审批,操作记录被独立审计系统捕获,审计日志的查看权限极高,普通员工无法接触。
那么,她要怎么拿到证据?
从审计服务器直接突破?不可能,物理隔离,权限极高。
从审批流程入手?需要同时破解李剑和赵律师的电子签名。
从……
她的目光,重新落回屏幕上。
落回那些本地备份的日志文件上。
“其实最原始的权限分配和操作日志,在项目初期有一份本地备份,就在我这边一台测试机的硬盘里,后来统一迁移到安全服务器了,那台机器还没重装,不知道还有没有……”
周哲的声音在耳边响起。
路容的心跳,在这一刻骤然加速。
咚。
咚。
咚。
像某种沉重的鼓点,敲击在她的胸腔里,敲击在她的耳膜上。她能感觉到血液在血管里奔涌,能感觉到指尖传来的、细微的麻痹感。但她脸上的表情,依然平静。
她甚至还能继续提问。
“那如果……”她顿了顿,像是在斟酌用词,“如果我想学习完整的权限设计思路,是不是看这些本地备份就够了?毕竟初期的设计逻辑,应该是最核心的。”
周哲想了想。
“理论上是的。”他说,“初期的设计决定了整个架构的走向。不过——”他看向路容,眼神里带着点关切,“你也不用太钻牛角尖。昨晚的事已经过去了,李总那边也没再追问。你现在最重要的是把日常工作做好,慢慢积累经验。”
路容低下头。
“我知道。”她说,“但我还是想弄明白。我不想再犯同样的错误。”
这句话说得很轻,但很坚定。
周哲看着她,看了几秒。然后他笑了,那笑容里有种无奈的、但又带着欣赏的意味。
“行吧。”他说,“那这样,这些日志文件你可以拷贝一份回去研究。但记住——”他的表情严肃了一些,“绝对不能外传,绝对不能放在任何联网的设备上。这是公司机密,出了事我们都担不起责任。”
“我明白。”路容说。
周哲从抽屉里拿出一个空白的U盘,插到主机上。他打开文件夹,选中所有日志文件,开始拷贝。进度条在屏幕上缓慢移动,文件数量:47个,总大小:3.2GB。
路容站在旁边,看着那个进度条。
1%,5%,10%……
每一个百分点的跳动,都像一次心跳。她的目光紧紧锁定屏幕,锁定那些正在被复制的文件名。那些名字在她瞳孔里闪烁,像某种密码,像某种钥匙,像某种……复仇的武器。
30%,50%,70%……
办公室里的嘈杂声在这一刻变得遥远。她能听到的,只有主机风扇转动的嗡鸣,还有自己胸腔里那沉重的心跳。她的手指在身侧蜷缩,指甲再次陷进掌心。这一次,她用了力,掌心传来清晰的刺痛。
刺痛让她清醒。
90%,95%,99%……
“好了。”周哲说。
进度条消失,拷贝完成。他拔出U盘,递给路容。黑色的塑料外壳,在她掌心留下冰凉的触感。
“拿去吧。”周哲说,“但记住我说的话。”
路容握紧U盘。
塑料外壳的边缘,硌着她的掌心。
“谢谢。”她说。
两个字,说得轻而稳。
就像她胸腔里那团燃烧的火焰,已经被一层厚厚的冰,彻底封存。