当前位置: 首页 > news >正文

【生产实践】内网YUM源中rpm包的替换与仓库升级实战

太长不看版本

  • 最近有这么一档子事,

安全经常扫到内网服务器有telnet安全漏洞,总是让重装服务器上telnet。每台单独上传rpm包装台费事,而且新服务器装的还是旧的,之后被扫到的还得重装。

  • 于是乎觉得从内网yum源服务器动手:
  1. 将新的telnet的rpm包上传的内网yum源服务器上替换掉之前的rpm包
  2. createrepo --update /var/www/html/repos/ 重建元数据索引

这样一来无论是旧的卸载重装,还是新服务安装的问题都可以用脚本跑一边就完事了。


在企业内网环境中,基于RHEL/CentOS的服务器通常依赖内网YUM源进行软件安装与升级。然而,部分系统自带的基础软件包(如telnet)可能存在已知安全漏洞,需要通过替换YUM源中的旧包并升级仓库元数据,实现全网范围内的安全合规。本文以生产环境中telnet包的替换为例,详细介绍操作流程与注意事项。

一、背景与目标

1.1 问题场景

内网YUM源的基础软件包源自RHEL 7.6官方镜像,其中telnet包(telnet-0.17-65.el7.x86_64.rpm)被安全扫描工具检测出存在CVE-202x-xxxx等漏洞。安全部门要求:

  • 替换内网YUM源中所有telnet相关旧包;
  • 确保新服务器通过内网YUM源安装的telnet为经过安全认证的新版本;
  • 不影响其他软件包的正常安装与依赖关系。

1.2 操作目标

  • 替换YUM源仓库中旧的telnet包为安全版本(如telnet-0.17-71.el7.x86_64.rpm,已通过安全认证);
  • 重建YUM仓库元数据,确保客户端能获取到最新包;
  • 验证替换后客户端安装的telnet版本为目标版本。

二、前期准备

