前几日客户侧反馈服务器的openssh服务全是漏洞,要求升级,且升级过程必须完全离线,小小研究了一下,记录于此。
环境版本信息
- 分支信息:
1
2
3
4
5
6
7
8
9
10
11
12
13[root@localhost ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core) - 内核信息:
1
2[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux - OpenSSL信息:
1
2[root@localhost ~]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017 - openssh-server信息:
1
2[root@localhost ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
获取资源
在可联网的CentOS 7主机上下载资源。
- 下载Telnet,方便卸载sshd之后连接到服务器。如果能够直接访问服务器也可以不下载。
1
yum install --downloadonly --downloaddir=$PWD/telnet telnet-server xinetd
- 下载编译工具:
1
yum install --downloadonly --downloaddir=$PWD/compile zlib* pam-* gcc make perl* perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
- 下载openssl源码:
1
wget https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz -O openssl-1.1.1w.tar.gz
- 下载openssh源码:
1
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
将上述下载的依赖项全部传入被升级主机。
安装telnet
- 安装rpm:
1
rpm -ivh *.rpm --nodeps --force
- 移除安全策略使得可以使用root账户从telnet登录:
1
mv /etc/securetty /etc/securetty.bak
- 启用telnet:
1
systemctl enable --now telnet.socket
随后即可使用telnet登录到主机。
编译安装OpenSSL
- 解压openssl:
1
tar -zxvf openssl-1.1.1w.tar.gz
- 创建配置文件:
1
cd openssl-1.1.1w && ./config --prefix=/usr/local/openssl
- 编译安装:
1
make -j8 && make install
- 创建连接:
1
2
3ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 - 查看openssl版本:
1
2[root@localhost ~]# openssl version
OpenSSL 1.1.1w 11 Sep 2023
编译安装openssh
- 先卸载原有的openssh-server防止冲突:备份并移走原有配置文件:
1
yum remove -y openssh
1
mv /etc/ssh /etc/ssh.bak
- 解压openssh源码:
1
tar -zxvf openssh-9.9p1.tar.gz && cd openssh-9.9p1
- 创建配置:
1
2
3./configure --prefix=/usr/ --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/openssl/include \
--with-ssl-dir=/usr/local/openssl --with-zlib --with-md5-passwords \
CCFLAGS="-I /usr/lib/openssl/openssl/include" LDFLAGS="-L /usr/lib/openssl/openssl/lib64" --with-pam - 编译安装:
1
make -j8 && make install
- 修改ssh配置文件
/etc/ssh/sshd_config
:
找到PermitRootLogin prohibit-password
修改为PermitRootLogin yes
。 - 启动一下ssh看一下是否有问题:使用客户端连接一下测试是否有问题,能够登录的话直接Ctrl+C关闭即可。
1
/usr/sbin/sshd -D
- 创建systemd service文件
/etc/systemd/system/sshd.service
:然后创建一下环境变量,暂时不需要往里面写什么东西:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[Unit]
Description=OpenSSH server daemon
After=network.target
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target1
touch /etc/sysconfig/sshd
- 启动sshd服务:
1
systemctl enable --now sshd
至此升级结束。
1 | [root@localhost ~]# openssl version |