Linux openssl、openssh 升级 保留旧版本
linux中的openssh、openssl漏洞原因升级
各个系统的升级方式大致相同
目前最新版本:
- openssl: 3.5.1,
- openssh 10.0p1
1. 升级OpenSSL
1.1 下载
https://release-assets.githubusercontent.com/github-production-release-asset/7634677/b9499081-25cc-429f-9091-e3882c37d0a5
1.2 安装C编译环境
apt-get install -y build-essential
yum install perl-IPC-Cmd perl-Data-Dumper gcc gcc-c++ perl perl-devel -y
1.3 解压安装
# 解压
tar -xzf openssl-3.5.1.tar.gz
# 编译
cd openssl-3.5.1
./config --prefix=/opt/openssl-3.5.1
# 安装
make && make install
1.4 环境替换
因不想破坏系统原本的Openssl版本, 因为可能存在在旧版本的基础上编译安装的其他软件包因升级Openssl后不能使用的情况。
所以使用环境覆盖的方式,不改变文件。
1.4.1 环境变量
echo 'export PATH=/opt/openssl-3.5.1/bin:$PATH' >> /etc/profile
1.4.2 动态链接库
# 文件首添加 /opt/openssl-3.5.1/lib64
/etc/ld.so.conf
# 更新动态链接库
ldconfig
1.5 进行验证
ooenssl version
2. 升级OpenSSH
2.1 下载
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.0p1.tar.gz
2.2 安装C编译环境
apt-get install -y zlib1g-dev libpam0g-dev
yum install zlib-devel pam-devel -y
2.3 解压安装
configure注意with-ssl-dir的目录可以手动指定自定义openssl的目录
安装前建议将--sysconfdir=/etc/ssh
保留空目录。 因为新旧版本的配置信息和加解秘钥信息可能并不相通或配置过时不支持之类的异常。 将会影响在sshd启动
tar -xzf openssh-10.0p1.tar.gz
cd openssh-10.0p1
mv /etc/ssh /etc/ssh-old
./configure --prefix=/opt/openssh-10.0p1 --with-ssl-dir=/opt/openssl-3.5.1 --sysconfdir=/etc/ssh --with-pam --with-gssapi --with-rsa --with-rhosts-allowed --with-zlib --with-md5-passwords
make && make install
2.4 环境替换
因不想破坏系统原本的OpenSSH版本, 因为可能存在在旧版本的基础上编译安装的其他软件包因升级Openssl后不能使用的情况。
所以使用环境覆盖的方式,不改变文件。
# /etc/profile
PATH="/opt/openssh-10.0p1/bin:/opt/openssh-10.0p1/sbin:$PATH"
# /usr/lib/systemd/system/sshd.service
# 因为我的方式是运行环境变量覆盖替换,而不是替换新旧文件。所以sshd.service中默认启动的还是旧版本编译的sshd程序。需要将其替换成新自定义的执行程序
cp /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service-back
vim /usr/lib/systemd/system/sshd.service
# 执行目标"/opt/openssh-10.0p1/sbin/sshd"
新安装的sshd可能root无法登陆,注意排查sshd -T | grep permitrootlogin
麒麟系统遇到一个问题,通过service服务启动时,遇到报错GSSAPI
其原因大概是因为麒麟系统和readhat类(centos)的系统级加解密有些不一样。
将 /etc/sysconfig/sshd中的CRYPTO_POLICY=设为空,相当于 不强制覆盖 SSH 的默认加密配置,允许 SSH 回退到自身的默认算法集合(包括 GSSAPI 所需的支持)。
这样避免了全局加密策略对 GSSAPI 的不兼容限制。
2.5 进行验证
systemctl daemon-reload
systemctl restart sshd
sshd -T # 验证服务参数
ssh -V #客户端版本
sshd -V #服务端版本