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

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

  •  
  •   xiaozhu317 · 1 天前 · 4912 次点击

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

    之前的情况请移步: 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 友们提供的宝贵建议。
    38 条回复    2024-09-28 00:33:55 +08:00
    NxxRngjnbgj
        1
    NxxRngjnbgj  
       1 天前
    建议编译源码,很简单,arm 平台就交叉编译,我们升级把原来默认的停掉,备份/etc/ssh(看操作系统,基本都是这个)目录下的所有文件,自己写个 service 文件关联编译的二进制文件,然后扔到 systemd 下,然后以 sshd1234567(根据 service 服务名来)启动,结束,但是你以为这是最简单的么,有个项目领导来了一句:把服务停了就行,扫完再打开。我的评价是:6🤣
    gesse
        2
    gesse  
       1 天前
    可以先开 telnet 登录,然后用 telnet 登录上去搞,

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

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

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

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

    CentOS 7.x 升级 OpenSSH 9.9p1
    https://nosub.net/admin/posts/p/228
    blackeeper
        38
    blackeeper  
       2 小时 48 分钟前
    毕业三个月能成功升级 OpenSSH ,OP 还是很不错的,值得称赞,但是建议专业的事情专业的人做
    就升级 OpenSSH 有很多坑你还没踩过,比如升级过程中 glibc ,OpenSSL 的版本问题,会导致系统异常
    就算服务器 ssh -V 输出你想要的版本的时候,ssh 服务也不一定是正常的,你没经过完整的测试
    1 ,我碰到的就有运行 ssh 服务一段会异常退出,虽然有 systemd 自动拉起,但是在拉去间隔时还是不能正常 ssh
    2 ,还有就是 sftp 不正常
    3 ,还有 ssh 服务虽然起来了,但是有些客户端连不上,经查,发现是 ssh 协议和加密算法不匹配
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   999 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:22 · PVG 03:22 · LAX 12:22 · JFK 15:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.