CentOS 7.0升级OpenSSH到最新版本7.6.p1

一、升级原因

7.4以下openssh版本存在严重漏洞:

  1. OpenSSH 远程权限提升漏洞(CVE-2016-10010)
  2. OpenSSH J-PAKE授权问题漏洞(CVE-2010-4478)
  3. Openssh MaxAuthTries限制绕过漏洞(CVE-2015-5600)
    OpenSSL>=1.0.1可以不用升级OpenSSL
二、安装telnet服务

1、安装软件

yum -y install xinetd telnet-server* telnet 

2、启用telnet服务

# cat > /etc/xinetd.d/telnet << END
service telnet
{
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
        disable         = no
}

END

将其中disable字段的yes改为no以启用telnet服务

# mv /etc/securetty /etc/securetty.old  #允许root用户通过telnet登录 
# systemctl start xinetd                #启动telnet服务 
# systemctl enable xinetd               #使telnet服务开机启动,避免升级过程中服务器意外重启后无法远程登录系统

3、修改pam文件
telnet 默认是不允许 root 直接登陆,需修改 /etc/pam.d/login 文件,将一下内容注释掉

auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so

在这里插入图片描述

将 /etc/pam.d/remote 文件中的 下面内容注释

auth       required     pam_securetty.so

在这里插入图片描述
4、添加登陆终端

echo "pts/0" >> /etc/securetty
echo "pts/1" >> /etc/securetty
echo "pts/2" >> /etc/securetty
echo "pts/3" >> /etc/securetty
echo "pts/4" >> /etc/securetty

5、测试telnet能否正常登入系统

telnet ip [23]

在这里插入图片描述

三、准备工作

1、关闭selinux和防火墙以及NetworkManager

setenforce 0
sed -i '/SELINUX=/s/enforcing/disabled/g' /etc/sysconfig/selinux

systemctl stop firewalld
systemctl disable firewalld

systemctl stop NetworkManager
systemctl disable NetworkManager

2、安装软件

yum -y install pam-devel gcc zlib-devel tcp_wrappers-devel

3、备份旧的ssh配置文件,停止sshd服务

tar -czf /usr/local/src/ssh_old.tar.gz /etc/ssh

systemctl stop sshd
systemctl disable sshd
三、安装 OpenSSL

1、下载地址
下载的软件包有

openssl-fips-2.0.16.tar.gz
openssl-1.0.2q.tar.gz

在这里插入图片描述
2、编译 openssl-fips

export FIPSDIR=/data/fips-2.0.16
cd /usr/local/src/
tar -xf openssl-fips-2.0.16.tar.gz
cd openssl-fips-2.0.16
./config
make && make install

3、编译openssl

cd /usr/local/src/
tar xf openssl-1.0.2q.tar.gz
cd openssl-1.0.2q
./config --prefix=/data/openssl1.0.2q --openssldir=/data/openssl1.0.2q/openssl fips --with-fipsdir=/data/fips-2.0.16 zlib-dynamic shared -fPIC
make depend
make
make test
make install

备注:

#参数说明:
--prefix:指定openssl的安装目录。
--openssldir:指定openssl文件的安装目录。
fips:集成FIPS模块。
--with-fipsdir:指向FIPS模块的安装目录位置。
zlib-dynamic:编译支持zlib压缩/解压缩,让openssl加载zlib动态库。该选项只在支持加载动态库的操作系统上才支持。这是默认选项。
shared:除了静态库以外,让openssl(在支持的平台上)也编译生成openssl动态库。
-fPIC:将openssl动态库编译成位置无关(position-independent)的代码。

4、添加到动态链接库

echo '/data/openssl1.0.2q/lib' >> /etc/ld.so.conf
ldconfig
四、安装 OpenSSH

1、下载地址
下载的软件包有

openssh-7.6p1.tar.gz

2、编译

cd /usr/local/src/
tar xf openssh-7.6p1.tar.gz
cd openssh-7.6p1
./configure --prefix=/data/openssh7.6p1 --with-ssl-dir=/data/openssl1.0.2q --with-pam --with-tcp-wrappers --with-md5-passwords --without-hardening --sysconfdir=/etc/ssh
make

rm -rf /etc/ssh   #删除原来的配置文件
make install

3、修改 sshd 配置文件

cat >> /etc/ssh/sshd_config << END
PermitRootLogin yes   #这个很关键
Protocol 2
SyslogFacility AUTHPRIV
PermitRootLogin yes
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no

#编译的时候启用了PAM支持,就必须启用
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding yes

END

4、配置环境变量

cat > /etc/profile.d/path.sh << END
export PATH=/data/openssh7.6p1/bin:/data/openssh7.6p1/sbin:$PATH
END
source /etc/profile.d/path.sh

5、备份并替换旧的命令

cp /usr/bin/ssh /usr/bin/ssh.old
\cp /data/openssh7.6p1/bin/ssh /usr/bin/ssh

cp /usr/bin/ssh-keygen /usr/bin/ssh-keygen.old
\cp /data/openssh7.6p1/bin/ssh-keygen /usr/bin/ssh-keygen

mv /usr/sbin/sshd /usr/sbin/sshd.old
ln -s /data/openssh7.6p1/sbin/sshd /usr/sbin/sshd

chmod -R 744 /var/empty/sshd

6、配置 ssh 启动

cp /usr/local/src/openssh-7.6p1/contrib/redhat/sshd.init /etc/init.d/sshd
chmod 755 /etc/init.d/sshd

#mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak
在 '$SSHD $OPTIONS && success || failure'这一行上面加上一行 'OPTIONS="-f /etc/ssh/sshd_config"'

chkconfig --add sshd
chkconfig --level 345 sshd on
systemctl start sshd

在这里插入图片描述
备注:
①有时会遇到 ssh 升级完后,sshd服务反复重启现象,这个是 sshd不兼容systemd造成的,需要

mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak

②如果升级操作一直是在ssh远程会话中进行的,上述sshd服务重启命令可能导致会话断开并无法使用ssh再行登入(即ssh未能成功重启),此时需要通过telnet登入再执行sshd服务重启命令。

7、测试
在这里插入图片描述
重启系统验证没问题后关闭telnet服务

mv /etc/securetty.old /etc/securetty 
systemctl stop xinetd
systemctl disable xinetd

#如需还原之前的ssh配置信息,可直接删除升级后的配置信息,恢复备份。 
rm -rf /etc/ssh 
tar xf /usr/local/src/ssh_old.tar.gz -C /
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值