用到的所有文件: https://pan.baidu.com/s/1anMwgaRmZYjAwJnr8U0qnA 提取码: 63ev
Linux Centos7 OpenSSH版本低导致的安全漏洞 升级OpenSSH和OpenSSl来修复漏洞
由于最近公司项目需要重新部署到服务器,检查出的安全漏洞,其中 一项就是Openssh版本低过低所以导致的远程执行漏洞,如下:
于是我就要进升级版本填补漏洞,首先
1、查看OpenSSH版本,在服务器输入以下命令:
命令:ssh -V
得到:
2、确认系统是否已经确认安装gcc编译器:
命令:gcc -v
得到:
如果没安装的同学可以参考:
https://www.imooc.com/article/17780?block_id=tuijian_wz%20yum%20-y%20install%20gcc%20gcc-c++%20kernel-devel%20//
3.升级Zlib
下载最新版本的Zlib:Zlib 官方网站:http://www.zlib.net/
目前最新版本的 Zlib 是 zlib-1.2.11.tar.gz
进入你的下载文件夹下载:
命令:cd /usr/local/src 命令:wget -c http://www.zlib.net/zlib-1.2.11.tar.gz
得到:
编译安装Zlib:
解压命令: tar xzvf zlib-1.2.11.tar.gz 命令:cd zlib-1.2.11/ 编译:./configure --prefix=/usr/local/zlib 安装:make install
现在zlib 编译安装在 /usr/local/zilib中了
4.升级openssl:
确认是否安装了SSI和查看版本:
命令:openssl version -a 或者 openssl version
目前能与Openssh配合的版本就是1.02版本
命令:cd /usr/local/src 命令:sudo wget http://www.openssl.org/source/openssl-1.0.2j.tar.gz 命令:sudo tar zxf openssl-1.0.2j.tar.gz 命令:cd openssl-1.0.2j 命令:sudo ./config --prefix=/usr/local/openssl 命令:sudo make 命令:sudo make install
备注:/usr/bin/openssl为旧的Openssl文件,进行下一步之前记得备份一下
执行以下命令进行更换旧版的Openssl:
-
重命名原来的openssl命令:sudo mv /usr/bin/openssl /usr/bin/openssl.bak
-
将安装好的openssl 的openssl命令软连到/usr/bin/openssl:
-
命令:sudo ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
-
切换到root权限:sudo bash
-
在/etc/ld.so.conf文件中写入openssl库文件的搜索路径: echo
"/usr/local/openssl/lib" >> /etc/ld.so.conf
-
使修改后的/etc/ld.so.conf生效:ldconfig -v
-
查看版本:openssl version
参考来至:http://www.cnblogs.com/dinglin1/p/9047818.html
至此,Openssl升级完毕
5、关闭selinux
命令:sudo vim /etc/sysconfig/selinux
修改 SELINUX=disabled,输入:wq 保存退出
6、安装telnet并开起来,防止意外导致ssh无法连接
1、检测telnet-server的rpm包是否安装:
命令:rpm -qa telnet-server
如没有输出就要安装,安装命令:
命令:sudo yum install telnet-server
然后发现没有安装包的错误:
只能通过下载安装包来,提供telnet的rpm包下载网址:https://pkgs.org/download/telnet-server。我下载的 telnet-server-0.17-64.el7.x86_64.rpm版本。下载安装命令:
-
命令:cd download
-
命令:wget http://mirror.centos.org/centos/7/os/x86_64/Packages/telnet-server-0.17-64.el7.x86_64.rpm
-
命令:sudo yum
install telnet-
server
-0.17
-64.el7.x86_64.rpm
-
命令:rpm -qa telnet-
server
-
命令:telnet-
server
-0.17
-64.el7.x86_64.rpm
-
命令:rpm -qa telnet-
server
1、检测xinetd 的rpm包是否安装:
命令:rpm -qa xinetd
如没有输出就要安装,安装命令:
命令:sudo yum install xinetd
然后发现又是没有安装包的错误:
只能通过下载安装包来,我下载的是telnet-server-0.17-64.el7.x86_64.rpm版本。下载安装命令:
-
-
命令:wget
http:/
/mirror.centos.org/centos
/7/os
/x86_64/Packages/xinetd-
2.3.
15-
13.el7.x86_64.rpm
-
命令:sudo yum install xinetd-
2.3.
15-
13.el7.x86_64.rpm
-
-
安装完成后,将xinetd服务和telnet加入开机自启动:
命令:sudo systemctl enable xinetd.service 命令:sudo systemctl enable telnet.socket
最后,启动以上两个服务即可:
由于telnet服务也是由xinetd守护的,所以安装完telnet-server,要启动telnet服务就必须重新启动xinetd 。
命令:sudo systemctl start telnet.socket 命令:sudo systemctl start xinetd
参考来至:https://www.cnblogs.com/lixuwu/p/6102444.html
默认情况下,系统是不允许root用户telnet远程登录的。如果要使用root用户直接登录,需设置如下内容:
echo 'pts/0' >>/etc/securetty echo 'pts/1' >>/etc/securetty
以上命令需要root权限才能执行,最后才重启服务
重启服务:service xinetd restart
而且还开通相对应的23端口,这里我就不多说了,因为我们公司端口是统一管理的,接下来在你计算机上打开telnet客户端:
然后测试打开cmd.exe看看能不能登录,telnet+IP,回车:
登录成功,接下来我们就可以安心地升级openSSH
7、升级openSSH
备份旧ssh配置文件夹 /etc/ssh :
sudo cp -rf /etc/ssh /etc/ssh.bak
下载openSSH安装包:
-
命令:cd download(这是我自己的下载文件夹)
-
-
命令:sudo wget http:
//ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.4p1.tar.gz
提供个下载地址:http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
接下来就是解压安装OpenSSH:
-
命令:sudo tar -zxvf openssh-
7.4p1.tar.gz
-
命令:cd openssh-
7.4p1
-
命令:sudo ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-tcp-wrappers
发现是缺各种Open-devel依赖包,然后去网上下载rpm安装包,发现出现各种问题,搞了好久,贼烦,就是不对应版本,浪费了一天多时间,又是重新安装openssl什么的,发现并没有用,得安装一个Openssl-fips,安装以后又出现什么缺pam-devel包的错误,然后还是一样唉,怀疑是不是镜像源,怎么啥安装包都没有,都得下载,于是去更换镜像源,发现镜像源名字改了,所以服务器不能识别了,改为原来的名字:
-
命令:
cd /etc/yum.repos.d
-
命令:sudo mv /etc/yum.repos.d/CentOS-Base.repo.backup /etc/yum.repos.d/CentOS-Base.repo
现在发现可以各种yum install 各种依赖包了。。。。说多了都是泪了,开发兼职运维的泪
接着安装两个依赖包:
-
命令:sudo yum
install openssl-devel
-
命令:sudo yum
install pam-devel
然后重新编译:
安装命令:sudo make 或者 sudo make install
到这里我的会出现说Key的权限过于open,所以我改成600了:
-
命令:cd /etc/ssh/
-
-
命令:chmod
600 ssh_host_ecdsa_key
-
-
命令:chmod
600 ssh_host_rsa_key
-
-
命令:chmod
600 ssh_host_ed25519_key
复制配置
命令:sudo cp -p sshd_config /etc/ssh/sshd_config
查看版本:ssh -V
配置允许root使用ssh:
命令:sudo vim /etc/ssh/sshd_config
取消注释 PasswordAuthentication yes
重启ssh服务:
命令:sudo service sshd restart
升级完之后不能用密码连接了
经过一番千辛万苦研究透了升级的方法,结果升级完重启sshd服务,ssh就连不上了
查了各种资料都是重复的
PermitRootLogin yes
和
vim /etc/init.d/sshd在‘$SSHD $OPTIONS && success || failure’这一行上面加上 OPTIONS="-f /etc/ssh/sshd_config"
照做并无效果(第一个确实要这么设置,第二个无必要)
后来看到了一篇文章提到关闭selinux,检查一台之前升级过openssh却可以连上的服务器,发现他的selinux确实是关闭的,而连不上的这台服务器是开着的,关闭之果然可以连接上。
不想直接关掉selinux,于是使用getsebool -a | grep ssh
在列出的几个设置项里尝试了一下,最终发现,使用setsebool -P authlogin_shadow on命令修改此项即可。
-P表示永久修改