1、背景
安全组反馈机器存在如下SSH漏洞,要求修复。
OpenSSH 安全漏洞(CVE-2023-38408)
OpenSSH 输入验证错误漏洞(CVE-2019-16905)
OpenSSH 命令注入漏洞(CVE-2020-15778)
OpenSSH 安全漏洞(CVE-2021-41617)
OpenSSH信息泄露漏洞(CVE-2020-14145)
OpenSSH 安全漏洞(CVE-2016-20012)
查看了一下说明,都是因为版本低导致。查看机器SSH版本8.0p1。
访问https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable,发现最新版本9.5p1,准备升级到9.4p1。
2.升级SSH版本
下载9.4p1之后安装。查询SSH版本,ssh -V,发现版本已更新至9.4p1。然后让安全组的同事重新扫描,结果漏洞依然存在,ssh版本还是8.0p1。很是困惑。通过rpm -qa | grep ssh。发现版本是8.0p1。想到可能需要先卸之前SSH。
3、升级步骤
-
3.1 配置Telnet服务
-
安装Telnet服务端(防止OpenSSH升级失败后导致当前SSH终端断开连接无法远程操作)
yum -y install xinetd telnet-server -
允许root用户登录:
echo -e "pts/0\npts/1\npts/2\npts/3\npts/4\npts/5" >> /etc/securetty tail -6 /etc/securetty -
修改Telnet默认TCP/23端口
grep -w "^telnet" /etc/services sed -i "s#23/tcp#23023/tcp#" /etc/services sed -i "s#23/udp#23023/udp#" /etc/services grep -w "^telnet" /etc/services grep -w "^ListenStream" /usr/lib/systemd/system/telnet.socket sed -i "s/ListenStream=23/ListenStream=23023/" /usr/lib/systemd/system/telnet.socket grep -w "^ListenStream" /usr/lib/systemd/system/telnet.socket -
启动服务
systemctl start xinetd systemctl enable xinetd systemctl start telnet.socket systemctl enable telnet.socket ss -tunlp | grep 23023 测试 telnet
-
-
3.2 安装新版本
-
备份配置文件
cd /etc/ssh cp sshd_config{,.bak} cd /etc/pam.d cp sshd{,.bak} -
安装依赖软件包
yum -y install gcc gcc-c++ zlib-devel openssl-devel pam-devel -
卸载旧版本
rpm -qa | grep openssh rpm -e --nodeps `rpm -qa | grep openssh` -
安装新版本
tar -zxvf openssh-9.4p1.tar.gz /usr/local cd /usr/local/openssh-9.4p1 ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-pam make && make install -
修改文件权限
chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key -
复制配置文件并授权
cp -a contrib/redhat/sshd.init /etc/init.d/sshd chmod u+x /etc/init.d/sshd -
还原之前备份的配置文件
cd /etc/ssh mv -f sshd_config.bak sshd_config cd /etc/pam.d mv -f sshd.bak sshd -
允许root用户远程登录
sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config -
设置开机自启
chkconfig --add sshd chkconfig sshd on chkconfig --list -
重启SSH
systemctl restart sshd systemctl status sshd -
版本验证
ssh -V -
修复sftp协议使用类似Xftp工具传输文件
vim /etc/ssh/sshd_config Subsystem sftp /usr/libexec/openssh/sftp-server 修改为: Subsystem sftp internal-sftp systemctl restart sshd
-
-
3.3 关闭Telnet服务
systemctl stop xinetd systemctl disable xinetd systemctl stop telnet.socket systemctl disable telnet.socket ss -tunlp | grep 23023