CentOS7.x操作系统自带的OpenSSH版本默认为7.4p1,使用yum update最高也只能升级到7.4p1的补丁版本,漏扫会发现很多OpenSSH相关的漏洞,根据等保安全测评的要求,需要将OpenSSH升级到更新的版本,本篇文档记录了我本次升级的过程以及遇到的问题,供大家参考。
安装包下载地址 Openssl 下载地址:https://ftp.openssl.org/source/
Openssh 下载地址:https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
安装基础环境包 注:受perl版本限制,最新版的openssl1.1.1需要perl5.10+版本,
1 yum -y install ntpdate wget gcc gcc-c++ glibc make krb5-libs krb5-devel zlib-devel pam-devel perl
同步服务器时间 升级openssl
下载编译安装openssl 1 2 3 4 5 wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz --no-check-certificate tar xf openssl-1.1.1k.tar.gz cd openssl-1.1.1k ./config --prefix=/usr/local/openssl make && make install
备份openssl 1 2 mv /usr/bin/openssl{,.bak} mv /usr/include/openssl{,.bak}
创建软连接 1 2 3 4 5 ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/ ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/ ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl ln -s /usr/local/openssl/include/openssl /usr/include/openssl
升级openssh 安装、配置telnet服务 1 yum install xinetd telnet-server -y
1 2 3 4 5 6 7 8 9 10 11 12 cat > /etc/xinetd.d/telnet <<EOF service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no #修改yes为no } EOF
允许root远程telnet登录主机
1 2 3 4 5 6 7 vim /etc/securetty #在最后添加如下内容 pts/0 pts/1 pts/2 pts/3
配置开机自启动
1 2 3 4 systemctl enable telnet.socket systemctl start telnet.socket systemctl enable xinetd systemctl start xinetd
放行防火墙
1 2 firewall-cmd --add-service=telnet --zone=public --permanent firewall-cmd --reload
以下操作使用telnet远程登录主机进行操作
备份openssh配置 1 2 mv /etc/ssh{,.bak} cp /etc/pam.d/sshd{,.bak}
卸载旧版本openssh 1 rpm -e --nodeps `rpm -qa | grep openssh`
编译安装openssh 1 2 3 4 5 wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.6p1.tar.gz tar xf openssh-8.6p1.tar.gz cd openssh-8.6p1 ./configure --prefix=/usr -sysconfdir=/etc/ssh -with-ssl-dir=/usr/local/openssl -with-zlib -with-pam -with-md5-passwords -with-kerberos5 --without-zlib-version-check make && make install
修改配置文件 1 2 3 cp contrib/redhat/sshd.init /etc/init.d/sshd sed -i 's/^#\(PermitRootLogin \).*/\1yes/' /etc/ssh/sshd_config sed -i '/UseDNS/c\UseDNS no' /etc/ssh/sshd_config
配置开机自启动 升级后不能使用systemctl 方式启动,感觉有点怪……
1 2 /etc/init.d/sshd start chkconfig --level 35 sshd on
测试通过后,关闭telnet(telnet是明文传输,不安全) 1 2 3 4 systemctl disable xinetd systemctl stop xinetd systemctl disable telnet.socket systemctl stop telnet.socket
您可能遇到的问题? 问题1:make: *** [configdata.pm] Error 1
解决方案:服务器时间不对,手动调整服务器时间即可
问题2:Failed to listen on Telnet Server Activation Socket.
解决方案:由于已经启动了一个xinetd进程,杀掉,重新启动telnet即可
解决方案: yum -y install pam-devel
解决方案:由于开启了selinux导致,关闭即可
1 2 3 4 5 6 #临时解决方案: setenforce 0 #永久解决方案 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config grep SELINUX=disabled /etc/selinux/config reboot
问题5:sshd.service start operation timed out. Terminating
解决方案:sshd不兼容systemd造成的,sshd启动方式修改为sysv即可。
1 2 3 4 5 6 7 mv /usr/lib/systemd/system/sshd.service{,.bak} systemctl stop ssh.service rm /lib/systemd/system/ssh.service systemctl daemon-reload cd /usr/local/src/openssh-8.6p1/ cp contrib/redhat/sshd.init /etc/init.d systemctl start ssh.service
问题6:服务器发送了一个意外的数据包。received:3,expected:20 在/etc/ssh/sshd_config最后添加以下内容,重启sshd服务
1 KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
问题7:no matching key exchange algorithm found openssh升级完成后,xshell 4 无法连接服务器,升级xhell版本或者更好其他连接工具。