1.1升级原因

SF-2019-00163

OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组所维护的一套用于安全访问远程计算机的连接工具。由于使用不存在的用户名和存在的用户名将返回不同的信息,该特性将能够被用来进行用户名枚举,并可能使用结果进行更进一步攻击。

影响以下版本:7.7。

升级Openssh到最新版本。

1.2 提前准备工作

(1)通过root用户配置visudo,使非root用户添加到可以使用sudo命令,这里以ringwater示例:
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
ringwater       ALL=(ALL)       ALL
(2)配置telnet登录,防止ssh服务失效后可以继续进行维护
(3)防火墙要放通ssh和telnet端口,如果策略无法配置,可停用防火墙来实现.
(4)设置DNS vi /etc/resolv.conf添加dns
nameserver 114.114.114.114
(5)更新yum库为阿里云,防止yum安装包失败
首先把fastestmirrors关了
#编辑
vi /etc/yum/pluginconf.d/fastestmirror.conf
#修改
enable=0
#或者执行以下命令
sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf
1. 先把之前的repo挪到备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.bak
1. 替换为官方Vault源(由于官网已停止对Centos 6的维护,更新会失败,需要重新建立可用的yum站点)
修改 Centos-Base.repo
vi /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-6.10
enabled=1
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
[updates]
name=CentOS-6.10
enabled=1
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.comm/centos-vault/RPM-GPG-KEY-CentOS-6
[extras]
name=CentOS-6.10
enabled=1
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
enabled=1
failovermethod=priority
baseurl=http://mirrors.aliyun.com/epel-archive/6/$basearch
gpgcheck=0
gpgkey=http://mirrors.aliyun.com/epel-archive/RPM-GPG-KEY-EPEL-6
修改epel源 epel.repo
vi /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
enabled=1
failovermethod=priority
baseurl=http://mirrors.aliyuncs.com/epel-archive/6/$basearch
gpgcheck=0
gpgkey=http://mirrors.aliyuncs.com/epel-archive/RPM-GPG-KEY-EPEL-6
运行以下命令生成缓存
yum clean all
yum makecache
2安装包准备
openssh-7.9p1.tar.gz
openssl-1.0.2u.tar.gz
zlib-1.2.11.tar.gz
上传安装包可以使用SFTP方式(secureCRT自带),或者sz命令。
3安装并启用Telnet
先检查CentOS7.0是否已经安装以下两个安装包:telnet-server、xinetd。命令如下:
 rpm -qa telnet-server
 rpm -qa xinetd
如果没有安装,则先安装。安装命令:
3.1 安装telnet
yum list |grep telnet
yum -y install telnet-server.x86_64
yum -y install telnet.x86_64
 3.2 安装xinetd 
