服务器操作指北(5)编译安装 openssh 9.3p1 with openssl3.1.0
创建于 2023-05-08
更新于 2024-06-27
科技
OpenSSH
Linux

前言

学校信网办对服务器进行了安全扫描,然后报了一大堆高危漏洞出来,仔细看了一下以后基本都是 ssh 的漏洞,apt 源 只到了 8.2p1,想安装最新的 9.3p1 只能从源码安装了。服务器系统版本为 Ubuntu 20.04

  • 20240626:由于服务器从 20.04 升级到了 22.04openSSH 需要进行配套升级,所以对文章进行修订。

一、安装

1.1 编译安装 OpenSSL

由于 OpenSSL 1.1.1 将于 2023-09-11 结束支持,故而直接从源码编译 3.1.0 版本。

  1. 安装必要的依赖项,包括编译器、开发工具包、Zlib 开发库。
bash
1
2
3
4
sudo apt update # build-essential 提供编译支持 # zlib1g-dev 提供 zlib 压缩库支持 sudo apt install build-essential zlib1g-dev -y
  1. 获取源码,并进入对应目录,最新版本可从 openssl 官网获取。
bash
1
2
3
4
5
6
7
8
# 下载 wget https://www.openssl.org/source/openssl-3.1.0.tar.gz # 解压 tar -zxf openssl-3.1.0.tar.gz # 进入目录 cd openssl-3.1.0/

(20240626 Update: 更换版本为 3.0.13)

bash
1
2
3
4
5
6
7
8
# 下载,由于 SSL 出现问题,导致无法成功验证证书,需要跳过验证 wget https://www.openssl.org/source/openssl-3.0.13.tar.gz --no-check-certificate # 解压 tar -zxf openssl-3.0.13.tar.gz # 进入目录 cd openssl-3.0.13/
  1. 编译安装,安装路径为 /usr/local/openssl-3.1.0
bash
1
2
3
4
5
6
7
8
9
# --prefix 设置安装目录 # --openssldir 设置配置和运行文件的存储目录 ./config --prefix=/usr/local/openssl-3.1.0 --openssldir=/usr/local/openssl-3.1.0 # 编译 make # install_sw 指示编译器在编译完成后安装 OpenSSL 库和头文件到系统中。 sudo make install_sw

(20240626 Update: 同步修改安装路径,旧版可保留)

bash
1
2
3
4
5
6
7
8
9
# --prefix 设置安装目录 # --openssldir 设置配置和运行文件的存储目录 ./config --prefix=/usr/local/openssl-3.0.13 --openssldir=/usr/local/openssl-3.0.13 # 编译 make # install_sw 指示编译器在编译完成后安装 OpenSSL 库和头文件到系统中。 sudo make install_sw
  1. 配置动态库,编译后的版本需要动态库支持才可以正常运行。
bash
1
2
3
4
5
6
7
# 添加动态库配置文件 sudo vi /etc/ld.so.conf.d/openssl-3.1.0.conf # 加入以下内容 /usr/local/openssl-3.1.0/lib64 # 刷新动态库,使配置生效 `sudo ldconfig`

(20240626 Update: 同步添加动态库路径,旧版可保留)

bash
1
2
3
4
5
6
7
# 添加动态库配置文件 sudo vi /etc/ld.so.conf.d/openssl-3.0.13.conf # 加入以下内容 /usr/local/openssl-3.0.13/lib64 # 刷新动态库,使配置生效 `sudo ldconfig`
  1. 验证,若未配置动态库,此命令会报依赖异常,后续 openssh 编译也会报错。
bash
1
/usr/local/openssl-3.1.0/bin/openssl version

(20240626 Update: 同步添加动态库路径,旧版可保留)

bash
1
/usr/local/openssl-3.0.13/bin/openssl version

1.2 编译安装 OpenSSH

在安装过程中要保证 ssh 连接不会中断,否则可能存在无法连接的问题,需要通过 ipmi 进行维护。

  1. 备份现有配置,一般情况下配置会复用。
bash
1
2
cp /etc/ssh/sshd_config sshd_config.backup cp /etc/pam.d/sshd sshd.backup
  1. 清理现有 apt 安装的 openssh-server 版本。
bash
1
2
3
sudo apt remove openssh-server # 可选步骤,清理不需要的安装包,默认清理的应该是 ncurses-term openssh-sftp-server ssh-import-id sudo apt autoremove

