OpenSSH在线升级指南:安全更新OpenSSH到9.6p1
摘要:本教程详细指导如何在Linux系统中安全升级OpenSSH到最新版本(以9.6p1为例)。通过配置Telnet备用连接、备份关键文件、升级依赖库(OpenSSL/Zlib),最终完成OpenSSH的编译安装与验证,确保升级过程不影响服务器远程访问能力。升级的目的是为了解决漏洞。
以下是漏洞列表
漏洞名称 OpenSSL安全漏洞(CVE-2023-5363) OpenSSL安全漏洞(CVE-2023-51767) OpenSSL输入验证错误漏洞(CVE-2021-23840) OpenSSL缓冲区错误漏洞(CVE-2021-3712) OpenSSL缓冲区错误漏洞(CVE-2021-3711) OpenSSL代码问题漏洞(CVE-2020-1967) OpenSSL安全漏洞(CVE-2022-0778) OpenSSL资源管理错误漏洞(CVE-2022-4450) OpenSSL安全漏洞(CVE-2023-0286) OpenSSL操作系统命令注入漏洞(CVE-2022-1292) OpenSSH资源管理错误漏洞(CVE-2021-28041) OpenSSH安全漏洞(CVE-2021-41617) OpenSSH操作系统命令注入漏洞(CVE-2020-15778) OpenSSH代码问题漏洞(CVE-2023-38408) Red Hat Enterprise Linux Openssh输入验证漏洞(CVE-2008-3844)
目录
- 一、配置Telnet备用访问
- 二、备份SSH关键文件
- 三、升级OpenSSL(3.0.13)
- 四、升级Zlib(1.3.1)
- 五、编译安装OpenSSH(9.6p1)
- 六、恢复服务配置
- 七、重启服务并验证
- 升级后检查清单
一、配置Telnet备用访问
目的:防止SSH升级失败导致服务器失联
apt-get install telnetd xinetd -y
1. 配置inetd服务
vi /etc/inetd.conf
注释Telnet行(添加#
前缀):
# telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd
2. 配置xinetd服务
vi /etc/xinetd.conf
确保包含以下参数:
defaults {
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
includedir /etc/xinetd.d
3. 启用Telnet服务
写入配置:
sudo cat > /etc/xinetd.d/telnet << 'EOF'
service telnet
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
flags = REUSE
bind = 0.0.0.0
}
EOF
# 赋权
chmod 644 /etc/xinetd.d/telnet
4. 启动服务并验证
/etc/init.d/xinetd restart
netstat -a | grep telnet # 应显示23端口监听
二、备份SSH关键文件
重要性:升级失败时可快速回滚
vi backup.sh
粘贴备份脚本:
#!/bin/bash
BACKUP_DIR="/backup_ssh_$(date +%Y%m%d)"
sudo mkdir $BACKUP_DIR
# 备份配置文件
sudo cp -r /etc/ssh $BACKUP_DIR/etc_ssh
sudo cp /etc/ssh/sshd_config $BACKUP_DIR/sshd_config.orig
# 备份二进制文件
sudo cp /usr/sbin/sshd $BACKUP_DIR/sshd.bak
sudo cp /usr/bin/ssh $BACKUP_DIR/ssh.bak
sudo cp /usr/bin/ssh-keygen $BACKUP_DIR/ssh-keygen.bak
# 备份服务配置
sudo cp /lib/systemd/system/ssh.service $BACKUP_DIR/ssh.service.bak
sudo cp /etc/init.d/ssh $BACKUP_DIR/ssh_init.bak
# 记录当前版本
ssh -V 2>&1 | sudo tee $BACKUP_DIR/ssh_version.txt
运行脚本:
chmod +x backup.sh && ./backup.sh
三、升级OpenSSL(3.0.13)
cd /home/files/ssh_up
wget https://www.openssl.org/source/openssl-3.0.13.tar.gz
tar xvf openssl-*.tar.gz
cd openssl-3.0.13
# 编译安装
./config shared --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
make && make install
# 替换系统openssl
mv /usr/bin/openssl /usr/bin/openssl.bak
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
# 更新库链接
echo '/usr/local/openssl/lib64' | sudo tee /etc/ld.so.conf.d/openssl.conf
ldconfig -v
# 验证版本
openssl version # 应显示OpenSSL 3.0.13
四、升级Zlib(1.3.1)
cd ..
wget https://zlib.net/zlib-1.3.1.tar.gz
tar xvf zlib-*.tar.gz
cd zlib-1.3.1
./configure --prefix=/usr/local/zlib
make && make install
五、编译安装OpenSSH(9.6p1)
cd ..
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.6p1.tar.gz
tar xvf openssh-*.tar.gz
cd openssh-9.6p1
# 配置编译选项
./configure \
--prefix=/usr \
--sysconfdir=/etc/ssh \
--with-ssl-dir=/usr/local/openssl \
--with-zlib=/usr/local/zlib \
--with-pam \
--with-selinux \
--with-kerberos5 \
--with-md5-passwords \
--with-privsep-path=/var/lib/sshd
# 编译安装
make && make install
六、恢复服务配置
1. 修改服务类型
sudo cp $BACKUP_DIR/ssh.service.bak /lib/systemd/system/ssh.service
sed -i 's/Type=notify/Type=simple/' /lib/systemd/system/ssh.service
2. 更新PAM配置
sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.bak
sudo sed -i 's/@include common-auth/#@include common-auth/' /etc/pam.d/sshd
3. 恢复SSH配置文件
sudo cp $BACKUP_DIR/sshd_config.orig /etc/ssh/sshd_config
七、重启服务并验证
# 重载服务配置
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
# 重启SSH
sudo systemctl restart ssh
# 验证版本
ssh -V # 应显示OpenSSH_9.6p1
# 检查服务状态
systemctl status ssh
# 测试本地连接
ssh -v localhost
# 检查端口监听
netstat -tuln | grep ':22'
升级后检查清单
-
通过Telnet和SSH分别登录验证
-
检查
/var/log/auth.log
无错误日志 -
确认业务应用连接正常
-
(重要) 禁用Telnet服务:
sed -i 's/disable = no/disable = yes/' /etc/xinetd.d/telnet systemctl restart xinetd
通过本教程,您已完成OpenSSH的安全升级!建议定期检查OpenSSH官网获取安全更新。