Skip to content

CentOS7制作OpenSSH的RPM包

此教程理论上已过期,可以查看另一篇《CentOS7最后的挣扎》

这个教程主要是为了解决在漏扫扫到Centos7的Openssh版本过低(最新的都是7.4)而导致的高风险问题。 严格按照教程的方法去编译和安装暂未发现翻车问题,但是依然建议做好备份再升级(逃

写在前面

这里只针对Openssh版本做更新,并未涉及Openssh引用的OpenSSL模块。 若使用编译安装或自行制作RPM包的方式升级OpenSSL后,制作Openssh的RPM包经测试在非编译环境安装会出现依赖问题导致无法安装,需在测试环境补全所有编译环境方可安装,所以决定不升级Openssh引用的OpenSSL模块。 因此漏扫扫到的Banner和最终版本如下:

SSH-2.0-OpenSSH_9.0

[root@Gua ~]# ssh -V
OpenSSH_9.0p1, OpenSSL 1.0.2k-fips  26 Jan 2017

Openssh8.8到9.0都按教程编译通过。

条件准备

首先需要一个Centos7的环境,Minimal都可以。 使用yum安装rpm-bulid和编译环境

yum install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel

下载最新的Openssh和x11-ssh-askpass源码包(Openssh按需下载最新的版本,):

wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz
wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-1.2.4.1.tar.gz

配置编译条件

创建对应的编译环境,rpm-bulid编译后也会生成/root/rpmbuild/文件夹,因此直接复制命令即可(

mkdir -p /root/rpmbuild/SOURCES
mkdir -p /root/rpmbuild/SPECS
cp /root/openssh-9.0p1.tar.gz /root/rpmbuild/SOURCES/
cp /root/x11-ssh-askpass-1.2.4.1.tar.gz /root/rpmbuild/SOURCES/
tar -zxf openssh-9.0p1.tar.gz -C /opt
cp /opt/openssh-9.0p1/contrib/redhat/openssh.spec /root/rpmbuild/SPECS/
chown sshd:sshd /root/rpmbuild/SPECS/openssh.spec

修改openssh.spec

将原先openssh.spec中的
%global no_x11_askpass 0
%global no_gnome_askpass 0 
修改为
%global no_x11_askpass 1 
%global no_gnome_askpass 1
并注释掉
BuildRequires: openssl-devel >= 1.0.1
BuildRequires: openssl-devel < 1.1

开始编译

rpmbuild -ba openssh.spec

提取RPM包并安装

编译好的RPM包会在“/root/rpmbuild/RPMS/x86_64”,共4个RPM包,可提取至需要升级的CentOS7系统,准备安装。 备份系统原有ssh配置

mkdir /etc/sshconfig_backup
cp /etc/ssh/sshd_config /etc/sshconfig_backup/
cp /etc/pam.d/sshd /etc/sshconfig_backup/pam.d_sshd

使用rpm命令升级

rpm -Uvh openssh*.rpm

还原ssh配置

cp /etc/sshconfig_backup/sshd_config /etc/ssh/sshd_config 
cp /etc/sshconfig_backup/pam.d_sshd /etc/pam.d/sshd

由于未修改源码,若需要root登录则需要确保/etc/ssh/sshd_config中PermitRootLogin字段为yes

[root@Gua ~]# cat /etc/ssh/sshd_config | grep PermitRootLogin
PermitRootLogin yes

删除/etc/ssh/目录下相关key文件,否则重启sshd服务会报错

rm -rf /etc/ssh/ssh_host_*
systemctl restart sshd

此时升级完成,可查看ssh版本验证。

[root@Gua ~]# ssh -V
OpenSSH_9.0p1, OpenSSL 1.0.2k-fips  26 Jan 2017