Ubuntu 16.04 升级Openssh 8.8P1


因为受到监管报告,服务器有SSL/TLS协议信息泄露漏洞(CVE-2016-2183)漏洞,我们的几台ubuntu服务器要升级ssl和openssh。查了下最新的openssh版本已经8.8了,网上大部分升级教程都是低版本的ssh,还是直接升级到最新的。

先容我吐槽下。这两年伟大的ZF在网络监管方面越来越严格,同时也意味着一般企业公司在信息安全方面支出也越来越高。做个公安部的安保等级每年要花费近十万大洋,做个通信管理局的通保每年也要花费不少。对于IT创业公司来说,真的太难了。

安装环境

  • Ubuntu 16.04
  • 内核版本 : Linux 4.4.0-170-generic
  • Shell: zsh 5.1.1 (x86_64-ubuntu-linux-gnu)
  • openssl版本: OpenSSL 1.0.2g 1 Mar 2016
  • openssh版本: OpenSSH_7.2p2 Ubuntu-4ubuntu2.10

因为要升级ssh,ssh进程要停掉,所以要先安装telnet来连接服务器。

前期准备

安装telnet

1
2
3
4
sudo apt-get install openbsd-inetd telnetd telnet
/etc/init.d/openbsd-inetd restart # 启动服务
netstat -anpt|grep 23 # 查看telnet服务的默认端口是否启动
telnet localhost                     # 测试登录

下载需要的包

服务器上找个目录存放这次升级要下载的包,进入该目录依次下载3个压缩包。

1
2
3
wget http://zlib.net/zlib-1.2.11.tar.gz   
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1l.tar.gz
wget --no-check-certificate https://fastly.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.8p1.tar.gz

升级更新

安装依赖包zlib

退出ssh登录,以telnet方式进入服务器,进入之前下载包的目录

1
2
3
4
5
tar xvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=/usr/local/zlib
make -j 8
sudo make install #非root账号执行这条命令要sudo权限

如果运行“./configure –prefix=/usr/local/zlib” 出现错误,请检查gcc

1
2
3
4
#检测是否安装
cc -v
#安装
sudo apt-get install gcc

升级更新openssl版本

回到下载包的目录,依次执行以下命令

1
2
3
4
5
tar zxvf openssl-1.1.1l.tar.gz
cd openssl-1.1.1l
./config shared zlib
make -j 8
sudo make install

如果在执行make编译命令的时候报错,zlib.h: No such file or directory,如下图。

upload successful

(我在ubuntu16.04系统里没出现这个错误,但是在ubuntu18.04系统里升级发生了这个错误。)
那么请回到zlib解压缩的源码目录下执行以下操作:

1
2
3
4
5
6
make clean
./configure --shared
make test
sudo make install
sudo cp zutil.h /usr/local/include
sudo cp zutil.c /usr/local/include

成功执行完以上操作后,回到openssl的源码目录下再次编译打包。

备份原来的openssl,创建软链接到系统位置

1
2
3
4
sudo mv /usr/bin/openssl /usr/bin/openssl.bak 
sudo mv /usr/include/openssl /usr/include/openssl.bak
sudo ln -s /usr/local/bin/openssl /usr/bin/openssl
sudo ln -s /usr/local/include/openssl /usr/include/openssl

添加openssl的lib库到系统并使用。

1
2
3
sudo echo "/usr/local/lib" > /etc/ld.so.conf.d/openssl.conf
ldconfig
#ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享。 ldconfig的主要用途: 默认搜寻/lilb和/usr/lib,以及配置文件/etc/ld.so.conf内所列的目录下的库文件。

如果这里因为非root账号修改系统文件权限不够出现以下类似错误:

zsh: permission denied: /etc/ld.so.conf.d/openssl.conf

请这样执行命令:

1
2
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/openssl.conf'
ldconfig

查看新的openssl版本:

1
2
openssl version -a
#更新完成显示:OpenSSL 1.1.1l 24 Aug 2021

更新 openssh

备份原openssh文件,卸载原openssh

1
2
3
sudo mv /etc/init.d/ssh /etc/init.d/ssh.old
sudo mv /etc/ssh /etc/ssh.old
sudo apt-get remove openssh-server openssh-client -y

如果卸载openssh-server报错,请检查:

  1. ssh所有进程是否停止,kill掉所有的ssh进程
1
2
3
#检查ssh进程pid,然后删除
ps -ef |grep ssh
kill -9 #pid#
  • 如果/etc/rc6.d下有/etc/init.d/ssh系统启动文件的软连接,请删除。

回到下载包的目录,依次执行以下命令

1
2
3
4
5
6
7
8
9
10
11
12
#安装依赖包libpam0g-dev
sudo apt-get install libpam0g-dev -y
tar zxvf openssh-8.8p1.tar.gz
cd openssh-8.8p1
./configure --prefix=/usr \
--sysconfdir=/etc/ssh \
--with-md5-passwords \
--with-pam --with-zlib \
--with-ssl-dir=/usr/local \
--with-privsep-path=/var/lib/sshd
make -j 8
sudo make install
1
2
3
#检查新的ssh版本
ssh -V
#显示OpenSSH_8.8p1, OpenSSL 1.1.1l 24 Aug 2021

完成更新,再恢复原来备份的文件。

1
2
3
4
5
6
cd /etc/ssh
sudo mv sshd_config sshd_config.default
sudo cp ../ssh.old/sshd_config ./
sudo mv /etc/init.d/ssh.old /etc/init.d/ssh
sudo systemctl unmask ssh
sudo systemctl restart ssh

启动后可以再次用前面的ps命令检查下sshd进程是否启动;如果原来的sshd_config配置中包含了新版本不支持已经被废弃的参数,ssh启动会失败,启动日志里会提示哪些问题,可以参照问题去修改。
比如RSAAuthentication、KeyRegenerationInterval这些参数都已经被新版本废弃了,还有原来配置加密算法的参数Ciphers也可能导致启动失败,注释掉这些重新配置就可以了。

更新好ssh版本,会影响原先所有连接过的客户端。原先连接过的客户端重新连接会报错,提示.ssh/known_hosts文件里的老的某一行连接有问题,删除出错的那一行,然后重新建立新的ssh连接就好了。这是因为ssh升级,老的公钥失效了。

除此之外,如果还无法登陆ssh,检查ssh的status,如下图:
upload successful

出现错误:

Authentication refused: bad ownership or modes for file /home/chh/.ssh/authorized_keys

sshd为了安全,对属主的目录和文件权限有所要求。请将服务器用户目录下.ssh目录的权限设置为700,该目录下文件权限设置为600.

1
2
sudo chmod 600 .ssh/*  
sudo chmod 700 .ssh

文章作者: Jacky Chen
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jacky Chen !
评论
  目录