Centos更新Openssh版本
使用漏扫工具时经常会发现目标ssh版本低的漏洞,以下是升级ssh版本的过程记录。
先尝试使用yum更新
ssh -V 检查当前openssh版本
yum update openssh -y 使用yum更新
更新完发现版本未变化,查看yum安装源列表发现仅有此版本
yum list | grep ssh 查看源可安装软件
安装telnet-server
在无法使用yum更新后,只能使用安装包更新,建议在升级前配置telnet登录,避免出现ssh无法登录的情况##
yum -y install telnet-server # 安装telnet-server
systemctl start telnet.socket # 启动telnet
systemctl enable telnet.socket #设置开机自启动
firewall-cmd --zone=public --add-port=23/tcp --permanent
#如果有防火墙,则需要放行23端口
firewall-cmd --reload #重启防火墙
firewall-cmd --zone=public --list-ports #查看防火墙开放的端口
如果有防火墙,则需要放行
在使用 telnet 连接服务器时,默认是不允许使用root登陆的,有普通账号即可登录测试。
如无普通用户需要创建一个普通用户并赋予sudo权限,例如:
添加普通用户并设置密码
useradd huge
echo 123456 | passwd --stdin huge
增加huge账号的sudo权限
在配置文件 /etc/sudoers 中添加配置,但该文件默认是没有写权限的,因此需要先增加写权限
chmod u+w /etc/sudoers
vi /etc/sudoers
huge ALL=(ALL) ALL
上面配置完成后就可以在windows下的终端中使用telnet命令来测试连接
telnet 192.168.0.31 23
升级openssl
新版本的openssh对openssl的版本是有要求的,因此建议先升级openssl的版本。
openssl version -a 检查ssl版本
cat /etc/redhat-release 检测系统版本
具体步骤如下
下载当前openssl 1.1系列的最新版本(注意:升级openssl时无需卸载老版本,可将老版本备份后,再安装新版本即可,一但出现问题还可以快速回退)
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz
#下载压缩文件
tar -zxvf openssl-1.1.1q.tar.gz #解压文件
yum install -y gcc gcc-c++ glibc make automake autoconf zlib zlib-devel #安装依赖
./config shared zlib -fPIC --prefix=/usr/local/openssl
#配置编译
make #编译源代码
make install #安装已编译的代码
mv /usr/bin/openssl /usr/bin/openssl.bak #备份老版本
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
将新版本链接到指定路径
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
将新版本链接到指定路径
echo '/usr/local/openssl/lib' > /etc/ld.so.conf.d/openssl-x86_64.conf # 将新的库文件地址写入记录so库的配置文件
ldconfig -v #配置或检查动态链接器缓存,-v详细输出
升级openssh
下载安装包并安装,下载安装包的官方列表地址是:
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
请勿在www.openssh.com主页点击版本号后直接下载,那个为基本源代码,无法直接使用,需要下载的是portable release版本。
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.5p1.tar.gz #安装包发布时间2023/10/4
systemctl stop sshd #停止当前的ssh服务器
cp -a /etc/ssh /etc/ssh.bak #备份当前ssh服务
cp -a /usr/sbin/sshd /usr/sbin/sshd.bak #-a复制时保留所有属性
cp -a /usr/bin/ssh /usr/bin/ssh.bak
rpm -qa | grep openssh #查看当前openssh的软件包
卸载这三个软件包(建议快捷卸载方法:rpm -e rpm -qa | grep openssh
--nodeps)
rpm -e openssh-clients-7.4p1-16.el7.x86_64 --nodeps
rpm -e openssh-server-7.4p1-16.el7.x86_64
rpm -e openssh-7.4p1-16.el7.x86_64
yum install -y gcc gcc-c++ glibc make automake autoconf zlib zlib-devel pcre-devel perl perl-Test-Simple
#安装依赖包
tar -zxvf openssh-9.5p1.tar.gz #解压源码包
cd openssh-9.5p1 #进入解压后的文件夹
./configure --prefix=/usr/local/openssh --with-ssl-dir=/usr/local/openssl --with-zlib #配置编译
make #编译源代码
make install #安装已编译的源代码
正常情况下按上面的配置编译安装即可,如果想安装其它模块,则需要安装对应依赖
如下面列出的一些模块,以及对应的依赖包
--with-pam --with-ssl-engine --with-selinux
yum install -y pam-devel libselinux-devel
配置启动脚本,源码包中提供了启动脚本
配置启动脚本前先检查原来openssh的systemd配置文件,如果有则将其删除,防止和新的启动脚本冲突
正常情况下这些脚本都会在卸载老版本openssh的自动删除
ls /usr/lib/systemd/system/ssh* #查看
rm -f /usr/lib/systemd/system/ssh* #删除
cp contrib/redhat/sshd.init /etc/init.d/sshd # 拷贝启动脚本
如果安装了pam模块则需要拷贝sshd.pam配置文件
cp contrib/redhat/sshd.pam /etc/pam.d/
ln -s /usr/local/openssh/etc /etc/ssh #建立软连接
ln -s /usr/local/openssh/sbin/sshd /usr/sbin/
ln -s /usr/local/openssh/bin/* /usr/bin/
systemctl daemon-reload #重新加载某个服务的配置文件
systemctl start sshd && systemctl enable sshd
启动并设置开机自启动
systemctl status sshd #查看运行状态
ssh -V #查看版本号
ssh配置和telnet删除
ssh的默认配置文件是禁止root用户远程登录的
若需要root用户远程登录,则修改如下配置文件,然后重启ssh服务即可
vi /etc/ssh/etc/sshd_config #编辑文件
PermitRootLogin yes #编辑字段
systemctl restart sshd #重启ssh服务
telnet删除
ssh升级完成,测试ssh连接是否正常
测试正常后就可以删除 telnet-server 和对应的用户了,删除步骤如下
systemctl stop telnet.socket #关闭telnet
systemctl disable telnet.socket #禁止开机启动
rpm -e telnet-server #删除telnet
userdel -r nihao # 删除用户