升级OpenSSH的正确姿势!!!
最近 OpenSSH CVE-2024-6387 闹得沸沸扬扬,网上也流传出了升级教程,但有些教程是错误的!!!
# 错误做法
错误示例:只 make install
后就不管了
这里 make install
完后需要替换二进制文件才能真正完成升级!!!
当然有些人可能会说为什么我 make install
后使用 sshd -V
输出版本号是 9.8p1,那是因为环境变量的锅!!!
检查方法很简单
输入 ls /usr/local/sbin -la | grep sshd
可以发现该二进制文件是 make install 时生成的(日期),然后输入 ls /usr/sbin -la | grep sshd
,可以发现这个 sshd 文件创建日期远落后于第一个 sshd 文件(当然你也可以通过绝对路径运行 /usr/sbin/sshd -V
输出版本信息查看),接着我们输入 ps aux | grep sshd
可以发现当前正在运行的是 /usr/sbin
下的 sshd!!!并且通过 cat /etc/systemd/system/sshd.service
也可以看出 sshd 服务是使用的 /usr/sbin
下的 sshd,跟新版本的 sshd 半毛钱关系没有!!!
人话来说就是如升
原因分析:环境变量的锅
输入 echo $PATH
可以看到自己当前的环境变量
这是我的环境变量: /bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
我也不知道是 make install 时添加了环境变量还是我之前自己添加了环境变量,导致当我输入 sshd -V
时系统将文件定位到了 /usr/local/sbin
目录下的 sshd, ssh -V
则定位到了 /usr/local/bin
下的 ssh 二进制文件,因此输出了 9.8p1 的版本信息,让我误以为升级完成(网上部分教程害人不浅),但其实根本没有完成升级!!!
Tips:部分教程用
ssh -V
输出版本信息,ssh
是客户端,sshd
才是服务端
# 正确做法
前面的步骤都是一样的
1 | sudo apt-get update |
然后这里我们需要替换二进制文件
这里因为我使用软连接好像有点问题因此选择直接把二进制文件 copy 过来(这里先把 sshd 的写了,openssh 其他组件可以依葫芦画瓢进行替换)
1 | #备份原来的sshd |
重新连接后会提示密钥指纹变更的情况,同意接受即可
下面是可选更新组件
1 | #备份原来的组件 |
Tips:sshd 的配置文件将会定位到
/usr/local/etc
下,因此可能需要迁移原配置文件。
# 简单方法
使用 --prefix
来手动指定安装目录
将原先 ./configure
命令改为 ./configure --prefix=/usr --sysconfdir=/etc/ssh
,这样在完成 make install 后将会将编译完成的软件安装至 /usr/sbin
和 /usr/bin
,而不会安装在 /usr/local/sbin
内,并且配置文件无需迁移,后面的复制命令也无需使用。
![cardcode](https://blog-mirror-china-vercel.goodboyboy.top/img/loading.gif)
Use this card to join MyBlog and participate in a pleasant discussion together .
Welcome to GoodBoyboy 's Blog,wish you a nice day .