(20240626 Update: 清理之前手动安装的版本)

bash
1
2
3
4
# 进入目录 cd openssh-9.3p1 # 清理旧版本 sudo make uninstall
  1. 安装必要的依赖项,包括编译器、开发工具包、OpenSSL 开发库、Zlib 开发库和 PAM 开发库。

(20240626 Update: 该步骤无变化)

bash
1
2
3
4
5
6
7
8
sudo apt update # build-essential 提供编译支持 # libssl-dev 提供基本的 1.1.1f 版本支持,后续会替换为 3.1.0 # zlib1g-dev 提供 zlib 压缩库支持 # libpam0g-dev 提供 PAM 支持 # libkrb5-dev 提供 Kerberos 5 协议支持 # libgssglue-dev 提供 GSSAPI 支持 sudo apt install build-essential libssl-dev zlib1g-dev libpam0g-dev libkrb5-dev libgssglue-dev -y
  1. 获取源码,并进入对应目录,最新版本可从 openssh 官网获取。
bash
1
2
3
4
5
6
7
8
# 下载 wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.3p1.tar.gz # 解压 tar -xzf openssh-9.3p1.tar.gz # 进入目录 cd openssh-9.3p1

(20240626 Update: 下载当前最新版)

bash
1
2
3
4
5
6
7
8
# 下载,由于 SSL 出现问题,导致无法成功验证证书,需要跳过验证 wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz --no-check-certificate # 解压 tar -zxf openssh-9.7p1.tar.gz # 进入目录 cd openssh-9.7p1
  1. 编译安装,安装路径为 /usr,配置路径复用为 /etc/ssh
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# --prefix 指定安装路径 # --sysconfdir 指定配置信息路径 # --with-privsep-path 指定特权分离路径 # --with-ssl-dir 指定 ssl 库路径,启用 openssl 支持,若想使用系统默认版本,请将路径修改为 /usr/include/openssl # --with-pam 启用 PAM 支持 # --with-zlib 启用 zlib 支持 # --with-kerberos5 启用 gssapi 支持 ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-privsep-path=/var/empty --with-ssl-dir=/usr/local/openssl-3.1.0 --with-pam --with-zlib --with-kerberos5 # 编译 openssh-server make # 安装 sudo make install

(20240626 Update: 安装命令仅更新 openssl 路径)

bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# --prefix 指定安装路径 # --sysconfdir 指定配置信息路径 # --with-privsep-path 指定特权分离路径 # --with-ssl-dir 指定 ssl 库路径,启用 openssl 支持,若想使用系统默认版本,请将路径修改为 /usr/include/openssl # --with-pam 启用 PAM 支持 # --with-zlib 启用 zlib 支持 # --with-kerberos5 启用 gssapi 支持 ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-privsep-path=/var/empty --with-ssl-dir=/usr/local/openssl-3.0.13 --with-pam --with-zlib --with-kerberos5 # 编译 openssh-server make # 安装 sudo make install
  1. 验证。
bash
1
2
ssh -V > OpenSSH_9.3p1, OpenSSL 3.1.0 14 Mar 2023

(20240626 Update: 更新后新版内容如下)

bash
1
2
ssh -V > OpenSSH_9.7p1, OpenSSL 3.0.13 30 Jan 2024
  1. 配置服务,手动编译安装后,需要重新配置服务。

(20240626 Update: 该步骤无变化)

bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
## 删除旧有符号链接 sudo rm /etc/systemd/system/sshd.service ## 解除服务锁定 sudo systemctl unmask ssh.service ## 配置自启动 sudo vi /etc/systemd/system/sshd.service ## 添加以下内容 [Unit] Description=OpenSSH Daemon After=network.target auditd.service [Service] ExecStart=/usr/sbin/sshd -D ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=always [Install] WantedBy=multi-user.target ## 配置 sftp sudo vi /etc/ssh/sshd_config ## 修改以下内容 ## 将 /usr/lib/openssh/sftp-server 改为 /usr/libexec/sftp-server Subsystem sftp /usr/libexec/sftp-server ## 启动 sudo systemctl daemon-reload sudo systemctl enable sshd.service sudo systemctl start sshd.service sudo systemctl status sshd.service

参考

本文作者: 有次元袋的 tiger
本文链接: https://www.superheaoz.top/2023/05/34807/
版权声明: 本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 我的个人天地