实际项目基于centos系统部署业务,涉及对外提供服务时,可能会不可避免的遇到漏洞扫描的情况,centos7系统本身自带的openssh服务版本过低,就会暴露很多漏洞;openssl为开放源代码的基础软件库包,系统很多基础软件都会引用openssl库包进行安全通信,openssh服务也不例外,因此centos7本身自带openssl服务版本过低,openssh也会暴露出openssl相关漏洞,所以要升级centos系统openssl及openssh服务修复漏洞。
修复原则由于openssl是非常基础的软件库包,强行升级替换操作系统openssl可能会导致其他服务出现异常情况;本身我们只是要解决openssh服务暴露的openssl的漏洞,并不一定要升级操作系统自带的openssl;为了降低对系统的入侵性,经过权衡,选择编译安装方式安装一个新版本,原openssl不卸载;openssh服务也选择编译安装,编译安装时引用新的openssl包。
版本信息操作系统:Centos7.3.1611 安装GNOME桌面
openssl:openssl-1.1.1l.tar.gz
openssh:openssh-8.7p1.tar.gz
https://www.openssl.org/source/
以openssl-1.1.1l.tar.gz为例升级,上传服务器
yum install libmpc cpp kernel-headers glibc-headers glibc-devel gcc -y3.编译安装
tar -zxvf openssl-1.1.1l.tar.gz cd openssl-1.1.1l/ ./config --prefix=/usr/local/openssl1.1.1l --openssldir=/usr/local/openssl1.1.1l shared -fPIC make&&make install
编译安装选项说明:
–prefix:指定openssl的安装目录,bin、lib、include等目录
–openssldir:指定openssl文件的安装目录,certs、man、private等目录及配置文件等
shared:除了静态库以外,让openssl编译生成openssl动态库
-fPIC:将openssl动态库编译成位置无关(position-independent)的代码
库文件软链到系统库目录中
ln -s /usr/local/openssl1.1.1l/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1 ln -s /usr/local/openssl1.1.1l/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
运行命令检测是否功能是否正常
注:由于ssh升级过程中远程链接中断大概率会导致服务器无法通过ssh连接,建议在升级前开启telnet登录权限,防止因升级因素导致无法连接ssh连接服务器的问题发生。
1.下载openssh源码包此处选择阿里云国内镜像站下载
https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/2.安装基础依赖包
yum install zlib-devel pam-devel3.编译安装
tar -zxvf openssh-8.7p1.tar.gz cd openssh8.7p1/ ./configure --prefix=/usr/local/openssh8.7 --sysconfdir=/etc/ssh8.7/ --with-md5-passwords --mandir=/usr/share/man --with-zlib --with-pam --with-ssl-dir=/usr/local/openssl1.1.1l/ make&&make install
执行命令查看编译安装是否成功
备份系统原ssh相关命令
mkdir /usr/bin/sshbak6.6/ mkdir /usr/sbin/sshbak6.6/ mkdir /usr/libexec/opensshbak6.6/ mv /usr/libexec/openssh/sftp-server /usr/libexec/opensshbak6.6/ mv /usr/bin/ssh-copy-id /usr/bin/sshbak6.6/ mv /usr/bin/ssh-add /usr/bin/sshbak6.6/ mv /usr/bin/ssh-agent /usr/bin/sshbak6.6/ mv /usr/bin/ssh-keygen /usr/bin/sshbak6.6/ mv /usr/bin/ssh-keyscan /usr/bin/sshbak6.6/ mv /usr/bin/scp /usr/bin/sshbak6.6/ mv /usr/bin/sftp /usr/bin/sshbak6.6/ mv /usr/bin/ssh /usr/bin/sshbak6.6/ mv /usr/sbin/sshd /usr/sbin/sshbak6.6/
替换ssh命令与常用工具
cd openssh8.7p1/ ##编译包解压的目录 cp -p sftp-server /usr/libexec/openssh/ cp contrib/ssh-copy-id /usr/bin/ssh-copy-id cd /usr/local/openssh8.7/ cp -p /usr/local/openssh8.7/bin/* /usr/bin/ cp -p /usr/local/openssh8.7/sbin/* /usr/sbin/5.设置权限
chmod -R 755 /usr/local/openssh8.7/ chmod -R 755 /usr/bin/ssh* chmod -R 755 /usr/bin/scp chmod -R 755 /usr/bin/sftp chmod -R 755 /usr/sbin/ssh*6.修改配置文件允许root登陆与密码验证登陆
vi /etc/ssh8.7/sshd_config
添加配置
PasswordAuthentication yes PermitRootLogin yes7.系统服务修改
mv /usr/lib/systemd/system/sshd.service /usr/sbin/sshbak6.6 vi /usr/lib/systemd/system/sshd.service
/usr/lib/systemd/system/sshd.service文件添加如下配置
[Unit] Description=OpenSSH server daemon documentation=man:sshd(8) man:sshd_config(5) After=network.target [Service] ExecStart=/usr/sbin/sshd [Install] WantedBy=multi-user.target
重新加载
systemctl daemon-reload
重启ssh服务测试
systemctl restart sshd systemctl status sshd
查看版本信息



