前言
突然接到客户电话,漏扫发现服务器OpenSSH存在漏洞,需要尽快通过升级OpenSSH修复漏洞;SSH(Secure Shell)是Linux/Unix系统管理员最常使用的远程管理工具,几乎每台服务器都运行着OpenSSH服务。正因如此,OpenSSH的安全漏洞往往影响范围极广,一旦被利用,可能导致服务器被完全控制,后果相当严重。
一般情况下,Linux的发行版对应提供的最新的OpenSSH RPM包版本都比要求修复漏洞的版本低很多,所以一般只能通过源码包进行编译安装,本文系统整理了OpenSSH升级步骤,具体如下:
一、安装基础软件包
bash
yum install -y wget zlib* pam-* gcc openssl-devel telnet telnet-server xinetd telnet* net-tools
二、部署telnet服务
问:为什么要部署telnet服务呢?
答:一般来说,远程登录服务器都是用ssh,因为telnet是使用明文传输的,无法保证安全性,但是当我们在升级openssh时,ssh将无法使用所以无法通过ssh远程登录服务器进行openssh升级,需要临时使用telnet远程连接服务器升级openssh。注意:不要经互联网telnet远程连接服务器,可以使用其他机器作为跳板,然后内网连接服务器做openssh升级。
1)添加telnet配置文件
bash
vi /etc/xinetd.d/telnet
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
}
2)注释配置文件/etc/pam.d/remote中的"auth required pam_securetty.so"
bash
vi /etc/pam.d/remote
#%PAM-1.0
#auth required pam_securetty.so
3)重启xinetd服务
bash
systemctl restart xinetd
systemctl status xinetd

4)远程连接测试telnet是否可用
telnet 192.168.32.132

至此,通过telnet已经可以远程到服务器上了。下面就可以开始升级openssh了。
三、升级OpenSSH
1)获取升级源码包
bash
wget https://mirrors.aliyun.com/openssh/portable/openssh-9.1p1.tar.gz?spm=a2c6h.25603864.0.0.16103bf9f8Ydtb
mv openssh-9.1p1.tar.gz?spm=a2c6h.25603864.0.0.16103bf9f8Ydtb openssh-9.1p1.tar.gz
tar -xf openssh-9.1p1.tar.gz
2)编译安装OpenSSH
bash
cd openssh-9.1p1
./configure --prefix=/usr/local/openssh_9.1p1 --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
make && make install
3)修改配置文件
bash
vi /usr/local/openssh_9.3p2/etc/sshd_config
#LoginGraceTime 2m
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication yes
4)备份原版本命令与配置,新版本命令预配置覆盖旧版本
bash
cp /etc/init.d/sshd /etc/init.d/sshd.bak
cp contrib/redhat/sshd.init /etc/init.d/sshd
chkconfig --add sshd
cp -r /etc/ssh /etc/ssh.bak2
cp -r /usr/bin/ssh /usr/bin/ssh.bak2
cp -r /usr/sbin/sshd /usr/sbin/sshd.bak2
cp -r /usr/local/openssh_9.1p1/etc/sshd_config /etc/ssh/sshd_config
cp -r /usr/local/openssh_9.1p1/sbin/sshd /usr/sbin/sshd
cp -r /usr/local/openssh_9.1p1/bin/ssh /usr/bin/ssh
cp -r /usr/local/openssh_9.1p1/bin/ssh-keygen /usr/bin/ssh-keygen
cp -r /usr/local/openssh_9.1p1/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub
5)修改属主与数组
bash
cd /etc/ssh/
chown -R root:root ./*
6)修改服务配置文件
bash
vi /usr/lib/systemd/system/sshd.service
# Automatically generated by systemd-sysv-generator
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/sshd
Description=SYSV: OpenSSH server daemon
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=no
PIDFile=/var/run/sshd.pid
ExecStart=/etc/rc.d/init.d/sshd start
ExecStop=/etc/rc.d/init.d/sshd stop
ExecReload=/etc/rc.d/init.d/sshd reload
6)重启sshd服务
bash
systemctl daemon-reload
systemctl restart sshd.service
此时重启服务报错,查看服务状态可以看到报错信息。

vim /var/log/messages查看服务报错详细信息:

通过报错信息可以看到0640的权限对于服务太大了,需要修改为0600

修改权限后服务可以正常启动。

OpenSSH版本已经升级到要求的版本。
7)ssh远程连接测试
ssh登录远程连接成功

四、关闭telnet服务,卸载telnet(可选)
bash
systemctl stop xinetd
yum remove -y xinetd telnet-server
至此,OpenSSH升级完成,如果您有任何疑问,请留言交流。