奇安信运维工程师笔试复盘:安全厂商的运维考什么?
2020年秋招我投的是奇安信运维工程师。说实话点开笔试链接之前我心里对这家公司的试卷是有预期的——毕竟是安全公司考的大概率是渗透、Web漏洞、攻防那一套。结果题目刷下来才发现自己只猜对了一半卷子确实安全味儿很足但落点全在运维日常真正会踩到的场景里。这份试卷1过去好几年了每年秋招都有人翻出来讨论我把当时整理的考点分布和复盘思路重新梳理一遍给准备投安全厂商运维岗、或者想了解政企运维笔试风格的朋友做个参考。1. 这份试卷的出题逻辑安全厂商的运维笔试考的是守住底线的运维1.1 先搞清楚奇安信的运维岗是干嘛的奇安信做的是政企安全生意客户集中在政府、金融、运营商、能源和大型央企。这类客户对业务连续性、等保合规、日志审计的要求极高运维工程师不是单纯待在机房里盯着服务器而是要跟安全团队协同做安全加固、漏洞修复、应急响应。笔试的出题人明显想把这种人筛出来能搞定Linux和网络只是底线能站在安全视角看待系统配置才是加分项。所以你在做这份卷子时会发现一个特点很多题表面考的是命令和原理骨子里考的是安全意识和应急能力。比如如何防止暴力破解SSH这类题常规运维可能答到fail2ban就停了但安全厂商希望你接着说出密钥认证、禁用root登录、限制来源IP、修改默认端口、配置sudo白名单一整条链路。这种底线思维是整份试卷的灵魂。1.2 回忆整理版题型结构与分值分布这里先说明一下这份试卷的完整原版现在已经不太好找了以下结构是根据当年参加过笔试的同学反馈和我自己的备考复盘整理的考点框架不是官方原卷。但题型分布和考察方向是可靠的对准备同类岗位的朋友很有参考价值。题块题型题量分值占比核心考察点Linux系统基础选择题填空题15题20%文件权限、链接、启动流程、文本处理网络基础选择题简答题10题20%TCP/IP、DNS、HTTP、负载均衡数据库与中间件选择题简答题8题15%MySQL主从复制、索引、Redis、Nginx脚本与自动化手写题4题20%Shell脚本、排查脚本、批处理场景安全运维选择题场景题8题15%iptables、日志审计、暴力破解、基线加固容器与云原生选择题简答题5题10%Docker、Kubernetes调用链2. Linux与系统基础送分题也是拉分题2.1 文件权限与链接年年必考错的人年年都有Linux基础题里最典型的是一道权限综合题给一个文件权限位问你某个用户能不能读、能不能执行。表面上考的是rwx数字换算实际还嵌入了属主、属组、其他用户的区分逻辑。比如-rw-r--r--属主可读写、属组可读、其他人可读如果改成-rwsr-xr-x多出来的s就是setuid位意味着执行该文件时进程会临时获得文件属主的权限。很多人在选择题里栽在这——命令背得熟但特殊权限位理解得模棱两可。这类题想拿稳要记住三件事基本权限r4w2x1数字相加即可chmod 755等于属主rwx、属组rx、其他人rx。特殊权限setuid用4表示setgid用2表示sticky bit用1表示。chmod 4755给可执行文件加setuidchmod 1777是/tmp目录的典型权限。sticky bit的作用在/tmp这类目录里所有用户都能创建文件但只有文件所有者或root能删除别人的文件。这个特性在安全场景里很关键曾经就有攻击者利用/tmp目录权限配置不当在共享目录里放恶意文件诱导其他用户执行。软链接和硬链接也出现过辨析题。核心区别不用死记抓住inode这个概念就行硬链接是同一个inode的多个目录项不能跨文件系统、不能链接目录软链接是独立的文件保存的是目标路径目标删了它就失效。笔试现场如果迷糊了就想一下ln和ln -s制造出来的东西本质差别在哪。2.2 启动流程与systemd别只会systemctl start面试官不会直接问你请说一下Linux启动过程这种开放题而是会把它拆成选择题GRUB2、内核、systemd、用户态服务的启动顺序是什么systemctl enable和systemctl start的区别是什么。第一题是送分题第二题很多人反而容易答错。enable是把服务单元加入开机启动依赖start是立即启动当前服务。有些服务脚本写得不好在enable的时候就会自动start一次导致初始化顺序错乱这在真实生产环境里踩过的人不少。安全厂商的卷子里还会跟一句如果某个服务只想对特定IP开放你该怎么设计systemd单元或配置防火墙这就是把systemd、网络监听和iptables串起来考了。另外我记得卷子里有一道判断题systemctl disable是不是等于停止服务答案是否定的。disable只是把开机自启的软链接去掉服务当前还在跑。很多新人在清理服务器僵尸服务时以为disable就算停掉了结果服务还在监听端口这在安全审计里是很严重的疏漏。笔试题这么一设计其实就是提醒你运维的每一个操作都要想清楚对当前状态和开机状态分别有什么影响。2.3 文本三剑客grep、sed、awk决定你的操作效率奇安信的卷子对命令行的考察不是背参数而是给你一个日志文件路径要求统计某个状态的请求数量、找出访问量最大的Top 10 IP、把配置文件里的某个IP批量替换掉。这三道题对应的恰好就是grep、awk、sed的经典用法。我整理了几个当年高频写法# 统计nginx日志中状态码为502的请求数 grep 502 access.log | wc -l # 统计访问量Top 10的IP awk {print $1} access.log | sort | uniq -c | sort -rn | head -10 # 批量替换配置文件里的旧IP sed -i s/192.168.1.10/192.168.1.11/g /etc/nginx/nginx.conf # 查找修改时间超过7天的日志文件并删除 find /var/log/nginx -name *.log -mtime 7 -delete通过awk管道组合一个问题可以延伸出无数个变体。我自己刷题时的体会是不要只看命令参数要理解sort -rn是按数值倒序、uniq -c是先给相邻重复行计数、find的-mtime是按24小时为单位计算修改时间。这些细节面试官一问一个准。3. 网络与安全从三次握手到入侵排查3.1 基础网络题怎么答才不丢分网络基础题是传统运维笔试的保留项目奇安信也不例外。TCP三次握手为什么不是两次、四次挥手里TIME_WAIT是怎么回事、DNS递归查询和迭代查询的区别这三道题几乎是必考的。三次握手为什么不是两次标准答案是防止历史重复连接请求造成资源浪费。你可以这么理解客户端发了一个SYN因为网络延迟没到它以为丢了就重发了一个结果第一个SYN在服务端存活期间又到了。如果是两次握手服务端直接分配连接资源客户端却认为这个连接已经废弃资源就白白耗在那里了。三次握手让双方都能确认对方的收发能力也能在这种极端场景下暴露并取消重复连接。TIME_WAIT这道题很多新人只知道出现在主动关闭连接的一端就停了。卷子会追问如果服务器上TIME_WAIT过多怎么处理至少要想出三个方向调整内核参数net.ipv4.tcp_tw_reuse只在客户端场景生效服务端不建议、缩短tcp_fin_timeout、排查业务层是否存在频繁短连接。如果面试官再深挖就到了连接池和HTTP keep-alive的层面。DNS递归查询和迭代查询的区分答题时可以抓两个关键词递归是帮你问到底迭代是告诉你下一步问谁。客户端向本地DNS服务器发起的是递归查询本地DNS服务器向根服务器、顶级域服务器、权威服务器发起的是一级一级往下问的迭代查询。笔试里如果给你一张图让你判断哪个是递归哪个是迭代按这个思路拆就行。3.2 安全特色考点iptables、暴力破解与日志分析前面那些网络题属于通用内容下面这类题才是奇安信卷子的重点。我印象很深的一道简答题服务器SSH端口被暴力破解如何在不关闭服务的前提下缓解攻击常规思路是改端口、禁root、上fail2ban但这道题要求现场写iptables规则或者至少描述清楚iptables的配置思路。# 只允许内网IP访问SSH iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0/8 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP # 封禁某个扫描来源IP iptables -A INPUT -s 1.2.3.4 -j DROP # 限制并发连接数防止端口扫描和DoS iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j REJECT写iptables规则时有一条关键注意点规则顺序就是匹配顺序ACCEPT要放在DROP前面否则先DROP就把所有都挡掉了。这个细节我在真实环境里踩过也在试卷答题时特意标注了属于阅卷老师想看到的实战敏感度。日志分析是另一个拉分点。给一段/var/log/secure的日志让你统计同一IP在短时间内尝试登录失败的次数并判断是否构成暴力破解。这道题本质是awk的用法但答题时要把攻击判定依据说清楚单位时间失败次数阈值、是否包含root用户、成功与失败的比例。安全厂商的运维不是被动地等告警而是要学会主动从日志里发现异常。4. 数据库与中间件运维的吃饭家伙笔试题绕不开4.1 MySQL主从复制与索引答清楚原理就能拿分MySQL是运维笔试题里的重头戏。我当时遇到的题目有两类一类是概念选择比如binlog三种格式的区别另一类是场景设计比如线上一条慢查询怎么定位和优化。先讲主从复制原理。它不复杂但要能按顺序说清楚主库写操作产生binlog主库的dump线程把binlog推给从库IO线程从库IO线程写到relay log从库SQL线程回放relay log完成数据变更。笔试卷子里如果让你画这个链路用文字描述也可以漏掉dump线程或relay log中的任何一个都会扣分。binlog的statement、row、mixed三种格式重点掌握区别statement记录SQL语句日志小但某些场景如使用now函数会导致主从数据不一致row记录具体行变化最安全但日志量暴增mixed是折中方案。生产环境现在主流推荐row格式尤其是开启binlog做数据恢复的场景row格式能精确恢复误删的数据。索引优化题当年是这样出的给一条SQL问为什么明明建了索引还是慢。答案往往落在几个经典坑里——对索引列使用了函数、like %xxx前置通配符、隐式类型转换、多个条件不符合最左前缀原则、or条件中某个列没有索引。我在复盘时把这条整理成一份检查清单面试时直接背这个清单就能应对大部分衍生问题。4.2 Redis、Nginx与消息队列的常考方向Redis在奇安信试卷里考得比较有层次。选择题会问持久化方式的区别RDB是定期快照文件紧凑恢复快但可能丢失最后一次快照之后的数据AOF是追加写日志数据更完整但文件大、恢复慢。场景题会问缓存穿透、缓存击穿、缓存雪崩分别是怎么回事怎么解决。这三个概念虽然挂在嘴边但很多人容易混淆。我的记忆方法穿透查一个不存在的key每次都要去查数据库不返回空解决方案是布隆过滤器或缓存空值。击穿某个热点key刚好过期大量请求同时打到数据库解决方案是互斥锁或逻辑过期。雪崩大量key在同一时间过期导致数据库被压垮解决方案是过期时间加随机值避免集中失效。Nginx考察的重点是负载均衡策略轮询、权重、ip_hash、least_conn。要能说出各自的适用场景ip_hash适合需要会话保持的服务least_conn适合长请求分布不均的场景。消息队列的题则相对基础问生产者和消费者的作用、如何保证消息不丢大概到能说清生产者确认机制和消费者手动ACK这个程度就行。5. 云原生题目开始冒头Docker之后就是Kubernetes5.1 Docker镜像与容器的关系要从层去理解2020年容器已经是面试常规项了奇安信试卷里Docker占了一小部分分值题目不刁钻但问得很本质。比如镜像和容器的区别如果你只回答镜像是模板容器是运行实例能拿基础分但拿不了高分。更好的答案是镜像是由多层只读层组成的容器运行时在镜像之上加一个可写层删除容器只是删掉了这个可写层镜像本身不变。Dockerfile的指令也是选择题高频考点。CMD和ENTRYPOINT的区别、COPY和ADD的差异是必问的点。简单说ENTRYPOINT定义了容器启动后的主进程CMD提供默认参数且可以被docker run后面的命令覆盖ADD比COPY多了自动解压和远程URL下载功能但实际生产环境不建议用ADD的远程下载功能因为它增加了构建过程的不确定性。5.2 Kubernetes如何调用containerd把底层链路讲明白这个知识点放在2020年的运维笔试卷里显得有点超前但今天回头看正好卡在行业从Docker向containerd迁移的节点上。当年可能只是加分题现在已经是主流面试题了。完整调用链是这样的kubelet监听API Server下发的Pod调度结果发现节点上有新的Pod需要创建就会通过CRIContainer Runtime Interface调用容器运行时。kubelet默认连接的是unix:///run/containerd/containerd.sock这个gRPC端点containerd收到请求后为每个容器启动一个containerd-shim进程shim再调用runc去创建真正的容器。runc是遵循OCI规范的低层运行时它负责利用Linux内核的namespace和cgroup为进程隔离出独立的视图和资源限制。所以整条链路的本质是kubelet编排系统→ containerd高层运行时→ containerd-shim容器进程守护→ runc低层运行时→ 操作系统内核。答这道题有个加分的细节说明containerd-shim的作用。它把containerd和runc容器进程解耦使得containerd即使重启也不会影响已经在运行的容器。这就是为什么Pod里的容器可以在containerd升级时保持不中断。如果能把这一层讲出来阅卷人会知道你不仅知道调用关系还理解每个组件存在的原因。6. 场景题与手写脚本最容易拉开差距的两道分水岭6.1 故障排查题考的是排查路径不是最终结论场景题在笔试里占的比重不大但拉分效果最明显。它不给你标准操作步骤而是描述一个线上故障现场让你写出排查思路。典型的一题是服务器CPU飙到100%怎么定位原因很多人上来就答重启服务器这在笔试里是大忌。正确的排查思路应该是一层一层往下剥# 第一步看进程级别找到CPU占用最高的进程PID top -c # 第二步看这个进程里的线程确认是哪个线程在拼命消耗CPU top -Hp PID # 第三步把线程PID转成十六进制方便查看线程栈 printf 0x%x\n TID # 第四步如果是Java应用用jstack导出线程快照搜索对应十六进制线程号 jstack PID /tmp/thread_dump.txt每一步都有明确的目的先定位进程再定位线程最后定位到具体的代码调用栈。如果一开始就重启可能暂时恢复了但下一次故障会以同样的方式再来——而且你把定位问题的现场证据全丢了。这类题考察的就是你面对未知问题时的冷静程度和逻辑链条。另一道经典题是磁盘空间满了但du -sh /看到的占用却不匹配怎么排查。新人常犯的错误是只盯着df -h看忘了还有两种情况一是inode耗尽df -i能看到二是某个文件被进程删除但未释放文件句柄还开着需要用lsof | grep deleted把这些进程找出来重启或者优雅重载对应服务才能释放空间。6.2 手写脚本能跑通只是及格工程习惯才能拿高分手写Shell脚本在卷子里占了20%的分值这个比重说明奇安信对运维的自动化能力是有硬指标的。题目不绕弯典型的如写一个脚本每天检查所有分区磁盘使用率超过80%时输出告警。一个能拿高分的答案不只是把逻辑写对还要体现工程习惯#!/bin/bash # Author: ops # Description: check disk usage and send alert # Usage: ./check_disk.sh THRESHOLD80 MAIL_TOopsexample.com df -P | awk NR1 {gsub(%,,$5); if($5 80) print $0} /tmp/disk_alert.txt if [ -s /tmp/disk_alert.txt ]; then echo Disk usage alert: $(date %Y-%m-%d %H:%M:%S) /tmp/disk_alert_body.txt cat /tmp/disk_alert.txt /tmp/disk_alert_body.txt mail -s [Alert] High Disk Usage $MAIL_TO /tmp/disk_alert_body.txt exit 1 else exit 0 fi这个脚本里值得说的几个细节NR1跳过标题行gsub去掉百分号方便比较if [ -s file ]判断告警文件非空才发邮件脚本结束时根据告警状态返回不同退出码方便接入监控平台。哪怕不全写对把这些考虑写进注释或答案说明里阅卷人也会觉得你是有真实运维经验的人而不是培训班速成的。7. 回头看安全厂商运维岗的备考还可以补这几课7.1 安全基础不能只懂皮毛我复盘这份试卷时最大的感受是安全厂商的运维笔试本质上不是考你会不会背命令而是考你有没有安全这根弦。OWASP Top 10、等保合规、安全基线、日志审计这些概念就算考得不深也大概率会在选择题或简答题里碰到。建议备考时把如何配置一台符合安全基线的Linux服务器作为主线项目练一遍禁用多余用户、限制sudo权限、设置密码策略、关闭无用端口、配置日志轮转、启用远程日志收集。这一套做完安全相关的笔试题基本都能覆盖。7.2 国产化系统是隐藏加分项2020年前后信创开始起步奇安信大量政企客户都在做国产化替代麒麟、UOS这类系统的运维需求快速增长。笔试如果提到国产化相关的概念不需要你精通但至少要知道银河麒麟和UOS都基于Linux内核常用命令与CentOS基本一致但包管理、目录结构、服务管理可能存在差异。比如麒麟系列的系统更新命令可能对应yumUOS对应apt这会影响你在实际环境里的操作思路。能说出这些差异说明你对行业趋势有感知这在面试沟通里非常加分。7.3 把答案练成肌肉记忆刷这份试卷给我最大的教训是很多题看着眼熟但真要你在半小时内白纸黑字写出来手会跟不上脑子。尤其是指令拼接、故障排查路径、脚本填空这三种题型不亲手敲几遍考试时就是会卡壳。我的做法是在本地用虚拟机搭了一个模拟环境把CPU飙升、磁盘满、进程假死、非法登录这四类故障各演练了两遍每个动作都做到不用想就能敲出来。等到面试官追问我细节的时候这些肌肉记忆帮了大忙。回头看奇安信这份试卷虽然没有特别偏难怪的题目但它把运维的日常和安全的底线拧在了一起。如果你现在也在准备类似的政企安全厂商运维岗我的建议是先别急着刷题把Linux基础、网络、数据库、容器这四块搭成自己的知识树再往每个枝桠上填安全视角的细节最后用故障场景去验证。这样搭起来的知识体系应付笔试够用面试也能聊得有深度。