Appearance
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