Loading... 本方法在 `Debian10`、`Ubuntu 20.04 LTS`、`Ubuntu 22.04 LTS` 上测试通过,<span style='color:#DC143C'>**此方法不可用于 Ubuntu 16 及更低系统**</span> 本方法在 `CentOS 7` 上测试通过,<span style='color:#DC143C'>**此方法不可用于 CentOS 6/RedHat 6 及更低系统**</span> ## 安装依赖 ### Ubuntu/Debain 安装 `libpam0g-dev` 依赖包 > 因为编译过程中需要使用 PAM(可插拔认证模块)库的头文件和开发工具,所以需要这个依赖 ``` apt-get install libpam0g-dev -y ``` ### CentOS 7/RedHat 7 安装 `pam-devel` 依赖包 > 因为编译过程中需要使用 PAM(可插拔认证模块)库的头文件和开发工具,所以需要这个依赖 ``` yum -y install pam-devel ``` 如果没有外网,可[下载 rpm 包](https://rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/pam-devel-1.1.8-23.el7.x86_64.rpm),然后通过 `rpm -ivh pam-devel-1.1.8-23.el7.x86_64.rpm` 安装 ## 更新 Zlib ```bash # 切换工作目录 mkdir /home/soft -p cd /home/soft # 下载 zlib 源码包(如果没有外网要手动下载到 /home/soft ) wget http://www.zlib.net/zlib-1.3.1.tar.gz # 解压 zlib 源码包 tar zxvf zlib-1.3.1.tar.gz cd zlib-1.3.1/ # 编译安装 ./configure --shared make && make install ``` ## 安装新版 OpenSSL ```bash # 切换工作目录 cd /home/soft # 下载 openssl 源码包(如果没有外网要手动下载到 /home/soft ) wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz # 解压 openssl 源码包 tar zxvf openssl-1.1.1w.tar.gz cd openssl-1.1.1w # 编译安装 openssl # 编译参数说明: # --prefix=/usr/local/openssl 指定安装路径 # shared 构建共享库版本的 OpenSSL # zlib 使用系统上已安装的 zlib 库 ./config --prefix=/usr/local/openssl shared zlib make depend make make install # 备份旧版 openssl mv /usr/bin/openssl /usr/bin/openssl.bak # 链接新版 openssl ln -sv /usr/local/openssl/bin/openssl /usr/bin/openssl # 链接证书 mv /usr/local/openssl/ssl/certs /usr/local/openssl/ssl/certs.bak ln -s /etc/ssl/certs /usr/local/openssl/ssl/certs ``` 编辑文件 `/etc/ld.so.conf`,在顶部加入下面两行,然后保存。 > `ld.so.conf` 用于指定动态链接器 `ld.so` 在程序运行时查找共享库文件的路径,所以这里要加入新安装的 openssl 库路径) ``` /usr/local/openssl/lib /usr/local/openssl/lib64 ``` 应用配置 ```bash ldconfig -v ``` 查看版本号,如果显示最新的版本号(`OpenSSL 1.1.1w 11 Sep 2023`),则安装成功 ```bash openssl version ``` ## 安装新版 OpenSSH ```bash # 备份配置文件 cp -r /etc/ssh /etc/ssh.bak # 切换工作目录 cd /home/soft # 下载 openssh 源码包(如果没有外网要手动下载到 /home/soft ) wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz # 解压 openssh 源码包 tar zxvf openssh-9.8p1.tar.gz cd openssh-9.8p1 # 编译安装 openssh # configure 编译参数说明: # --prefix=/usr/local/openssh 指定安装路径 # --sysconfdir=/etc/ssh 指定 OpenSSH 配置文件目录 # --with-md5-passwords OpenSSH 使用 MD5 加密算法来处理密码 # --with-zlib 启用 zlib 支持 # --with-pam 启用 PAM 支持 # --with-ssl-dir=/usr/local/openssl 指定 OpenSSL 的安装路径 # --with-privsep-path=/var/lib/ssh 指定特权分离路径 ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-ssl-dir=/usr/local/openssl --with-privsep-path=/var/lib/ssh make make install # 主机密钥文件需要设置合适的权限,不能太大 chmod 600 /etc/ssh/ssh_host_* # 备份旧版 sshd mv /usr/sbin/sshd /usr/sbin/sshd.bak # 链接新版 sshd ln -s /usr/local/openssh/sbin/sshd /usr/sbin/sshd # 设置 SELinux 上下文(这一步只有 CentOS/RedHat 需要运行,Debian 系不需要) chcon -t sshd_exec_t /usr/local/openssh/sbin/sshd chcon -t sshd_exec_t /usr/sbin/sshd ``` 按实际环境需求修改 `/etc/ssh/sshd_config` 配置文件: ``` # 端口号 Port 22 # 启用 root 用户登录 PermitRootLogin yes # 允许密码登录 PasswordAuthentication yes # 启用 PAM UsePAM yes # SFTP 服务端 Subsystem sftp /usr/local/openssh/libexec/sftp-server ``` 修改 sshd 服务 `/lib/systemd/system/ssh.service` 配置文件,将 `Type=notify` 修改成 `Type=simple`,保存 然后运行命令重启 sshd 服务,注意此时不要断开终端 ```bash # 重载服务 systemctl daemon-reload # 重启 sshd 服务 service sshd restart ``` 查看服务运行状态,如果在 running 状态就是成功了 ```bash service sshd status ```  查看 sshd 版本(虽然没有 -v 这个参数,但这样可以看到版本号) ```bash sshd -v ```  创建一个新的连接,能正常连上就是更新完成了~ ## 可能遇到的问题 ### 更新后出现 SFTP 无法连接的问题 修改 sshd 配置文件 `/etc/ssh/sshd_config`,注释之前的 sftp 服务器,新增一行 ```bash #Subsystem sftp /usr/lib/openssh/sftp-server Subsystem sftp internal-sftp ``` ### 更新 OpenSSL 后部分程序出现证书验证问题 `[SSL: CERTIFICATE_VERIFY_FAILED]` <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://blog.qwerto.cc/openssl-certificate-verify-failed" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://blog.qwerto.cc/usr/uploads/2024/03/2435481600.png);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">系统 OpenSSL 更新后证书验证失败 [SSL: CERTIFICATE_VERIFY_FAILED]</p> <div class="inster-summary text-muted"> 问题更新系统 OpenSSL 后,部分程序出现证书验证问题例如 Python: [SSL: CERTIFICATE... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> ### 更新后,sshd 日志提示部分配置项不支持  新版本不支持这两个配置项,在 `/etc/ssh/sshd_config` 配置文件中找到对应的行,注释或删除,然后重启 sshd 服务就可以了 最后修改:2024 年 07 月 03 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