十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

终端安全运维实战:奇安信天擎部署、排错与容器环境适配指南

终端安全运维实战:奇安信天擎部署、排错与容器环境适配指南 做了这几年一线运维手里管过几千台终端的终端安全管理系统也接过不少“奇安信天擎怎么卸载、强制退出要密码、版本装不上”之类的工单。今天想把这几年围绕奇安信终端安全产品的运维工作经验做个梳理从部署、策略、升级、排错到容器环境里怎么面对 containerd 这类运行时一次性讲清楚。这篇东西主要写给同样在一线扛事的运维工程师、安全运维同学也适合那些准备往安全运维方向转、想了解终端安全软件背后一套完整管理逻辑的人参考。先说一个基本判断很多运维同事一开始对天擎这类终端安全管理软件是有点抵触的觉得它“占资源、爱误报、卸载还麻烦”。但真正经历过几次安全事件之后大家会意识到这类软件本质上不是“杀毒软件”而是企业安全策略在终端上的执行器。它管的不只是病毒还有外设、补丁、漏洞、软件黑名单、网络接入合规。换句话说运维和天擎的关系不是“装好就不管”或者“想办法绕过”而是要把它当成资产管理的一个核心节点去运营。下面这些内容都是我在实际生产中逐步摸索出来的一套做法。1. 从2020年运维岗看终端安全运维的核心需求1.1 为什么运维工程师绕不开终端安全软件2020年前后是很多企业终端安全建设的一个分水岭。那段时间远程办公比例上升终端不再像以前那样只待在办公网内网而是分布在家庭网络、酒店网络、临时办公点等各种不可控环境里。终端一旦脱离企业边界原来依赖防火墙、入侵检测这类边界防护的手段就失效了安全能力必须下沉到每一台终端上。也就是这个背景下奇安信天擎这类终端安全管理系统开始大规模进入企业。从运维角度看这意味着工作内容发生了变化。以前我们关心的是“这台机器能不能上网、软件能不能装上、系统能不能激活”现在还得关心“这台终端是否在线、Agent是否正常上报、补丁打了没有、外设是否被违规使用、是否满足接入内网的安全基线”。这些状态统一由天擎控制台收集和展示。我在实际工作中总结了一个经验把天擎当成一个“终端资产的数字化底座”来用而不是把它当成一个孤立的安全软件。资产信息、软件列表、补丁状态、硬件变更这些数据天擎都在采集。运维日常最头疼的“盘点资产”其实可以借助它的资产报表功能快速实现。规划任何批量变更比如某个办公软件的灰度升级之前先看一眼天擎里的软件统计和终端分组再决定怎么分批推送能少踩很多坑。1.2 运维工程师需要掌握的技能矩阵很多刚入行的同事会问“运维工程师需要学什么”。我整理了一个相对务实的技能矩阵按优先级排列操作系统层面Windows、Linux尤其CentOS、Ubuntu、麒麟系系统服务、计划任务、日志、注册表、systemd、权限模型。网络基础TCP/IP、DNS、DHCP、HTTP/HTTPS、代理、端口连通性、抓包工具Wireshark、tcpdump。脚本能力Shell、Python。批量运维场景里这两样至少得会一样否则几百台终端根本管不过来。终端安全组件杀软/EDR/终端安全管理软件的Agent机制、端口、进程、服务、上报通道、日志位置。这是安全运维方向的核心竞争力。补丁与漏洞管理理解CVE/CNVD编号、补丁级别、漏洞扫描流程、灰度发布。容器与云原生基础Docker、Kubernetes、CRI、containerd、镜像仓库。现在越来越多的业务跑在容器里运维不懂运行时调度链排查问题很被动。ITIL/流程意识变更管理、事件管理、知识库沉淀。这个是软技能但决定你能在这个岗位走多远。有同事觉得技能点太多学不过来我的建议是“以场景为索引”去学。比如你被一个问题卡住了天擎客户端上报离线排查思路会迫着你去学端口、进程、日志、防火墙规则K8s节点上容器起不来会迫着你去学CRI调用链。把这些场景一个个吃透技能树自然就丰满了。上表列的顺序也是我实际工作中反复用到的频率排名。2. 奇安信天擎部署与变更管理的实践要点2.1 Agent安装与策略规划先分域再下发天擎部署通常分为控制中心服务端和终端Agent两部分。控制中心一般装在服务器上负责策略下发、日志汇聚、漏洞库分发Agent安装在员工电脑或服务器上执行具体的扫描和防护动作。我在做Agent批量部署时最深的体会是安装本身不难难的是策略规划。如果一开始就“全网一个策略”后期肯定要返工。正确做法是先分域按部门分行政、财务、研发、销售对安全要求不一样财务往往需要更严格的屏幕水印和外设管控研发需要编译工具链不被误杀。按环境分办公终端、测试服务器、生产服务器、对外业务服务器策略差异很大。生产服务器尤其要谨慎不能随意设置查杀动作否则可能把正在运行的服务依赖文件给隔离掉。按系统分Windows、Linux含信创环境要分开管理不同系统的Agent行为和可用策略不同。策略规划里几个关键项我列一下病毒查杀策略建议先设置“监控模式不自动处理”观察一段时间误报情况再逐步开启自动隔离。补丁管理策略先设“审批后安装”不要自动安装所有补丁。有一次某办公软件依赖一个老版本运行库系统补丁自动更新正好把那个运行库替换掉结果业务直接打不开报障电话被打爆。外设管理USB存储默认禁用或只读是比较稳妥的底线尤其是涉密和财务部门研发部门可以单独放行。卸载保护策略开启防卸载需要密码或控制台授权才能卸载。这就是很多员工遇到的“卸载要验证码/密码”的来源。2.2 升级与卸载的规范化操作不靠找密码靠流程关于“奇安信天擎卸载密码”“没密码怎么删除奇安信”“强制退出”这类高频问题我必须先说一个原则作为运维工程师不要去研究绕过卸载保护的方法也不要教普通员工去绕过安全策略。原因很简单企业部署终端安全管理软件是为了满足等保合规和安全防护要求用技术手段绕过它轻则扣绩效重则背负安全责任。真正应该掌握的是规范化操作流程。有几个正规途径供运维同事参考通过天擎控制台远程卸载在控制台找到目标终端下发“卸载Agent”指令只要终端在线且Agent正常就能远程卸载。通过控制台重置卸载密码如果管理员忘记了卸载密码可以在服务端重新生成或重置不依赖客户端本地的任何操作。通过安装包覆盖安装后清理如果Agent文件损坏导致卸载程序无法正常运行可以使用相同版本或更新版本的Agent安装包覆盖安装修复后再从控制台卸载。提交变更工单公司内部流程上任何终端安全软件的卸载都应走变更审批让安全团队知晓避免出现“某台机器没安全保护还一直连在内网”的监管空白。我遇到过最棘手的情况是一台终端的Agent服务已经停了控制台显示离线无法远程卸载本地卸载程序又被策略挡住了。这个时候正规且有效的做法是先通过控制台验证该终端的离线状态确认终端确实脱离管控再以管理员身份在本地停止相关服务、禁用开机启动项通过控制台重新下发安装任务。也就是说最关键的修复手段是“重装一遍Agent”而不是“强行删除”因为重装后终端会重新回到管控体系里后续操作包括卸载就有正规通道可走了。2.3 我在切换版本时踩过的坑版本升级是终端安全运维里容易踩坑的一环。我复盘自己经历过的几次升级事故总结出三个高频坑第一个坑旧版本Agent残留。尤其从某个老版本直接升到新版本时旧的服务或驱动没有完全卸载干净新版本安装到中途就会回滚控制台上终端状态表现为“升级失败”。处理办法是提前通过控制台下发“先卸载再安装”的任务或者在本地干净卸载后重启再安装新版本。这里要特别强调卸载后必须重启一次否则驱动文件被占用装新版本大概率还会出问题。第二个坑网络带宽和服务器压力。如果全网几千台终端同时升级天擎服务端的带宽和性能压力会很大而且容易抢占办公网带宽。我习惯的做法是先在测试组验证新版本兼容性然后按部门分批次下发比如周一财务和行政周二销售周三研发利用控制台的“分批升级”策略来控制并发。实测下来Office办公网高峰时段9:00-11:00尽量不要推升级任务否则打印机、视频会议类应用报卡顿的概率会明显上升。第三个坑杀毒软件之间的相互干扰。终端上如果装了两套安全软件比如天擎和另外一个杀软同时存在很容易出现资源占用异常、文件互杀、网络策略冲突等问题。标准的做法是在部署天擎前先卸载其他第三方杀毒软件或者使用控制台下发“检测并移除不兼容软件”的任务。Windows自带的Defender通常会被天擎接管并自动关闭但如果出现接管失败需要手动在组策略里禁用Defender的实时保护再重新执行天擎的修复操作。3. 服务端日常运维与离线环境实战3.1 漏洞扫描与资产盘点怎么落地天擎的漏洞管理模块是我日常用得最多的一个功能。它的核心逻辑是先做资产指纹识别——识别操作系统版本、已安装软件、开放端口再比对漏洞库生成该终端缺失的补丁或存在风险的配置项。实际落地的流程我一般是这样的更新漏洞库控制台每天定时从厂商漏洞库拉取最新数据。内网环境必须配置好代理或离线导入通道否则漏洞库一直是旧的扫描结果没有参考价值。建立扫描任务按IP段/终端分组创建周期扫描任务例如每周日凌晨对办公网全量扫描一次。扫描时间要错开业务高峰否则容易引起网络拥塞尤其注意不要和备份任务重叠。生成修复建议扫描完成后针对不同分组筛选“高危漏洞”和“必需补丁”生成修复任务。灰度修复先在测试机或IT部门自己的机器上安装验证补丁确认没有影响业务系统后再批量分发。跟踪复查修复任务完成后安排一次复查扫描确认漏洞确实已修复。漏报和假阳性要在这个阶段排查部分补丁需要重启才能生效复查前需要确认终端已完成重启。除了漏洞扫描资产盘点也是天擎的长处。我曾在一次等保检查前靠天擎资产报表在半小时内导出了全公司Windows和Linux终端清单包括IP、MAC、操作系统版本、安装软件列表、最近登录用户这在以前纯靠人工统计根本不敢想。日常维护中我也会定期用资产报表核对待报废终端和僵尸资产及时回收或清理。3.2 离线内网与信创环境的升级方案很多运维场景下终端所在网络是隔离网无法直接访问互联网天擎控制中心也部署在离线的内网环境里。这时候最核心的问题是病毒库、漏洞库、Agent安装包、补丁文件怎么更新。离线升级的路径一般是这样的在一台能访问互联网的“摆渡机”上下载升级包然后通过光盘或U盘等安全介质导入内网控制中心再由控制中心向各终端分发。这里有几点需要注意摆渡机的安全状态必须先确认确保升级包在摆渡过程中没有被篡改。校验文件哈希MD5/SHA256是必须做的不能省。尽量下载“全量升级包”而不是增量包。离线环境里如果目标终端版本跨度很大增量包可能无法匹配全量包能覆盖更多场景。NSA/等保环境一般要求升级过程可审计因此每次离线导入需要记录导入时间、包版本、导入人、校验值。信创环境比如银河麒麟系统下的适配是另一个高频场景。很多同事问“怎么从x64版本银河麒麟系统下载奇安信浏览器arm版本”“麒麟系统奇安信可信浏览器1.0.46181下载入口”。这里要解释一下同一款软件在面对不同CPU架构的操作系统时安装包是不同的。x64的包在aarch64ARM架构系统上装不了反过来也一样。拿到一台麒麟终端第一步不是下载安装包而是确认架构# 查看系统架构 uname -m # 如果输出 aarch64说明是ARM架构如果输出 x86_64说明是x64架构确认架构后再去官方支持渠道下载对应架构的安装包。类似地还有针对“统信UOS”这类操作系统的适配包也需要区分CPU架构。下载安装包时优先选择官方正版渠道不要图方便在非官方站点下载否则安全软件本身就可能被篡改。这种“下载后校验哈希”的习惯应该贯穿所有安装包管理流程。如果在麒麟系统上安装Agent或可信浏览器时出现依赖缺失通常用系统自带的包管理器安装依赖即可。例如在Debian系可以用apt-get install -f修复依赖关系在RPM系可以用yum install或dnf install自动解决依赖。实在不行去官方文档里查一下该版本对glibc、openssl这些系统库的最低要求再做针对性补齐。4. 容器编排场景Kubernetes如何调用containerd4.1 kubelet、CRI与containerd的三方关系现在越来越多的企业把业务跑到Kubernetes集群上很多原本做传统运维的同事开始接触容器最常问的一个问题就是Kubernetes到底是怎么把容器拉起来的containerd在里面扮演什么角色我用一个生活化的类比来解释Kubernetes的kubelet就像一个“餐厅领班”它负责接收客人的点单Pod的期望状态然后把菜单传给后厨containerd就是这个“后厨总管”它负责指挥切菜、炒菜、装盘而runc则是“具体炒菜的厨师”真正执行容器的创建、启动、停止这些底层动作。从技术上看kubelet并不是直接调用containerd的go API而是通过CRIContainer Runtime Interface容器运行时接口进行通信。CRI是Kubernetes定义的一套gRPC接口包含RuntimeService负责容器和Pod的生命周期管理和ImageService负责镜像管理。containerd通过内置的CRI插件实现了这套接口。调用路径大致是kubelet通过CRI gRPC请求containerd创建Pod沙箱sandbox。containerd收到请求后创建对应的命名空间、任务和shim进程。containerd-shim通常是containerd-shim-runc-v2负责拉起一个独立的runc进程。runc按照OCIOpen Container Initiative规范做namespace、cgroup等内核隔离操作真正把容器跑起来。为什么要这么分层因为每一层的职责都单一、可替换。Kubernetes不需要关心你用的是containerd还是其他CRI实现只要符合CRI规范就能对接containerd也不需要关心Kubernetes的具体业务逻辑它只负责管理容器生命周期runc更纯粹只做最底层的系统调用。这种分层解耦的架构是整个容器生态能够繁荣的核心原因。4.2 一次线上Pod创建过程的完整调用链下面我用一次正常的Pod创建过程把整个调用链串起来方便后面排查问题时按图索骥。用户执行kubectl run nginx --imagenginx:latest。API Server把Pod对象写入etcd并更新Pod状态为Pending。kubelet watch到本节点上有一个需要调度到本机的Pod开始进入Pod sync流程。kubelet调用CRI的RunPodSandbox接口Pod沙箱pause容器被创建这是整个Pod内所有容器共享网络栈和PID命名空间的基础。kubelet检查镜像是否存在如果不存在调用CRI的PullImage接口拉取镜像。containerd负责从镜像仓库下载、解压、挂载。镜像就绪后kubelet调用CreateContainer接口创建容器。containerd准备OCI运行时所需的环境rootfs、挂载、命名空间参数等然后通过containerd-shim启动runc。runc完成内核态的隔离和资源限制设置后启动容器进程。kubelet调用StartContainer接口启动容器CRI返回成功后Pod状态最终变为Running。整套流程中任何一个环节出了问题都会表现出不同的症状。比如Pod一直Pending可能是镜像拉不下来容器创建成功但启动失败可能是入口命令崩溃或权限不足节点NotReady可能是kubelet和containerd之间的CRI通信断了。排查的时候第一步就是确认当前节点使用的是哪个运行时# 查看kubelet启动参数中的运行时配置 ps aux | grep kubelet # 如果配置了containerd参数里会出现 --container-runtime-endpointunix:///run/containerd/containerd.sock # 或者 --container-runtimeremote 之类的参数我实际排查过程中最常用的三个工具是crictl、ctr和nerdctl。crictl是CRI兼容的命令行用来和kubelet视角对齐ctr是containerd自带命令能看到更多底层状态nerdctl是containerd的Docker兼容CLI用习惯docker的同事上手很快。# 查看节点上所有PodCRI视角 crictl pods # 查看所有容器 crictl ps -a # 查看容器日志 crictl logs container-id # 查看本地镜像 crictl images有一次线上环境Pod反复重启crictl ps看到容器状态是Exited用crictl logs查看日志发现应用依赖的配置文件没有挂载到容器里。这种问题如果不熟悉CRI排查链路可能会绕很久。4.3 containerd日志与问题排查要点containerd的问题排查有一个完整的套路。我从实际操作中总结出以下常用命令确认containerd服务是否正常运行systemctl status containerd如果服务挂了查日志journalctl -u containerd -n 200 --no-pager查看containerd配置CRI插件是否启用containerd config default | grep -A 10 plugins.cri查看当前containerd版本和插件加载情况ctr version ctr plugins list如果遇到镜像拉取失败先把镜像源和认证信息检查一遍ctr images pull --user 用户名:密码 registry.example.com/namespace/镜像名:tag如果runc启动容器失败看shim日志通常位于/var/log/pods/目录下或者用journalctl查kubelet的日志。在容器环境里终端安全软件的部署方式和传统物理机/虚拟机有区别。如果需要在容器节点上部署Agent建议优先选择DaemonSet方式部署保证节点级覆盖不要直接在容器镜像里装Agent因为容器重建后Agent就没了且镜像体积会变大。天擎目前也有容器集群的适配方案可以作为集群侧安全组件来管理。5. 常见问题与排查技巧实录5.1 天擎终端管理高频问题速查表把后台和工单系统里被问得最多的几个问题整理成了表格方便快速查阅。问题现象可能原因解决思路终端显示离线Agent服务异常/网络不通/主程序崩溃先ping天擎服务器再确认Agent服务是否运行重启服务或重装Agent卸载需要密码/验证码控制台开启了防卸载策略管理员从控制台下发卸载指令或重置卸载密码不要尝试绕过强制退出无反应Agent自我保护机制启用从控制台远程执行“禁用自我保护”再结束进程不要用任务管理器强行结束老版本升级到新版本失败旧版残留/驱动占用先干净卸载重启后再安装新版批量场景走控制台“先卸载再安装”杀毒误报业务程序特征库误判在控制台提交白名单申请业务程序路径加入信任区再通知安全团队评估麒麟系统装错CPU架构包下载了x64包却想在ARM架构上安装用uname -m确认架构重新下载对应aarch64或x86_64安装包Pod创建后一直Pending镜像拉取失败/运行时故障/资源不足依次排查crictl pods、crictl images、kubectl describe pod、node资源5.2 一份实用的处理流程遇到终端安全软件相关问题我通常按五步法处理能保证不遗漏关键信息第一步远程确认现场。通过天擎控制台查看终端的在线状态、Agent版本、最近上报时间通过远程协助工具或者运维工单里的截图了解用户看到的实际报错。第二步收集日志。天擎客户端日志在Windows下一般位于安装目录下的logs文件夹Linux下在/var/log/下对应Agent目录。需要找的日志包括Agent服务日志、升级日志、扫描日志。如果是网络问题还要抓包确认终端能否访问控制中心端口。第三步定位边界。判断是单台问题还是批量问题。单台问题优先查终端本身服务、残留、配置批量问题优先查服务端漏洞库更新、策略配置、网络带宽。第四步寻求服务支持。如果日志里看到了软件自身的异常堆栈及时联系厂商技术支持把控制台版本、Agent版本、日志打包一并提供。说清楚复现步骤和环境能大幅缩短排查时间。第五步记录并沉淀。每个问题的处理过程都写入知识库下次遇到类似问题直接检索解决方案。这是我个人强烈推荐的一个习惯长期积累下来运维团队处理工单的效率会明显提升。5.3 关于卸载与合规的边界前面说过“不要教员工绕过卸载保护”这里再展开说一下边界问题。很多员工觉得“这台电脑是我用的为什么装什么软件还要公司管”这种想法可以理解但从企业管理角度办公终端是公司资产工作机上安装的软件、启用的服务都要符合安全合规要求。终端安全管理软件的部署并不针对个人隐私而是为了防范整个内网的安全风险。运维工程师在这个问题上的正确姿态是一方面要通过正规渠道响应员工的卸载诉求比如确有业务原因需要临时关闭某些管控策略可以走申请流程另一方面要坚持底线不参与、不传播绕过安全软件的技术。这不仅是对公司负责也是对自己职业生涯的保护。从技术上讲绕过卸载保护的手段其实并不复杂但这类方法一旦流传开来被恶意利用后果非常严重。所以我在任何公开场合都不会分享具体操作。真正有价值的做法是把安全软件当成一个平台来运营让它的策略与业务实际相匹配。比如研发人员需要运行一些容易被误报的脚本工具那就帮他们在控制台配置好白名单而不是让他们想办法关掉安全软件。回归到运维基本功把每一步做扎实这几年的运维工作让我有一个很深的体会不管技术栈怎么变终端安全、容器编排、漏洞管理这些东西背后拼的都是基本功。会看日志、会抓包、会写脚本、会梳理调用链、会走流程这五件事做好了大部分问题都能在半小时内定位个大概方向。就拿“卸载天擎要密码”这个看起来很小的问题来说背后涉及的是策略规划、权限管理、变更流程、服务支持备案这一整套体系。把它当成一个“卸载难题”去解决是员工视角把它当成一次“终端安全治理”去解决才是运维视角。文章最后分享一个我个人的习惯每接手一套系统和工具第一件事不是急着操作而是花半小时梳理它的进程、端口、配置、日志、备份、升级通道形成一张“系统关系图”。这张图在你处理故障时会成为最可靠的导航地图。像Kubernetes调用containerd这个问题如果当初一开始就把kubelet、containerd、shim、runc这条调用链画出来之后排查容器问题会轻松非常多。希望这些经验对你有用。
返回列表