OpenSSH和OpenSSL升级(rpm包方式)
需求#
升级OpenSSH和OpenSSL
OpenSSH升级为openssh9.8
OpenSSL升级为openssl-3.2.3
下载openssh最新版本与openssl对应版本#
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
这里下载的是3.2.3
wget https://github.com/openssl/openssl/releases/download/openssl-3.2.3/openssl-3.2.3.tar.gz
Openssl安装#
安装前检查#
查看Centos系统版本信息
cat /etc/redhat-release
查看openssl版本信息
openssl version
查看ssh版本信息
ssh -V
安装openssl#
由于openssh9.8p1要求openssl版本大于等于1.1.1,因此需要升级安装openssl
解压
tar xf openssl-3.2.3.tar.gz -C /usr/local/
创建安装目录
mkdir /opt/openssl
编译安装
# 安装编译工具和prel依赖
yum -y install gcc make perl-IPC-Cmd perl-Data-Dumper
# 进入解压目录
cd /usr/local/openssl-3.2.3/
./config --prefix=/opt/openssl
make && make install
更新lib文件#
检查openssl-3.2.3所需要的函数库
ldd /opt/openssl/bin/openssl
添加openssl-3.2.3的库文件路径到ld.so.conf
echo "/opt/openssl/lib64" >> /etc/ld.so.conf
更新系统函数库
ldconfig --verbose
查看旧版本的openssl命令路径
which openssl
重名为openssl.old
mv /bin/openssl /bin/openssl.old
使用软连接的方式更新openssl命令
ln -s /opt/openssl/bin/openssl /bin/openssl
查看openssl版本
openssl version
查看OpenSSH和OpenSSL版本
ssh -V
编译工具下载配置#
wget https://gitee.com/boforest/boforest/raw/master/OpenSSH/openssh-rpms-main.zip
unzip openssh-rpms-main.zip
cd openssh-rpms-main/
compile.sh:编译脚本
el5、el6、el7:对应CentOS5、6、7三个系统,编译相关的参数由SPECS目录下的openssh.spec控制。
编译好的rpm包放在RPMS目录下
pullsrc.sh:openssh相关源码下载脚本
version.env:定义了openssh及openssl源码的版本信息
CentOS Stream release 9 可以使用 el7 的版本编译
修改OpenSSL版本
$ pwd
/opt/openssh-rpms-main
$ vim version.env
将下载的源码包放到downloads目录
$ pwd
/opt/openssh-rpms-main/downloads
$ ls
openssh-9.8p1.tar.gz openssl-3.2.3.tar.gz x11-ssh-askpass-1.2.4.1.tar.gz
修改openssh.spec文件
vim el7/SPECS/openssh.spec
install -m755 contrib/ssh-copy-id $RPM_BUILD_ROOT/usr/bin/ssh-copy-id
%attr(0755,root,root) %{_bindir}/ssh-copy-id
下载编译工具和依赖
yum groupinstall -y "Development Tools"
yum install -y make rpm-build pam-devel krb5-devel zlib-devel libXt-devel libX11-devel gtk2-devel perl
生成rpm包#
./compile.sh
生产rpm包的位置
$ ls el7/RPMS/x86_64/
openssh-9.8p1-1.el9.x86_64.rpm openssh-debugsource-9.8p1-1.el9.x86_64.rpm
openssh-clients-9.8p1-1.el9.x86_64.rpm openssh-server-9.8p1-1.el9.x86_64.rpm
openssh-clients-debuginfo-9.8p1-1.el9.x86_64.rpm openssh-server-debuginfo-9.8p1-1.el9.x86_64.rpm
openssh-debuginfo-9.8p1-1.el9.x86_64.rpm
升级OpenSSH#
备份原有配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
cp /etc/pam.d/sshd /etc/pam.d/sshd.backup
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.backup
安装
$ pwd
/opt/openssh-rpms-main/el7/RPMS/x86_64
$ yum localinstall -y openssh-*.rpm
chmod 0600 /etc/ssh/ssh_host_rsa_key
chmod 0600 /etc/ssh/ssh_host_ecdsa_key
chmod 0600 /etc/ssh/ssh_host_ed25519_key
还原备份文件
cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config
cp /etc/pam.d/sshd.backup /etc/pam.d/sshd
cp /etc/pam.d/system-auth.backup /etc/pam.d/system-auth
添加内核防火墙策略(可选)
如果内核防火墙是开启的状态
vim /etc/ssh/ssh_password
module ssh_password 1.0;
require {
type sshd_t;
type shadow_t;
class file { read open };
}
#============= sshd_t ==============
allow sshd_t shadow_t:file { read open };
cd /etc/ssh/
# 编译模块
checkmodule -M -m -o ssh_password.mod ssh_password
# 打包模块
semodule_package -o ssh_password.pp -m ssh_password.mod
# 安装模块
semodule -i ssh_password.pp
# 验证模块安装
$ semodule -l | grep ssh
rssh
ssh
ssh_password
产生的原因:
原因一:
如果内核防火墙是开启的,不添加策略就会出现连接不上的错误(内核防火墙是关闭的可以忽略)默认情况下,sshd使用PAM检查密码。sshd使用的PAM模块之一是pam_unix。这个模块首先尝试直接读取/etc/shadow。如果权限被拒绝,则执行/sbin/unix_chkpwd。unix_chkpwd接受用户名和密码,并向pam_unix指示密码是否与用户名匹配。这里的问题是,由于“PAM”在这里被禁用,sshd试图直接访问shadow文件。因为没有selinux规则允许这样的直接访问,所以selinux拒绝这样做。目标策略只允许unix_chkpwd (chkpwd_t)和unix_update (updpwd_t)程序读取/etc/shadow。允许sshd直接读取影子文件被认为存在潜在的安全风险。
原因二:
vim /etc/ssh/sshd_config
打开这个注释
重启sshd
systemctl restart sshd
检查ssh版本
ssh -V
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~