CentOS 6官方已停止更新,现网暴露漏洞如何手动修复
机器还在跑,官方却早把大门锁死。CentOS 6的yum源早已清空,官方补丁通道关闭,扫描报告里却天天蹦出OpenSSL、Sudo、Polkit一堆高危号。想升级没源,想替换系统又怕业务翻车,只能硬着头皮手动补洞。下面把我自己踩过的坑、验证过的招,一条不落写清楚,照着做,至少能把现网漏洞压到“可接受”范围。

先搞清楚:到底哪些洞最常被扫
外网扫描器最爱盯的,是能直接拿到root的洞。CentOS 6常见三件套:OpenSSL心脏出血类(CVE-2016-2107等)、Sudo堆溢出(CVE-2021-3156)、Polkit pkexec(CVE-2021-4034)。把这三样修好,90%的告警能消停。其余像NTP、Samba、内核本地提权,优先级往后放。
备份是底线,别嫌啰嗦
先给系统盘打快照,没条件快照就把/etc、/boot、/usr/bin、/usr/lib64打包到外挂盘。再建个测试机,同版本同内核,所有rpm操作先在测试机走一遍,确认不报错再动生产。记住:手抖敲错一个回车,比漏洞更致命。
给yum找条活路:本地仓库
官方源没了,但vault.centos.org还留着旧rpm。挑一台能联网的跳板机,用rsync把6.10/os、6.10/updates、6.10/extras全同步下来,大概30 GB。回内网搭nginx,写个简单autoindex,把本地repo指向这台机器。baseurl写http://内网IP/centos/6.10/os/x86_64,gpgcheck=0,先解决依赖问题,后面才能放心装补丁包。

OpenSSL手动升版:三步搞定
1) 去vault里搜openssl-1.0.1e-57.el6.x86_64.rpm及以上版本,连带openssl-libs、openssl-devel一起下。
2) rpm -Uvh --replacepkgs openssl*.rpm,如果提示libc.so冲突,加--nodeps强制,装完立刻ldconfig刷新。
3) 跑openssl version -a,确认build date是补丁日期;再跑python脚本复现心脏出血,返回空值才算堵死。
Sudo本地提权:别迷信backport
CentOS 6自带的sudo-1.8.6p3-29.el6根本没人再维护。直接去sudo官网下1.9.14p2源码,编译前把--with-secure-path、--with-env-editor打开,make && make install,装到/usr/local/bin/sudo。旧sudo别急着删,先ln -sf /usr/local/bin/sudo /usr/bin/sudo,再visudo把Defaults secure_path写死。测试普通用户sudoedit -s /,若返回usage,说明堆溢出已修。

Polkit pkexec:最省事的是替换
polkit-0.96-11.el6的pkexec漏洞影响面太广,源码回编太折腾。直接找更高版本rpm,比如polkit-0.112-26.el6,从vault同步后rpm -Uvh --nodeps。装完chmod 4755 /usr/bin/pkexec,再写个测试脚本,普通用户执行pkexec --version,如果不再弹“段错误”,就过关。
内核本地提权:能关就关
CentOS 6最新内核停在2.6.32-754.el6,dirty cow、mutagen、sudo-kernel一系列洞都靠它。业务如果不需要用户本地登录,直接给grub加user=abc password=123,禁止单用户模式;再把/proc/sys/kernel/kptrrestrict改成2,dmesgrestrict改成1,普通用户拿不到内核地址,90%本地exp直接废。
防火墙二次加固:把扫描挡在门外
iptables规则别只写22、80、443。把INPUT默认策略DROP,先放行已建立连接,再开业务端口,其余全拒绝。扫描器连不进来,就算有0day也打不穿。写个简单脚本,把当天auth.log里爆破IP一次性拉黑,跑crontab每10分钟执行一次,比fail2ban省内存。
业务层兜底:非root用户跑服务
nginx、tomcat、mysql统统建独立用户,目录权限750,日志统一丢到/data/logs,再用logrotate按日切割。真被提权,也卡在普通用户层,拿不到root,后面应急响应时间就多出几小时。
补丁验证:别只看版本号
版本号会骗人,backport号才是真的。用rpm -q --changelog openssl | grep CVE,能看到官方到底补了哪几行。再跑github上的poc脚本,能复现算失败,直接exit 0才算成功。把验证过程录屏,写进运维wiki,后面审计能省一堆口水。
长期方案:给出路
手动补洞只能续命,不能永生。业务如果能容器化,把CentOS 6装进docker,主机换Alma 8或Rocky 9,网络层只暴露容器端口,旧系统逻辑零改动。不能容器就整机P2V,装Proxmox VE,老系统变虚拟机,外面再包一层新系统防火墙。迁移窗口选业务低峰,rsync + 停库十分钟就能切完。
CentOS 6已经没人再替你兜底,漏洞报告不会因为你“没办法”就放过你。把上面每一步踩实,至少能让扫描器闭嘴,给老板一份“已处置”报告,也给自己争取几个月喘息。记住:系统可以老,思路不能旧。手动修完立刻写操作日志,下次换人不抓瞎。