2.1 环境说明

  • YUM源服务器:CentOS 7.6,内网IP:192.168.1.10,仓库路径:/var/www/html/repos/rhel7.6/x86_64/(通过HTTP服务提供,http://192.168.1.10/repos/rhel7.6/x86_64/);
  • 旧包信息telnet-0.17-65.el7.x86_64.rpm(存在漏洞);
  • 新包信息telnet-0.17-71.el7.x86_64.rpm(安全认证通过,需提前从Red Hat官方获取或内部编译);
  • 依赖工具createrepo(用于重建仓库元数据)、httpd(提供YUM源HTTP服务)。

2.2 风险规避

  1. 备份旧包与元数据
    # 备份旧的telnet包
    cp /var/www/html/repos/rhel7.6/x86_64/telnet-0.17-65.el7.x86_64.rpm /tmp/
    # 备份仓库元数据(repodata目录)
    cp -r /var/www/html/repos/rhel7.6/x86_64/repodata /tmp/repodata_bak/
    
  2. 测试环境验证:在非生产环境的测试YUM源中先执行替换流程,验证新包安装、依赖关系及功能正常后,再推广到生产环境。

三、操作步骤

3.1 定位并替换旧包

  1. 确认旧包位置
    内网YUM源的RPM包通常按系统版本和架构分类存放,telnet包路径为:

    /var/www/html/repos/rhel7.6/x86_64/telnet-0.17-65.el7.x86_64.rpm
    

    (可通过find /var/www/html/repos -name "telnet-*.rpm"全局搜索确认)

  2. 替换为新包
    将经过安全认证的新包telnet-0.17-71.el7.x86_64.rpm上传至上述目录,并删除旧包:

    # 上传新包(示例:从本地通过scp上传)
    scp telnet-0.17-71.el7.x86_64.rpm root@192.168.1.10:/var/www/html/repos/rhel7.6/x86_64/
    # 删除旧包
    rm -f /var/www/html/repos/rhel7.6/x86_64/telnet-0.17-65.el7.x86_64.rpm
    

3.2 重建YUM仓库元数据

YUM仓库通过repodata目录下的元数据文件(如repomd.xmlprimary.xml.gz)记录包信息,替换包后需更新元数据,否则客户端仍会读取旧信息。

  1. 安装createrepo工具(若未安装):

    yum install -y createrepo
    
  2. 更新仓库元数据
    使用createrepo --update仅更新变化的元数据(效率更高):

    createrepo --update /var/www/html/repos/rhel7.6/x86_64/
    
    • 若仓库首次构建或元数据变动较大,可直接重建(耗时较长):
      createrepo /var/www/html/repos/rhel7.6/x86_64/
      
  3. 验证元数据更新
    检查repodata目录下文件的修改时间,确认已更新:

    ls -l /var/www/html/repos/rhel7.6/x86_64/repodata/
    

3.3 清理YUM缓存(服务器与客户端)

  1. YUM源服务器本地清理

    yum clean all
    yum makecache  # 生成新的缓存
    
  2. 客户端清理(全网生效关键)
    通知各业务服务器执行缓存清理,确保获取新包信息:

    yum clean all && yum makecache
    

    (可通过批量管理工具如Ansible执行,避免逐台操作)

四、验证操作结果

4.1 验证YUM源包信息

在YUM源服务器或任意客户端执行以下命令,确认telnet最新版本已被识别:

yum info telnet
  • 预期输出:Version字段为0.17-71.el7From repo指向内网YUM源(http://192.168.1.10/repos/rhel7.6/x86_64/)。

4.2 验证新包安装

在一台未安装telnet的测试服务器上执行安装,检查版本:

yum install -y telnet
telnet -V  # 查看版本,确认显示为0.17-71.el7

4.3 安全扫描验证

通知安全部门对已安装新包的服务器进行二次扫描,确认漏洞已修复。

五、注意事项

  1. 包依赖兼容性
    新包需与RHEL 7.6系统兼容,避免因版本跳跃导致依赖缺失(可通过rpm -qpR telnet-0.17-71.el7.x86_64.rpm检查依赖,确保内网源中存在对应依赖包)。

  2. 仓库权限与SELINUX

    • 确保新包权限为644chmod 644 /var/www/html/repos/rhel7.6/x86_64/telnet-0.17-71.el7.x86_64.rpm);
    • 若启用SELINUX,需确认HTTP服务对仓库目录有访问权限:
      chcon -R -t httpd_sys_content_t /var/www/html/repos/
      
  3. 批量更新旧服务器
    对于已安装旧版telnet的服务器,需执行yum update -y telnet升级,可通过Ansible批量操作:

    # Ansible playbook示例
    - hosts: alltasks:- name: 升级telnet至最新版yum:name: telnetstate: latest
    
  4. 操作时间窗口
    选择业务低峰期执行,避免仓库元数据重建或客户端缓存清理影响正常软件安装。

六、总结

通过替换内网YUM源中的telnet旧包、重建仓库元数据并清理缓存,可实现全网范围内telnet版本的统一升级,满足安全合规要求。核心在于确保包替换的准确性、元数据更新的完整性,以及客户端缓存的有效清理。该方法同样适用于其他存在漏洞的基础软件包(如openssh、curl等)的批量替换,是企业内网安全治理的重要实践手段。

http://www.dtcms.com/a/333567.html

相关文章:

  • 应用侧华为云LoTDA设备接入平台
  • 2025二建成绩公布!各地合格标准汇总!
  • 通俗易懂:Vue3的ref()运行机理
  • Windows Server存储智能数据校验
  • AMQP协议介绍
  • 【进阶】Java技术栈八股文学习资料整理
  • 优化网络ROI:专线复用,上云出网一“线”牵!
  • 力扣top100(day04-04)--栈
  • 从“写代码”到“定义需求”:AI编程工具如何重构软件开发的核心流程?
  • 深度学习-卷积神经网络-ResNet 残差网络
  • 永磁同步电机控制 第二篇、电机的分类
  • 支持向量机的原理和案例解析
  • Sklearn 机器学习 手写数字识别 使用K近邻算法做分类
  • Android Studio
  • IO流-转换流
  • MySQL的分析查询语句(EXPLAIN):
  • stream流debug
  • 华硕主板怎样调整风扇转速
  • Redis高级优化实战:从键值设计到集群调优
  • [HDCTF 2023]Normal_Rsa(revenge)
  • 晶振电路的负载电容、电阻参数设计
  • 重新定义城市探索!如何用“城市向导”解锁旅行新体验?
  • PID控制算法
  • Pytest 插件使用指南:让你的测试更高效
  • 中级统计师-会计学基础知识-第一章 账户与复试记账
  • @PreAuthorize(“hasPermission(#resourceId, ‘DATA_ASSET‘, ‘read‘)“)无法识别参数
  • 机器学习案例——《红楼梦》文本分析与关键词提取
  • C语言第八章指针五
  • 国内著名AI搜索优化专家孟庆涛发表《AI搜索内容可信度评估综合指南》
  • AI智能体在软件测试中的应用与未来趋势