openssl与openssh需要经常修复漏洞,编译安装步骤供参考,适用ubuntu版本,其他版本类似
安装编译依赖包
apt update
aptinstall gcc make zlib1g-dev libpam0g-dev libkrb5-dev libedit-dev -y
操作系统openssl版本查看:
推荐根据操作系统默认版本下载对应修复版本
ubuntu20.04 openssl版本:OpenSSL 1.1.1f
ubuntu22.04 openssl版本:OpenSSL 3.0.2
安装 OpenSSL
首先,使用 wget 命令下载 OpenSSL 的源代码压缩包。从 OpenSSL 官方网站上找到最新版本的源代码。
#ubuntu20.04wget https://www.openssl.org/source/openssl-1.1.1v.tar.gz
#ubuntu22.04wget https://www.openssl.org/source/openssl-3.0.10.tar.gz
如下以ubuntu20.04示例:
解压源代码
使用 tar 命令解压源代码压缩包。
tar-zxf openssl-1.1.1v.tar.gz
切换到解压后的源代码目录。
cd openssl-1.1.1v/
配置编译选项:
运行以下命令配置编译选项。(是否加shared 、zlib参数都可以进行后面的openssh安装)
将 OpenSSL 安装到 /usr/local/openssl 目录下,并设置 openssldir 为同样的路径。
./config shared --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
编译和安装:
运行 make 命令进行编译,然后使用 make install 命令进行安装。请确保您具有足够的权限来执行此操作, **
make
** 可替换为 **
make -j4
** 并行处理(其中的数字 4 表示允许并行运行的任务数)
make&&makeinstall
备份原来的openssl
mv /usr/bin/openssl /usr/bin/openssl.bak
创建软链接到系统位置
ln-s /usr/local/openssl/bin/openssl /usr/bin/openssl
将openssl 的lib 库添加到系统(‘/usr/local/openssl/lib’ 单引号)
echo'/usr/local/openssl/lib'> /etc/ld.so.conf.d/openssl.conf
#openssl 3.x.x版本是: /usr/local/openssl/lib64/ 路径#echo '/usr/local/openssl/lib64' > /etc/ld.so.conf.d/openssl.conf
加载lib库 (可加 -v 参数查看详细显示)
ldconfig
看看openssl版本
openssl version
现在,您已经成功在 Ubuntu 20.04 上编译安装了 OpenSSL 1.1.1v。**
如果您在安装其他软件时需要使用 OpenSSL,请确保相应的软件能够找到新安装的 OpenSSL 路径。
**
openssh安装
**
注意: 操作前需备份好已安全加固的配置文件
**(新环境可忽略)
若网络不稳定进行升级,建议临时安装telnetd服务,避免终端中断无法远程操作,由于telnet服务存在不安全因素,建议升级验证完后进行卸载 (apt install telnetd -y)
备份文件,防止现有配置丢失
cp-a /etc/pam.d/sshd /mnt/sshd-bak-`date +%F`cp-a /etc/ssh/sshd_config /mnt/sshd_config-bak-`date +%F`
下载openssh
采用清华源国内镜像站下载,也可从openssh官网下载
wget https://mirrors.tuna.tsinghua.edu.cn/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz
若下载认证提示未通过可添加--no-check-certificate 参数跳过认证
wget https://mirrors.tuna.tsinghua.edu.cn/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz --no-check-certificate
解压openssh
tar-zxf openssh-9.4p1.tar.gz
进入解压目录
cd openssh-9.4p1/
配置参数
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-kerberos5 --with-libedit --with-pam --with-gssapi --with-zlib --with-ssl-dir=/usr/local/openssl --with-privsep-path=/var/lib/sshd
编译与安装
make&&makeinstall
编辑配置文件
注释Type=notify参数或者修改为Type=simple
vim /lib/systemd/system/ssh.service
注释Type=参数快捷方式
sed-i'/^Type=/s/^/#/' /lib/systemd/system/ssh.service
重新加载配置并重启sshd生效
systemctl daemon-reload
systemctl restart sshd
查看openssh 版本
ssh-V
openssh升级后root用户无法远程登录 (可选操作,根据实际环境要求选择是否开启)
编辑sshd_config配置文件PermitRootLogin参数为yes,保存并重启sshd
PermitRootLogin yes
**隐藏版本号:
本地执行’ssh -V"任可见,根据实际版本号进行替换,
x.x
可为任意字母或数字**
根据ssh-V 和 strings /usr/sbin/sshd|grep ‘OpenSSH_’ 确定要修改的版本(ssh远程时版本号后一般不带字母)
备份文件
cp-a /usr/sbin/sshd /usr/sbin/sshd-bak-`date +%F`
修改版本号
sed-i's/OpenSSH_9.4/OpenSSH_x.x/g' /usr/sbin/sshd
重启sshd服务
systemctl restart sshd
验证隐藏版本号
使用nmap工具进行验证或新建连接方式查看,版本号变为OpenSSH x.x (nmap安装:apt install nmap)
nmap -p22-sV-v-n 主机ip
PORT STATE SERVICE VERSION
22/tcp openssh OpenSSH x.x (protocol 2.0)
安全加固
修复diffie-hellman 漏洞,去掉diffie-hellman开头的参数
[email protected]
参数在openssh 8.5版本引入,9.0版本中默认添加
openssh升级后rke 启动集群报ssh认证错误:(非安全加固,统一添加sshd配置)
PubkeyAcceptedKeyTypes=+ssh-rsa
sshd_config 配置最后添加
vim /etc/ssh/sshd_config
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
kexalgorithms [email protected],ecdh-sha2-nistp384,ecdh-sha2-nistp521
MACs [email protected],[email protected]
PubkeyAcceptedKeyTypes=+ssh-rsa
重启sshd
systemctl restart sshd
FAQ:
openssl与openssh编译后是否可删除原系统默认安装的opensl与openssh
答:建议都保留
针对openssl
若狠心删除,openssl软链接的是原系统的openssl执行文件,删除原系统默认安装的opensl后会将openssl执行文件一并删除,从新创建一次软连接即可
apt remove openssl
ln-s /usr/local/openssl/bin/openssl /usr/bin/openssl
针对openssh
openssh编译时已指定/etc/ssh路径,删除不仅把原系统安装的openssh卸载,编译安装的也会卸载,建议保留,若已删除,请从新按openssh编译安装执行
openssl有新版本怎么升级
答:下载新版本,解压并进入目录,再次运行编译与安装、加载lib库、查看版本号是否更新即可,无需其他操作
./config shared --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
make&&makeinstall
ldconfig -v
若普通用户执行openssl version还是之前安装的版本,但是root用户显示却是已升级的版本
openssl安装目录权限添加普通用户可读设置(正常编译安装应该不存在需要再次设置权限问题)
find /usr/local/openssl/ -type d |xargschmod o+r
ssh.service配置文件注释Type=notify参数目的
答:编译安装完后,执行sshd重启systemctl restart sshd命令会一直等待最后超时,暂且注释Type=notify参数后不通知systemd管理,如有高人知晓还请不吝赐教,欢迎评论和联系
版权归原作者 liuxin638507 所有, 如有侵权,请联系我们删除。