Ubuntu16.04或CentOS7系统下升级 openssh 到最新版

盟的漏扫工具,按照软件版本匹配漏洞规则,即使你使劲的apt upgrade/ yum update,最后还是会在报告中说存在漏洞,例如:
经过最新update,线上版本已经是

然而漏扫报告依然显示:
以前的所有版本被一棍子打死了,懒得去扯皮,直接升了吧

1,准备步骤
    安装Openssh编译需要依赖的头文件等,可以在一台上做完整的依赖库,编译完成成后,直接打包拷贝到其他主机(要求主机原生安装,使用systemd管理的sshd服务),然后其他主机直接 make install 接步骤5操作。

  1. #安装openssl 库
  2. apt-get install libssl-dev     #centos7下安装命令:yum install openssl-devel
  3.  
  4. #安装认证模块
  5. apt install libpam-dev      #centos7下安装命令:yum install pam-devel
     
  6. #安装zlib库
  7. apt-get install libz-dev     #centos7下安装命令:yum install zlib-devel
  8.  
  9.  
  10. #下载openssh源码
  11. wget https://cloudflare.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.8p1.tar.gz
  12.  
  13. #解压
  14. tar xfz openssh-7.8p1.tar.gz
  15.  
  16. # 进入目录
  17. cd openssh-7.8p1
  18.  
  19. #配置安装路径,并生成makefile文件
  20. ./configure --prefix=/usr/local/openssh/ --sysconfdir=/etc/ssh --with-pam --with-tcp-wrappers


2,安装出错:
    如果使用默认的源码,make install 安装到Ubuntu16.04或者Centos7,在默认使用systemd管理sshd时,你会发现,启动命令会卡起,稍后用systemctl 查看status发现卡在正在启动的阶段,如:
检查后台日志会发现下面两行:

  1. -- Unit ssh.service has begun shutting down.
  2. Jul 02 18:20:04 localhost sshd[31018]: Received signal 15; terminating.
  3. Jul 02 18:20:04 localhost systemd[1]: Stopped OpenBSD Secure Shell server.

然而,你去查看进程,却发现进程已经启动,并且已经监听22端口,且能正常连接;

解释: 出现命令挂起的原因就是 sshd在启动完成后,没有给systemd发消息,systemd就一直在那傻等,所以下面我们就修改源码,添加消息;

3,源码修改:
  在源码openssh-7.8p1目录下,找sshd.c这个主函数文件,找到调用server_accept_loop 这个函数的行,注意这个函数的定义也在这个文件,不要找错了!
前加一行代码,效果如下:

  1.                 /* Signal systemd that we are ready to accept connections */
  2.                 sd_notify(0, "READY=1");
  3.  
  4.                 /* Accept a connection and return in a forked child */
  5.                 server_accept_loop(&sock_in, &sock_out,
  6.                     &newsock, config_s);
  7.         }

  相应的,在源文件开头几行添加引用头文件:

  1. #include <systemd/sd-daemon.h>


4,编译,安装
由于默认的依赖中,不包含sd_notify 这个函数,所以还需要安装依赖的包

  1. apt-get install libsystemd-dev ##Centos7使用命令,yum install systemd-devel

编译时还需要在makefile中指明,编辑文件:Makefile ,找到变量 LIBS,修改如下:

  1. LIBS=-lcrypto -ldl -lutil -lz -lcrypt -lresolv -lsystemd  (注意:这里是hjkl中的l)

下面就可以直接编译,安装

  1. make -j4 & make install


5,配置改动
openssh 升级之后,有几个默认的配置点,做了改动,需要在配置文件中修改。

5.1 使用原配置文件 /etc/ssh/sshd.config,如果需要root直接登录,需要明确开启 root登录权限

  1. PermitRootLogin yes          #默认是没注释掉的。

5.2 在CentOS7 系统下,默认启用了selinux,还需要修改如下几点:

  1. chown 600 /etc/ssh/*key          #删除其他用户对秘钥的读权限
  2. chcon --reference=/usr/sbin/sshd /usr/local/openssh/sbin/sshd    #设置sshd的selinux标识;

5.3 sftp配置:启用最新版本的配置

  1. #Subsystem sftp /usr/lib/openssh/sftp-server            #注释老配置行
  2. Subsystem sftp /usr/local/openssh/libexec/sftp-server


6,用systemd管理:
在ubuntu16.04 下,你需要修改systemd服务配置文件:/etc/systemd/system/sshd.service
在Centos7系统下,改配置文件在 /usr/lib/systemd/system/sshd.service
修改如下:

  1. ExecStart=/usr/local/openssh/sbin/sshd -D $SSHD_OPTS
  2. #ExecStart=/usr/sbin/sshd -D $SSHD_OPTS

重新加载,并启动:

  1. systemctl daemon-reload
  2. systemctl restart sshd
发布了2 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/liuchunlei/article/details/105371965