openssh升级到8.1
上次偷懒升级到8.0,结果还是扫出了漏洞,这次在升级一个版本,升级到8.1。
使用8.0的方法下载rpm进行升级出现了问题,需要大量的依赖包,下了两个多小时没搞定,所以使用源码编译吧。
1,准备
安装Openssh编译需要依赖包,可以在一台上做完整的依赖库,编译完成成后,直接打包拷贝到其他主机。
下载8.1的源码包上传到主机
2,安装
使用mini版本的centos7.4,使用下面的命令将所需的依赖包全部下载保存到本机,用来提供给其他主机使用
yum install --downloadonly --downloaddir=/opt/test/rpm/ gcc openssl-devel pam-devel rpm-build
(1)安装依赖包
cd /opt/test/rpm
rpm -Uvh *.rpm
(2)切换到上传openssh8.1的目录,解压,编译
tar -xvzf openssh-8.1p1.tar.gz
cd openssh-8.1p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-tcp-wrappers make && make install
make
make install
(3)给权限
cd /etc/ssh
chmod 600 sshd_config ssh_host_dsa_key ssh_host_key ssh_host_rsa_key
chmod 620 moduli
chmod 644 ssh_config ssh_host_dsa_key.pub ssh_host_key.pub ssh_host_rsa_key.pub
(4)允许root账户登录
vi /etc/ssh/sshd_config
把下面的去注释
PermitRootLogin yes
(5)重启ssh
systemctl restart sshd
这时候一般就成功,但是有时候会报错
3,错误
3月 10 09:42:54 localhost.localdomain systemd[1]: Failed to start OpenSSH server daemon.
3月 10 09:42:54 localhost.localdomain systemd[1]: Unit sshd.service entered failed state.
3月 10 09:42:54 localhost.localdomain systemd[1]: sshd.service failed.
状态不正常
现象:但是进程已启动,监听了22端口,而且可以正常连上去。
解释:出现命令挂起的原因就是 sshd在启动完成后,没有给systemd发消息,systemd就一直在那傻等,所以下面我们就修改源码,添加消息
4,源码修改
在源码目录下
找sshd.c这个主函数文件,找到调用server_accept_loop 这个函数的行,注意这个函数的定义也在这个文件,前加一行代码,如下:
/* Signal systemd that we are ready to accept connections */
sd_notify(0, "READY=1");
/* Accept a connection and return in a forked child */
server_accept_loop(&sock_in, &sock_out,
&newsock, config_s);
}
在源文件开头几行添加引用头文件:
#include <systemd/sd-daemon.h>
5,编译安装
由于默认的依赖中,不包含sd_notify 这个函数,所以还需要安装依赖的包,和刚才一样,先把依赖包下载到本地给其他主机使用
yum install --downloadonly --downloaddir=/opt/test/rpm/ systemd-devel
编译时还需要在makefile中指明,编辑文件:Makefile ,找到变量 LIBS,修改如下:
LIBS=-lcrypto -ldl -lutil -lz -lcrypt -lresolv -lsystemd
make & make install
重启ssh服务即可,发现状态正常
6,依赖包和修改后的源码