修复OpenSSH漏洞
友情提示:请阅读完文章,再进行操作,感谢支持,祝你万事胜意!
漏洞概括
- OpenSSH 输入验证错误漏洞(CVE-2019-16905)
- OpenSSH 命令注入漏洞(CVE-2020-15778)
- OpenSSH 安全漏洞(CVE-2021-28041)
一般线上用的云主机的ssh版本都还比较低;线上的云主机版本还处于OpenSSH_7.4p1。2021年来,云主机进行了漏洞扫描,出现了大量openssh的漏洞,我尝试升级过8.4、8.5的版本。由于8.5版本也有漏洞,这一次我们直接升级到OpenSSH_8.6p1。
[root@ncayu8847 ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
那我们开始升级吧!
你需要准备的
openssh安装包:
- openssh-8.6p1.tar.gz
- openssl-1.1.1h.tar.gz
- zlib-1.2.11.tar.gz
你可以把这三个文件放到到linux的一个文件夹里;然后进行解压,编译。
升级openssh的步骤
1.解压升级包
tar xzvf openssh-8.6p1.tar.gz
tar xzvf openssl-1.1.1h.tar.gz
tar xzvf zlib-1.2.11.tar.gz
2.编译安装zlib
cd zlib-1.2.11
./configure --prefix=/usr/local/zlib
make && make install
3.编译安装openssl
cd openssl-1.1.1g
./config --prefix=/usr/local/ssl -d shared
make && make install
echo '/usr/local/ssl/lib' >> /etc/ld.so.conf
ldconfig -v
4.安装openssh
cd openssh-8.6p1
./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
make && make install
5.sshd_config文件修改
echo 'PermitRootLogin yes' >>/usr/local/openssh/etc/sshd_config
echo 'PubkeyAuthentication yes' >>/usr/local/openssh/etc/sshd_config
echo 'PasswordAuthentication yes' >>/usr/local/openssh/etc/sshd_config
6.备份原有文件,并将新的配置复制到指定目录
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
cp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config
mv /usr/sbin/sshd /usr/sbin/sshd.bak
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
mv /usr/bin/ssh /usr/bin/ssh.bak
cp /usr/local/openssh/bin/ssh /usr/bin/ssh
mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
mv /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub.bak
cp /usr/local/openssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub
7.启动sshd
service sshd restart
8.查看信息版本
ssh -V
升级中遇到的问题
openssh的路径
路径一:Loaded: loaded (/etc/rc.d/init.d/sshd;
路径二:Loaded: loaded (/usr/lib/systemd/system/sshd.service;
openssh有两种启动路径,
Loaded: loaded (/etc/rc.d/init.d/sshd;容易升级
Loaded: loaded (/usr/lib/systemd/system/sshd.service;升级之后sshd起不来了
如果你的sshd的启动路径是Loaded: loaded (/etc/rc.d/init.d/sshd;那么按照上面的步骤就可以升级成功了,但是如果你的sshd启动路径是Loaded: loaded (/usr/lib/systemd/system/sshd.service;就话需要进一步操作;把启动路径换成/etc/rc.d/init.d/sshd。
操作详情:
##从原先的解压包中拷贝一些文件到目标位置
cd openssh-8.6p1/contrib/redhat
cp -a sshd.init /etc/init.d/sshd
cp -a sshd.pam /etc/pam.d/sshd.pam
chmod +x /etc/init.d/sshd
chkconfig --add sshd
systemctl enable sshd
修改完配置,需要重新加载
systemctl daemon-reload
如何变更成/etc/rc.d/init.d/sshd路径下启动
需要,进入到sshd.service的目录,然后先备份,再删除掉
cd /usr/lib/systemd/system/
ll |grep sshd
如何启动sshd程序
[root@localhost init.d]# ll
total 44
-rw-r--r--. 1 root root 18281 Aug 19 2019 functions
-rwxr-xr-x. 1 root root 4569 Aug 19 2019 netconsole
-rwxr-xr-x. 1 root root 7928 Aug 19 2019 network
-rw-r--r--. 1 root root 1160 Mar 31 2020 README
-rwxr-xr-x. 1 root root 1721 Apr 15 23:55 sshd
[root@localhost init.d]# sshd start
sshd re-exec requires execution with an absolute path #sshd重新执行需要使用绝对路径执行
[root@localhost init.d]# /etc/rc.d/init.d/sshd start
Starting sshd (via systemctl): [ OK ]
[root@localhost init.d]#
[root@localhost init.d]#
[root@localhost init.d]#
[root@localhost init.d]#
[root@localhost init.d]#
[root@localhost init.d]# systemctl status sshd
sshd启动方式
/etc/rc.d/init.d/sshd start #启动sshd
/etc/rc.d/init.d/sshd stop #停止sshd
#其他命令
systemctl enable sshd #开机自动启动
systemctl start sshd #启动sshd
systemctl status sshd #查看状态
systemctl restart sshd # 重新启动
写在最后:感谢你能看到这里,如果你觉得还不错的话,希望你能给我点一个赞。你的支持就是对我我最大的鼓励啦。