这里安装xinetd
yum list |grep xinetd
yum -y install xinetd.x86_64
安装完成后,将xinetd服务加入开机自启动:
chkconfig xinetd on
service xinetd start
3.3 配置telnet服务
配置系统开机自动启动Telnet
/etc/xinetd.d目录
在Linux系统中有一个超级服务程序inetd,大部分的网络服务都是由它启动的,如chargen、echo、finger、talk、telnet、wu-ftpd等…,在旧版本它的设置是在/etc/inetd.conf中配置的。
在新版本,它就改成了一个xinetd.d目录。
在xinetd.d目录中,每一个服务都有一个相应的配置文件,我们以telnet为例,说明一下各个配置行的含义:vi /etc/xinetd.d/telnet
service telnet
{
socket_type=stream
wait=no
user=root
server=/usr/sbin/in.telnetd
log_on_failure+=USERID
disable=no
}
第一行,说明该配置用来设置telnet服务。
第二行,说明Socket连接类型是stream,也就是TCP
第三行,是指不等待到启动完成
第四行,是指以root用户启动服务进程
第五行,是指服务进程是/usr/sbin/in.telnetd
第六行,是用于做一些出错日志
第七行,是指禁止远方telnet,如果需要开放则将该配置改为:disable=no
修改了xinetd的配置,需要重启xinetd才能够生效,有两种方法可以实现:
执行如下命令:
service xinetd restart
注:
1)若还不能telnet,请检查/etc/hosts.deny,将ALL:ALL注释掉。
3.4 允许root直接登录telnet
默认情况下,linux不允许root用户以telnet方式登录linux主机,若要允许root用户登录,可采取以下方法:
验证规则设置在/etc/security文件中,该文件定义root用户只能在tty1-tty6的终端上记录,删除该文件或者将其改名即可避开验证规则实现root用户远程登录。
mv /etc/securetty /etc/securetty.bak
4、安装相关依赖包
查询依赖包是否全部安装:
rpm -qa | egrep "gcc|make|perl|zlib|zlib-devel|pam|pam-devel"
根据查询的情况进行安装相关依赖包
yum -y install gcc make perl zlib zlib-devel pam pam-devel
4.1 停止ssh服务
service sshd stop
备份ssh配置文件
cp -r /etc/ssh /etc/ssh.old
4.2 查看系统原有openssh包
rpm -qa | grep openssh
openssh-server-5.3p1-94.el6.x86_64
openssh-clients-5.3p1-94.el6.x86_64
openssh-5.3p1-94.el6.x86_64
openssh-askpass-5.3p1-94.el6.x86_64
根据上面查询出的结果,卸载系统里原有Openssh(全部卸载)
rpm -e --nodeps  xxxxxxxxxx
卸载完成后执行rpm -qa | grep openssh,确保没有回显
4.3 编译安装zlib
解压刚才上传到服务器的zlib-1.2.11.tar.gz,并进行编译安装
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=/usr/local/zlib
make
make install
验证zlib安装是否成功,要包含include、lib、share三个目录。
ll /usr/local/zlib
新建并编辑配置文件:
vi /etc/ld.so.conf.d/zlib.conf
加入如下内容后保存退出
/usr/local/zlib/lib
刷新库文件,加载刚才编译安装的zlib生成的库文件
ldconfig -v
  
4.4 编译安装openssl
解压安装openssl包,并进行编译安装
tar -zxvf openssl-1.0.2u.tar.gz
cd openssl-1.0.2u
./config shared zlib
make      (时间比较长,切勿打断)
make test    (时间比较长,切勿打断)
make install     (时间比较长,切勿打断)
重命名现有文件目录
mv /usr/bin/openssl /usr/bin/openssl.bak
创建ssl相关软连接
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
编辑配置文件
vi /etc/ld.so.conf.d/ssl.conf
加入如下内容后保存退出
/usr/local/ssl/lib
刷新库文件,加载刚才编译安装的ssl生成的库文件
ldconfig -v
查看openssl版本
openssl version -a
4.5 升级openssh,编译安装
tar -zxvf openssh-7.9p1.tar.gz
cd openssh-7.9p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-privsep-path=/var/lib/sshd --with-ssl-dir=/usr/local/ssl
make
修改文件权限(如没有,不需要管)
chmod 600 /etc/ssh/ssh_host_rsa_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
chmod 600 /etc/ssh/ssh_host_ed25519_key
make install
  
修改配置文件,允许root直接登录
echo "PasswordAuthentication yes"   >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
ssh服务必须开机自启动,因此要进行一些设置
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
chkconfig --add sshd
chkconfig sshd on
service sshd restart
验证ssh版本
ssh –V
ssh登录测试,可以成功登录。
openssh版本升级完成!
4.6 收尾工作:
关闭开机启动:
chkconfig --del xinetd
将telnet服务关闭开机启动:
vi /etc/xinetd.d/telnet
service telnet
{
socket_type=stream
wait=no
user=root
server=/usr/sbin/in.telnetd
log_on_failure+=USERID
disable=yes
}
service xinetd stop
还原securetty
mv /etc/securetty.bak /etc/securetty
4.7 如果升级失败,进行回退操作:
# yum -y install openssh-clients
# yum -y install openssh-server
# yum -y install openssh