公司动态
奇安信运维笔试题解析:Linux安全加固与容器应急响应
2020年秋招那阵子我前后刷了几轮奇安信的笔试题运维方向一共三套卷子这套“试卷3”是做得最久、也是事后复盘价值最高的一套。原因不复杂它不像很多互联网公司纯考Linux八股而是把安全基因和工程落地能力揉在一起考——Linux基础、网络排障、主机加固、容器编排占了大头中间还穿插了不少应急响应的场景题确实能拉开差距。对准备运维岗的同学来说这份卷子的参考意义不只是“背题”而是它基本框定了网络安全厂商对运维工程师的能力预期你不仅要会重启服务还要知道系统哪里最容易被打穿、日志里藏着什么线索、容器环境下怎么排查问题。所以这篇就把试卷3的考点拆开把每类题背后的考察逻辑、答题思路和实操要点完整过一遍应届生可以参考它制定复习路线工作两三年的同学也能拿来自查能力短板。1. 试卷整体风格与考点布局1.1 从出题思路看奇安信要什么样的人我拿到这套卷子的第一感觉是它不想招一个只会敲命令的“操作员”而是想招一个能理解业务链路、能在故障和攻击面前稳住节奏的“值守优化型”运维。整张卷子的安全色彩非常重主机安全、应急响应、基线检查这类题目几乎贯穿始终这在纯互联网公司的运维卷里很少见。因为奇安信本质上是安全产品和服务厂商它的运维工程师既要维护自家平台的稳定性也要具备给客户做安全巡检、应急支持的能力。卷面结构大致分四块选择题和填空题覆盖Linux命令、网络协议、系统概念简答题集中在系统启动、故障排查、安全加固场景题和实操描述题则考察Kubernetes、发布变更、日志分析这些偏工程化的能力。最坑的是时间分配题量不算特别大但每道场景题都要写步骤手写答案会很慢。我当时就是在前面的选择题上磨太久后面两道场景题差点没写完。1.2 高频考点分布与复习权重我把试卷3里出现过的题目归了归类按频率和分值排了个优先级方便后面逐个击破考点模块出现形式大致占比重要度Linux基础与系统管理选择、填空、简答30%极高网络协议与故障排查选择、简答20%极高安全基线、加固与应急简答、场景题25%极高Shell/Python自动化编程填空、脚本题10%高容器与Kubernetes简答、场景题10%高软技能与求职认知面试追问5%中这组权重其实给备考指了条明路Linux和网络是绝对的基本盘但能否拿高分取决于你对“安全加固”和“故障排查”这两类场景题的理解深度。单纯背命令是拿不到场景题分数的必须把排查链路和加固逻辑想清楚。1.3 答题节奏与策略建议整套卷子建议先把简答题里自己最有把握的做了把步骤写完整再去处理选择题。因为选择题的分值往往没想象中高而场景题是按步骤给分的哪怕最后结论不对只要排查过程合理也能拿到大部分分数。另外所有涉及“你怎么做”的题目都要按“发现问题→定位原因→临时处理→彻底修复→复盘预防”的结构来答这种结构本身就是运维人员的基本工作方法阅卷人也最认可。2. Linux与系统管理吃透命令背后的原理2.1 高频命令题与答题模板试卷3里Linux命令题的数量不少但翻来覆去就是几个经典场景进程异常、磁盘打满、内存不足、服务起不来。考的不是命令本身而是你在真实环境里的排查顺序。比如“CPU飙高怎么定位到具体线程”这道题标准答案是分几步走先用top -c看哪些进程占用CPU高记下PID再用top -Hp PID看这个进程下哪个线程消耗最高然后echo把线程ID转成十六进制用jstackJava场景或者perf、strace去抓线程的调用栈最后结合日志或者代码定位到具体业务逻辑。这套链路里很多应届生会卡在“除了看top就不知道下一步干什么”所以回答时一定要把“进程→线程→代码”这条线索点出来。再比如磁盘排查题目往往会问“服务器磁盘写满业务报错怎么办”。你第一步要做的不是删文件而是先看是什么在写否则删完立刻又满。标准操作是df -h确认分区使用率然后lsof | grep deleted看有没有进程占着已删除的文件再通过du -sh /path/*按目录从大到小定位大文件同时结合dmesg查是否有进程报IO错误。这里最容易忽略的就是deleted文件占着磁盘空间但ls已经看不到必须用lsof才能揪出来。2.2 系统启动流程与故障恢复有一道简答题给我的印象很深描述Linux从按下电源键到登录界面的完整启动过程并说明如果卡在某一步怎么排查。这道题分值不高但它考察的是你是否真正理解操作系统而不是只会用systemctl restart。完整的链路是BIOS/UEFI初始化硬件→引导加载器GRUB2加载内核→内核解压并初始化→systemd作为1号进程启动→目标单元依赖的服务依次启动→进入multi-user.target或者graphical.target。面试官真正想听的是你对systemd和target的理解比如默认启动级别对应的target是哪个、怎么通过systemctl get-default查看、怎么在grub启动时进入emergency mode修复文件系统。我当时还在答案里补了一个实际案例某次服务器开机后卡在“A start job is running for /dev/sdb1”原因是分区挂载超时。排查方法是按CtrlD跳过或者直接进emergency模式用systemctl status查挂载单元检查/etc/fstab里是不是写了不存在的设备或错误的UUID。这类细节写在卷面上比单纯列出启动阶段要加分得多。2.3 日志、定时任务与安全审计试卷里还考了不少日志类的题目比如“/var/log目录下有哪些关键日志、各自记录什么”。这里不能只答messages和secure要结合安全厂商的业务特点/var/log/secure负责认证和sudo记录是排查暴力破解的核心文件/var/log/messages承载系统运行信息/var/log/cron记录计划任务攻击者拿到权限后很喜欢在里面留持久化任务。另外journalctl --since 1 hour ago这种查看方式也应该写出来因为很多新版本系统的日志已经由systemd-journald管理了。还有一道题是考察定时任务的写一条cron表达式让某个清理脚本每天凌晨3点执行并导出日志。标准答案是0 3 * * * /usr/local/bin/cleanup.sh /var/log/cleanup.log 21这里有个细节要提醒脚本路径必须写绝对路径而且最好先在命令行手动执行一遍确保没有语法错误。cron执行时的环境变量和登录shell不一样很多脚本在终端里跑没问题放进cron就报错多半是PATH缺失导致的。3. 网络与安全运维安全厂商的重头戏3.1 网络排查思路从现象到根因网络类的题目试卷3集中在“分析一个网络故障的可能原因并给出排查步骤”。这类题目看起来基础但最能区分一个人是背了命令还是真的有实战经验。举一道原题风格的例子“用户反馈某网站访问很慢curl查看耗时集中在连接阶段怎么排查”。如果只答“ping一下看延迟”显然不够。完整的排查链路是先用curl -o /dev/null -s -w %{time_namelookup} %{time_connect} %{time_starttransfer}分别拿到DNS解析耗时、TCP握手耗时、首字节传输耗时判断瓶颈在哪一段。如果time_connect偏高通过mtr或者traceroute看路径上哪一跳延迟异常如果本机到目标机器正常就要检查交换机端口丢包率、防火墙策略和负载均衡会话数。另一个必考点是TCP状态排查题目会给出netstat或ss的输出让你判断哪个状态异常。比如大量TIME_WAIT通常出现在短连接高并发的场景可以调整net.ipv4.tcp_tw_reuse和tcp_fin_timeout大量SYN_RECV则大概率是被SYN Flood攻击或者后端服务 backlog 太小需要结合安全设备看流量特征。只要在答案里体现出“状态→原因→对策”的三层结构分数就不会低。3.2 主机安全基线检查与加固实操试卷里有一道分值很高的简答题要求列举主机安全基线检查的常见项。这道题在安全公司属于日常技能如果答不出具体内容会非常减分。我的答题框架分五层第一层是账号与口令检查是否存在空密码账号、UID为0的非root用户、多余的系统账户还有/etc/shadow里密码过期策略和复杂度策略。第二层是服务与端口用ss -lntp盘点开放端口确认没有意外暴露的管理端口关闭不必要的服务比如没有业务使用的telnet、rlogin这些明文协议服务。第三层是SSH安全是否允许root直接登录、是否启用了密钥认证、PasswordAuthentication是否需要关闭、MaxAuthTries是否设置过小。第四层是文件权限检查/etc/passwd、/etc/shadow这些关键文件的权限确认重要二进制文件没有被替换。第五层是内核参数和日志net.ipv4.ip_forward是否被意外开启、sysctl.conf里有没有可疑配置、rsyslog和auditd是否正常运行。加固的操作其实不难但要注意顺序先备份配置再逐项修改每改一项就验证业务是否受影响。比如关闭SSH的root远程登录前一定要确认自己有其他管理通道否则一个误操作就把自己锁在门外了。3.3 应急响应与日志溯源的答题思路安全场景题最典型的考法是给出一个入侵事件的描述让你说明应急响应流程。试卷3的这道题描述是“某业务服务器CPU异常进程列表中发现可疑进程用户反馈数据库被删”。这种题没有标准答案只有合理不合理的区别。我的答题思路是六步第一步隔离把机器从业务流量中摘除保护现场注意不要急着重装系统因为后续还要取证。第二步取证先拷贝内存镜像和关键日志包括/var/log/secure、history、临时目录里的文件用lsof查看可疑进程打开了哪些文件。第三步定损和溯源查数据库是否有备份、数据是在什么时间点丢失的结合日志倒推攻击时间线。第四步清除杀掉可疑进程、清理定时任务、删除恶意文件但要在备份的前提下操作。第五步恢复用备份还原数据修复漏洞后重新上线。第六步复盘输出事件报告指出漏洞点和改进项。这类题的得分关键是体现“先保护证据、再恢复业务”的次序。很多没实际处理过事件的同学上来第一句就是重装系统这在安全团队眼里是减分的——你连攻击途径都没搞清楚重装之后可能还会被打进来。4. 自动化运维与容器现代运维的硬门槛4.1 Shell与Python脚本题的考点试卷3的编程类题目不是让现场写一个很复杂的程序而是考你能否用脚本解决实际运维问题。最经典的是“写一个脚本检查本机所有监听端口对应的进程并输出端口和PID”。这道题考察的是命令组合能力参考答案是#!/bin/bash ss -lntp | tail -n 2 | awk {print $4, $6} | while read line; do echo $line done真正的高分做法是往脚本里加判断比如端口异常时发邮件告警、把结果输出到一个固定日志文件、支持通过命令行参数指定端口。这样一道题就能看出一个人有没有写生产脚本的习惯。Python脚本场景题通常和日志分析挂钩比如“统计Nginx访问日志里每个IP的出现次数并按次数倒序输出”。核心实现就几行from collections import Counter with open(access.log) as f: ips [line.split()[0] for line in f] for ip, cnt in Counter(ips).most_common(10): print(ip, cnt)但很多人会漏掉日志格式问题——IP不一定都在第一列如果日志格式里有代理或者CDN字段需要先确认字段位置。这类细节恰恰是面试官想看到的。4.2 从kubelet到containerd的调用链路容器方面的题目跟着行业热点走重点考察Kubernetes运行时。有一道题问的是“Kubernetes是如何调用containerd创建容器的”这题在2020年问得不算多但近几年越来越高频必须把链路讲透。完整回答分四层第一层kubelet通过CRIContainer Runtime Interface这个接口与运行时通信默认走Unix Socket常见路径是/run/containerd/containerd.sock或/var/run/cri-dockerd.sock。第二层containerd内部有CRI Plugin负责把kubelet传来的CRI请求转换成containerd自己的API调用。第三层containerd调用containerd-shim进程shim再通过OCI Runtime默认是runc去创建和运行容器。第四层在创建Pod时kubelet会先通过CRI创建一个pause容器作为沙箱用来共享网络命名空间然后才是业务容器真正启动。这里要强调一个坑很多人把“containerd调用runc”和“Docker调用containerd”混为一谈。Docker默认的运行时是containerd不假但Kubernetes绕过Docker直接使用containerd时走的路径并不一样。特别是Kubernetes 1.24以后彻底移除了dockershim这个问题已经从“新趋势”变成了“基础常识”答不上来会被直接判低分。4.3 发布变更与容量评估场景题场景题里有一类需要你给出发布方案某核心服务要上线新版本你怎么保证平稳发布并且能快速回滚。这类题考察工程思维不涉及具体工具也能答。我一般答四步第一步提前做变更评审确认新版本的依赖、配置和数据库脚本都准备好。第二步采用灰度策略先把新版本发布到一台机器或一个Pod上观察监控指标比如错误率、延迟、CPU确认稳定后再扩大范围。在Kubernetes环境里可以直接调整Deployment的strategy参数strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1第三步观察期结束后全量发布但保留上一版镜像或二进制包。第四步回滚预案如果发布后10分钟内出现异常直接触发上一版本重新上线同时保留现场日志用于定位问题。答这道题的关键是用具体的数字说明你的“灰度方案”比如先放量5%、观察15分钟再放量到30%说清楚每一步的依据。5. 面试追问里的软技能与场景加试题5.1 高频追问线上故障你怎么处理笔试之后的面试环节有一道追问率极高的题“现在是半夜两点你负责的服务大量报错群里已经炸了你会按什么顺序处理”。这道题没有标准答案但答题逻辑一定要对。我的建议是分三层答第一层是止损先把故障范围控制住。如果确定是某次变更导致优先回滚如果不是变更导致考虑摘掉故障节点、切流到备用节点。第二层是定位保留现场收集当时的监控、日志、系统指标按应用层→系统层→网络层顺序排查。第三层是恢复和复盘业务恢复后24小时内必须输出事故报告说明根因、处理过程、改进项。这里最重要的原则是“先恢复业务再追查原因”哪怕是临时方案先顶上也要让用户先用起来。很多应届生会犯“非要找到根源才肯恢复”的毛病反而拖长了故障时间。5.2 互联网运维与国企运维的差异分析面试官偶尔会问你对不同行业运维岗位的理解这套卷子对应的岗位虽然是安全厂商但实际工作中会接触大量政企客户所以了解这两类环境的差异有实际意义。互联网运维追求的是效率和自动化工具链更新快Docker、K8s、CI/CD基本是标配故障响应强调分钟级国企或者传统行业的运维更重稳定和合规变更流程严格考核指标里“不出事”比“跑得快”重要技术栈相对保守。两者没有优劣之分但你要让对方知道你能适应哪种节奏。答这道题时我顺手提了一句“安全运维介于两者之间既要像互联网一样快速响应又要像传统行业一样严格遵守合规流程”这个角度在奇安信的面试里还挺加分的。5.3 运维手册和应急预案该怎么写还有一道笔试简答题问的是“一个完整的运维手册应该包含哪些内容”。这道题很多同学答不全因为平时没写过文档。我的框架拆成五块一是资产与拓扑包括服务器清单、网络拓扑、各系统之间的依赖关系二是日常操作包括巡检项、例行维护命令、常见任务的SOP三是变更记录每次变更的原因、时间、操作人、影响范围四是故障预案包括故障级别定义、应急联系人、联系方式和典型故障的处理步骤五是备份与恢复明确备份策略、备份位置和恢复演练的周期。写文档本身不难难的是维护更新。我实际工作的习惯是“变更后立即更新文档”而不是月底统一整理否则记不清细节。面试时可以举一个自己的例子比如曾通过手册里的备份恢复步骤在半小时内恢复了误删的数据库这种真实案例比说一百句“我做事细心”都有说服力。6. 常见失分点与备考路线建议6.1 这套卷子最容易被扣分的5个地方结合我自己做题和帮同学模拟面试的经验整理出五个高频失分点。第一个是只写出命令不写排查思路。比如问“如何定位CPU飙高”只写top就被动一定要把进程、线程、调用栈这条链路写完整。第二个是忽略安全视角。奇安信的卷子里任何系统管理问题都可能被追问安全维度比如“开放了哪些不必要的端口”“日志有没有可能被篡改”答题时要有意识地带一句安全措施。第三个是不懂容器运行时。到2020年容器已经普及如果还在说“K8s就是Docker管着的”这种话基本和Offer无缘。第四个是应急响应次序混乱把“查原因”放在“恢复业务”前面这在实际工作中是致命的。第五个是笔试时不注意时间分配场景题留白太多等于把送分题扔了。6.2 不同基础人群的备考建议如果你是刚接触运维的应届生我的建议是先系统过一遍Linux基础重点做命令练习和环境搭建然后按“网络→安全→容器→自动化”的顺序逐项攻破。不用追求一次把所有内容学完但每学一个模块都要自己在虚拟机里搭环境跑一遍比如自己搭一套K3s集群把kubelet调用containerd的链路亲手验证一次。如果你已经有一年左右的工作经验重点就不是背基础而是打磨场景题的表达方式。找几个朋友互相模拟面试把“你怎么排查XX故障”这类问题反复练到能一口气讲清楚。表达逻辑比技术细节更重要因为面试官判断的是你“遇到问题时会怎么思考”而不只是“知不知道某个命令”。6.3 值得长期积累的工具与视野备考过程中也别忘了积累工具意识。磁盘排查的iostat、iotop网络排查的mtr、tcpdump、ngrep进程排查的perf、strace这些工具的适用场景要了然于胸。容器生态里除了Kubernetes本身还要了解Helm、Prometheus、Grafana这类周边组件因为它们已经是生产环境的事实标准。另外运维这个岗位的边界这几年扩展得很快从传统机房到云原生从人工巡检到AIOps从服务器运维到数字孪生、智能运维系统。奇安信的运维方向尤其重视对安全产品体系的了解终端安全、主机安全、边界安全、源代码审计工具都是他们的业务版图。虽然2020年那会儿整条技术栈还没有现在这么复杂但当时能把这套卷子吃透的人放到今天依然是很有竞争力的运维工程师。这套试卷3对我来说最大的收获不是某个具体命令而是让我第一次建立了“运维稳定性安全性自动化”的完整认知。后面我不管是在互联网公司还是在安全厂商做运维遇到问题都会习惯性地追问一句这个操作会不会留下安全盲区这条排查路径够不够快这种思维习惯才是比任何考点都值钱的东西。如果你现在正在准备运维方向的面试建议把卷子里的每一类题都自己动手做一遍尤其不要跳过场景题——那才是真正拉开差距的地方。