前言
学校信网办对服务器进行了安全扫描,然后报了一大堆高危漏洞出来,仔细看了一下以后基本都是 ssh 的漏洞,apt 源只到了 8.2p1,想安装最新的 9.3p1 只能从源码安装了。服务器系统版本为 Ubuntu 20.04.
20240626 Update:
由于服务器从 20.04 升级到了 22.04,openSSH 需要进行配套升级,所以对文章进行修订。
一、安装
1.1 编译安装 OpenSSL
由于 OpenSSL 1.1.1 将于2023-09-11
结束支持,故而直接从源码编译 3.1.0 版本.
-
安装必要的依赖项,包括编译器、开发工具包、Zlib 开发库.
1
2
3
4sudo apt update
# build-essential 提供编译支持
# zlib1g-dev 提供zlib压缩库支持
sudo apt install build-essential zlib1g-dev -y -
获取源码,并进入对应目录,最新版本可从openssl 官网获取.
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)
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/ -
编译安装,安装路径为
/usr/local/openssl-3.1.0
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: 同步修改安装路径,旧版可保留)
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
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: 同步添加动态库路径,旧版可保留)
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` -
验证,若未配置动态库,此命令会报依赖异常,后续 openssh 编译也会报错.
1
/usr/local/openssl-3.1.0/bin/openssl version
(20240626 Update: 同步添加动态库路径,旧版可保留)
1
/usr/local/openssl-3.0.13/bin/openssl version
1.2 编译安装 OpenSSH
在安装过程中要保证 ssh 连接不会中断,否则可能存在无法连接的问题,需要通过 ipmi 进行维护。
-
备份现有配置,一般情况下配置会复用。
1
2cp /etc/ssh/sshd_config sshd_config.backup
cp /etc/pam.d/sshd sshd.backup -
清理现有 apt 安装的 openssh-server 版本。
1
2
3sudo apt remove openssh-server
# 可选步骤,清理不需要的安装包,默认清理的应该是ncurses-term openssh-sftp-server ssh-import-id
sudo apt autoremove(20240626 Update: 清理之前手动安装的版本)
1
2
3
4# 进入目录
cd openssh-9.3p1
# 清理旧版本
sudo make uninstall -
安装必要的依赖项,包括编译器、开发工具包、OpenSSL 开发库、Zlib 开发库和 PAM 开发库。
(20240626 Update: 该步骤无变化)
1
2
3
4
5
6
7
8sudo 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 -
获取源码,并进入对应目录,最新版本可从openssh 官网获取.
1
2
3
4
5
6
7
8
9# 下载
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: 下载当前最新版)
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 -
编译安装,安装路径为
/usr
,配置路径复用为/etc/ssh
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 路径)
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
2ssh -V
> OpenSSH_9.3p1, OpenSSL 3.1.0 14 Mar 2023(20240626 Update: 更新后新版内容如下)
1
2ssh -V
> OpenSSH_9.7p1, OpenSSL 3.0.13 30 Jan 2024 -
配置服务,手动编译安装后,需要重新配置服务
(20240626 Update: 该步骤无变化)
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