V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaozhu317
V2EX  ›  程序员

我把生产服务器干烂的后续

  •  
  •   xiaozhu317 · 20 天前 · 5773 次点击

    我把生产服务器干烂的后续

    之前的情况请移步: https://www.v2ex.com/t/1059898#reply74

    • 感谢:这里首先感谢一下 V 友大佬们的宝贵建议,在整理了大家的建议后,我成功升级了 9 个生产服务器的 OpenSSH 的版本。

    • 背景:领导要求升级服务器 OpenSSH 版本,其实本人并不是专职运维,只是一名开发,但无奈部门的运维离职梭哈考公,并且领导要求这个漏洞要求尽快修复,我只能是自己研究如何升级 OpenSSH 了。

    • 准备

      • 大量搜索资料。

      • 自己为了模拟服务器的环境,或者说测试升级步骤的是否通用,用 Docker 容器、WSL2 、自己的华为云服务器、虚拟机装的(Ubuntu 、CentOS 、RedHat),甚至把自己笔记本装的 ArchLinux 也用上了,庆幸的是,测试的结果都是升级成功了。

    • 注意的点

      • 自己模拟一下 PROD 服务器的环境,测试一下(基础软件的版本也要一致)。

      • 升级之前和同事打声招呼一下,可能同事写的脚本会因为升级 SSH 而出现小问题。

      • 备份好 SSH 和 SSH 的配置,还有升级中使用到的其他库/软件尽量也备份。

      • 多开启几个 SSH 连接,一个坏了有可能另一个还是可以连上的。

      • 提前安装好 telnet ,多开几个 telnet 连接,防止 SSH 升级失败,无法远程连接。

      • 升级之前查一下这个服务器的 gcc 等基础软件的版本,尽量和你升级成功案例基础软件的版本一致,升级完成之后,再把 gcc 等软件切换回之前的版本,防止有其他影响。

      • 手动安装一些 rpm 的时候,慎用--nodeps 强装。

      • 升级之后如果稳定连接了一段时间后,可以删除掉 telnet 了。

    • 复盘 / 感慨 / 忧虑

      • 9 个服务器ssh -V 输出我想要的版本的时候,是我本科毕业工作这三个月以来最有成就感的事情。
      • 其实复盘上次升级失败的经历,是自己没有研究明白升级 SSH 的步骤,就盲目的去升级,太想当然了。
      • 高兴之余我不确定自己本次的升级之旅是否是侥幸成功,或许我只是碰巧成功了吧。
      • 再次感谢 V 友们提供的宝贵建议。
    40 条回复    2024-09-28 07:55:03 +08:00
    NxxRngjnbgj
        1
    NxxRngjnbgj  
       20 天前
    建议编译源码,很简单,arm 平台就交叉编译,我们升级把原来默认的停掉,备份/etc/ssh(看操作系统,基本都是这个)目录下的所有文件,自己写个 service 文件关联编译的二进制文件,然后扔到 systemd 下,然后以 sshd1234567(根据 service 服务名来)启动,结束,但是你以为这是最简单的么,有个项目领导来了一句:把服务停了就行,扫完再打开。我的评价是:6🤣
    gesse
        2
    gesse  
       20 天前
    可以先开 telnet 登录,然后用 telnet 登录上去搞,

    成功了再关掉 telnet 。
    pexcn
        3
    pexcn  
       20 天前
    liaohongxing
        4
    liaohongxing  
       20 天前
    尽量选用有维护的系统,比如 ubuntu server lts , debian 等等,这种漏洞就一个 sudo apt update && sudo apt upgrade 的事情,自己编译,破坏二进制路径/文件不说,生产中还容易失联断网 。用自带的包管理升级吧
    Dlin
        5
    Dlin  
       20 天前
    学到了:操作生产服务器要小心行事儿
    zhywang
        6
    zhywang  
       20 天前
    赞,作为一个毕业才三个月的新人,楼主的执行力和自省力可以说是杠杠的了
    k9982874
        7
    k9982874  
       20 天前 via Android
    不是你还真敢直接升级啊,1 楼说的源码编译才是最安全的
    kk2syc
        8
    kk2syc  
       20 天前
    物理服务器一般都有 ipmi/iDRAC ,云服务器(VPS)都提供 vnc ,sshd 说实话随便折腾都不要紧,只能说你没想明白关键。
    abolast
        9
    abolast  
       20 天前   ❤️ 1
    为什么要编译,包管理器不好用么。另外,机器用 wirgurad 组网,通过内网连 ssh 多安全,雷打不动
    abolast
        10
    abolast  
       20 天前
    另外,我记得那次的 ssh 漏洞好像只对一部分版本起作用吧,RHEL8 这个级别的不需要担心,要担心的是 RHEL9
    hancai2
        11
    hancai2  
       20 天前
    容器化部署的话,升级 glibc openssh openssl 一般也不会对业务有影响,升级失败大不了用 VNC 连接修复。 不过你才毕业几个月,你们上级也是心大。就算是运维岗,才毕业三个月的我也不敢让他去单独升级。
    wheat0r
        12
    wheat0r  
       20 天前
    其实我一直觉得程序员、DBA 都应该要有基本的操作系统运维能力,不然工作很难开展
    jackmod
        13
    jackmod  
       20 天前
    glibc 版本啊,死去的记忆在攻击我。
    当年在嵌入式行业每时每刻都在被这 b 玩意坑。
    wuhunyu
        14
    wuhunyu  
       20 天前
    @wheat0r 升级 OpenSSH 算是基本的操作系统运维能力吗
    xiaozhu317
        15
    xiaozhu317  
    OP
       20 天前
    @abolast 我们甚至是 6.x
    kayleh
        16
    kayleh  
       20 天前 via Android
    非要升级可以先去打快照,若 openssh 无法升级,可通过在服务器的防火墙或 hosts.deny 和 hosts.allow 配置访问控制策略,仅允许个别 IP 访问 22 端口,以此降低漏洞被利用的可能性。
    yyzh
        17
    yyzh  
       20 天前 via Android
    @liaohongxing 如果是 ubuntu 的话这步都不用做.系统自带类似 windows update 的东西.会自己自行更新的
    rrfeng
        18
    rrfeng  
       20 天前
    把 glibc 干死了 telent 也不行了吧(当然已开启的应该不受影响
    z131
        19
    z131  
       20 天前
    老系统 版本依赖太多了,有时候没法升级的,要求不高的话可以试着修改本地软件版本号。因为大部分漏洞扫描设备都是校验版本号而不是原理性扫描
    xiaozhu317
        20
    xiaozhu317  
    OP
       20 天前
    @zhywang 我感觉我会的都是皮毛中的皮毛
    xiaozhu317
        21
    xiaozhu317  
    OP
       20 天前
    @gesse 这是必做的,上次就没研究明白
    xiaozhu317
        22
    xiaozhu317  
    OP
       20 天前
    @pexcn 可以,我研究看看
    xiaozhu317
        23
    xiaozhu317  
    OP
       20 天前
    @abolast 版本过于老旧
    xiaozhu317
        24
    xiaozhu317  
    OP
       20 天前
    @z131 哈哈哈,新思路
    donaldturinglee
        25
    donaldturinglee  
       20 天前
    有包管理肯定是优先包管理升级,手动编译还要考虑系统的其他 lib 依赖,麻烦的很
    wheat0r
        26
    wheat0r  
       20 天前
    @wuhunyu #14 做政府客户的话,算的,很常见的操作,其他行业看情况
    jeesk
        27
    jeesk  
       20 天前 via Android
    还是安卓软件升级方便,更新一下依赖就完事。
    NevadaLi
        28
    NevadaLi  
       20 天前
    想问一下,没有 ipmi 么?
    fredcc
        29
    fredcc  
       20 天前
    推荐一个项目,容器环境下一键编译
    https://github.com/boypt/openssh-rpms
    xiaozhu317
        30
    xiaozhu317  
    OP
       19 天前
    @kk2syc 这我不是很懂,我自己云服务器我可以用 VNC ,但是得登录我的云账号。客户买的服务器是不是也需要这样?我没有客户的这个账号密码
    xiaozhu317
        31
    xiaozhu317  
    OP
       19 天前
    @donaldturinglee 奈何服务器版本太低了。。。
    xiaozhu317
        32
    xiaozhu317  
    OP
       19 天前
    @NevadaLi 我们这用的是云服务器,估计能开 VNC 的
    abolast
        33
    abolast  
       19 天前
    @wheat0r 没事,我们运维有代码能力就好了
    bthulu
        34
    bthulu  
       19 天前
    先把服务器上的服务下线, 再做个快照, 然后随便怎么折腾, 折腾好了再上线就是了, 折腾坏了恢复快照就行
    KIMI360
        35
    KIMI360  
       19 天前
    应该把 ssh 版本信息隐藏掉,不然这玩意儿隔断时间就爆新的漏洞。
    guanzhangzhang
        36
    guanzhangzhang  
       19 天前
    上堡垒机,iptables 做白名单,只能堡垒机 ssh 到指定机器
    Nosub
        37
    Nosub  
       19 天前
    op 主的挺厉害了,作为非运维直接去升级生产服务器的确有风险;

    我建议专业的事情,交给专业的人去做。

    看了 op 的文章,我今天把自己的一台个人服务器升级了。

    在虚拟机跑了一次成功,不过在生产环境还是遇到了意外,网上查资料解决了;

    CentOS 7.x 升级 OpenSSH 9.9p1
    https://nosub.net/admin/posts/p/228
    blackeeper
        38
    blackeeper  
       19 天前
    毕业三个月能成功升级 OpenSSH ,OP 还是很不错的,值得称赞,但是建议专业的事情专业的人做
    就升级 OpenSSH 有很多坑你还没踩过,比如升级过程中 glibc ,OpenSSL 的版本问题,会导致系统异常
    就算服务器 ssh -V 输出你想要的版本的时候,ssh 服务也不一定是正常的,你没经过完整的测试
    1 ,我碰到的就有运行 ssh 服务一段会异常退出,虽然有 systemd 自动拉起,但是在拉去间隔时还是不能正常 ssh
    2 ,还有就是 sftp 不正常
    3 ,还有 ssh 服务虽然起来了,但是有些客户端连不上,经查,发现是 ssh 协议和加密算法不匹配
    kk2syc
        39
    kk2syc  
       19 天前
    @xiaozhu317 #30 各大厂都可以开子账号,分配权限,客户给你开个子账号,分配对应机器 vnc 即可。
    iceheart
        40
    iceheart  
       18 天前 via Android
    下次搞事情先做镜像备份啊,别把自己玩死
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1254 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:22 · PVG 07:22 · LAX 16:22 · JFK 19:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.