CentOS 6.8离线升级OpenSSH 8.2
2020-11-11新疆赵修文
■ 新疆 赵修文
编者按:笔者在进行漏洞扫描时发现系统存在不少漏洞,需要进行系统升级。本文笔者介绍了如何升级OpenSSH最新版的详细步骤。
局域网服务器安装CentOS 6.8 Final,OpenSSH为5.3,当在进行本地安全漏洞扫描时,发现全部为OpenSSH漏洞。为杜绝安全隐患,需要将OpenSSH升级到最新版。
升级前准备
当前CentOS最新版为8.1,OpenSSH最新版为8.2,操作系统和软件较该服务器的版本都有了很大的变化,升级时依赖关系也会变得更复杂,甚至可能造成严重冲突;另一方面,作为生产系统,要保持系统持续可用,因此优先考虑采用tarball方式升级。
使用tarball包安装前一定要查阅INSTALL、README及相关的NOTES文件,了解安装的先决条件,确保安装顺利,少走弯路,有问题可查看FAQ文件。另外升级前一定要做好备份并进行模拟,升级时详细记录过程。
1.下载Open SSH(https://ww w.openssh.org/),当前最新为8.2p1,解压后查看INSTALL文件,得知安装需要满足以下条件:C编译器;Zlib 1.1.4或1.2.1.2,或更高版本;lib crypto(LibreSSL或Open SSL 1.0.1以上,或1.1.0g以上,或任何1.1.1版本)。
2.下载Zlib(https://zlib.net/),当前最新版为zlib-1.2.11。
3.下载OpenSSL(https://www.openssl.org/source/),当前最新版本为openssl-1.1.1g,查看INSTALL文件,除上述要求外,OpenSSL还需要:Perl 5.10.0以上;perl模块Text::Template,以及其他的一些要求。
4.下载Perl(http://www.cpan.org/src/),当前最新版为perl-5.30.2,由于该服务器perl为5.10.1,可以不下载。
5.下载Perl模块Text::Template(https://meta cpan.org/或http://search.cpan.org/),由于openssl-1.1.1g源码中包含了此模块,可以不下载。
安装gcc编译器
查看服务器上没有安装gcc,可用CentOS 6.8 ISO文件或光盘作yum源进行安装,这是最方便的安装方式,yum会解决所有依赖关系。注:正确配置后,如果提示无法联网不能安装gcc,请删除文件/etc/yum.repos.d/CentOS-Media.repomount-o loop/root/CentOS-6.8-x86_64-bin-DVD1.iso/mnt/iso //挂载
cp -pr/etc/yum.repos.d//etc/yum.repos.d.bak //备份yum配置
vi/etc/yum.repos.d/CentOS-Media.repo //编辑配置文件并保存
改为:baseurl=file:///mnt/iso///yum源url
enabled=1 //启用该软件仓库
yum clean all//清除yum缓存目录
yum makecache //重建yum仓库元数据
yum install gcc//安装gcc
编译安装zlib
zlib用于压缩和解压缩功能,执行以下命令安装,zlib默认安装在/usr/local/lib。提示:编译安装软件,应确保每一步没有错误(测试除外),再进行下一步操作。
tar -xvf zlib-1.2.11.ta r.gz //解压
cd zlib-1.2.11
//改变目录至解压后的目录
./configure
//编译前的配置
make
//编译
make test
//测试
make install
//安装
后续其他软件的编译安装均按此步骤进行,后续只列出配置步骤(config或configure),其余步骤省略。
编译安装perl
使用perl --version查看该服务器Perl版本是5.10.1,符合要求,但在编译openssl-1.1.1g后,进行测试时有2项错误,但安装使用均没有问题,查看编译目录中的错误信息(ls test/recipes/| grep err),未查明测试失败原因。若有疑虑,可以编译安装最新版的perl5.30.2,整个过程不会报任何错误。
./Configure -des-Dprefix=/usr/local/perl-5.30.2
export PATH=/usr/local/perl-5.30.2/bin:$PATH //使新版perl成为默认命令
echo " export PATH=/usr/local/perl-5.30.2/bin:$PATH " >>~/.bash//写入文件
perl -v //查看版本为v5.30.2
-des接受默认参数,-Dprefix指定安装目录。
编译安装OpenSSL
由于OpenSSL是一个底层软件,有很多应用依赖此软件,因此将其安装在非默认目录,防止影响系统其它应用。另外OpenSSL 1.1.1版本均存在安全漏洞,其他版本也不再更新,建议升级到1.1.1g。
./config --prefix=/opt/openssl --openssldir=/opt/openssl/ssl
echo '/opt/openssl/lib'>>/etc/ld.so.conf //将库文件搜索路径添加到配置文件中,实现自动加载库,也可使用LD_LIBRARY_PATH环境变量
ldconfig //重新加载库文件搜索路径
export PATH=/opt/openssl/bin/:$PATH //使新版openssl成为默认命令
echo " export PATH=/opt/openssl/bin/:$PATH " >>~/.bash//写入文件
openssl version -a //查看openssl版本号为OpenSSL 1.1.1g
· --prefix指定openssl的安装目录,--openssldir指定OpenSSL配置文件安装目录。
编译安装OpenSSH
若服务器不在本地,卸载OpenSSH之前一定要先安装配置Telnet服务器或将新编译的OpenSSH安装在其他位置,而不删除系统原有OpenSSH,防止无法连接服务器。
注意:卸载完成后,如果不重启服务器或主动断开连接,此连接仍可用,但可能会出现超时无法连接(根据服务器和客户端配置而定)。由于OpenSSH不是底层软件,系统和其他软件不依赖此软件,因此可以卸载。
1.备份、卸载系统OpenSSH
mkdir/etc/ssh.old
cp -pr/etc/ssh/*/etc/ssh.old///备份系统openssh
rpm -e `rpm -qa |grep openssh` //卸载系统openssh
rm -rf/etc/ssh //删除系统原有的配置
2.编译安装OpenSSH
./configure --prefix=/opt/ssh --sysconfdir=/etc/ssh --with-ssl-dir=/opt/openssl
ln -s/opt/ssh/bin/ssh/usr/bin //创建新编译ssh软链接
ln -s/opt/ssh/bin/ssh-keygen/usr/bin///创建ssh-keygen软链接
ssh -V //查看Open SSH版本为8.2p1
--prefix指定安装目录,--sysconfdir指定配置文件安装目录,--with-ssl-dir=DIR指定LibreSSL/OpenSSL库的安装目录。
3.配置OpenSSH
cp contrib/redhat/sshd.init/etc/init.d/sshd //复制源码中的配置文件
chkconfig --add sshd//添加sshd服务
chkconfig sshd on//设置sshd服务开机自启
ln -s/opt/ssh/sbin/sshd /usr/sbin///创建sshd软链接
vi/etc/ssh/sshd_config //修改配置文件,去掉以下5行注释符#,并将prohibit-password修改为yes(默认配置禁止密码登录),最后保存退出。
Port 22
ListenAddress 0.0.0.0
PermitRootLogin prohibit-password
AuthorizedKeysFile.ssh/authorized_keys
PasswordAuthenticati
on yes
service sshd start//启动sshd服务
至此,OpenSSH 8.2升级完毕。提示:服务自启脚本可以在http://www.linux fromscratch.org/blfs/下载,并使用make install-sshd命令安装;应禁止root远程登录,关闭Banner,使用密匙验证的方式等(比密码验证方式更为安全),可提高系统的安全性,具体参见官网OpenSSH配置;如需使用Linux-PAM支持SSH,需进行配置,SSH仅使用PAM检查密码,如果已经关闭密码验证方式,则不需要安装配置PAM。
其他问题
1.安装Text::Template模块。若要安装该Perl模块,可按照如下指令安装。
perl Makefile.PL INS TALL_BASE=/usr/local/perl-5.30.2/
//创建Makefile文件并指定安装位置
export PERL 5LIB=/usr/local/perl-5.30.2/lib/
//将模块搜索路径加入@INC数组
echo " expor t PERL5LIB=/usr/local/perl-5.30.2/lib/" >>~/.bash
//写入文件
perldoc -l Text::Templa te
//验证模块是否安装成功,无输出表示没有安装
如果连接互联网,使用CPAN工具安装Perl模块最方便。
2.SSH客户端连接问题。OpenSSH升级完成后,在使用SSH客户端软件连接服务器时,若提示“Key exchange failed.No compatible key exchange method…”,说明key交换方法不兼容,需要使用较新版本的客户端软件即可连接。
3.若软件安装后,查不到帮助信息,请编辑/etc/man.config,将该软件man目录的路径加入此配置文件。