centos9升级OpenSSH

需求

Centos9系统升级OpenSSH和OpenSSL

OpenSSH升级为openssh-9.8p1

OpenSSL默认为OpenSSL-3.2.2(根据需求进行升级)

将源码包编译为rpm包

查看OpenSSH和OpenSSL版本

shell 复制代码
ssh -V

下载源码包并上传到服务器

openssh最新版本下载地址

shell 复制代码
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz

OpenSSL下载地址

shell 复制代码
wget https://github.com/openssl/openssl/releases/download/openssl-3.2.3/openssl-3.2.3.tar.gz

编译工具下载配置

shell 复制代码
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版本

shell 复制代码
$ pwd
/opt/openssh-rpms-main
$ vim version.env

将下载的源码包放到downloads目录

shell 复制代码
$ 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文件

shell 复制代码
vim el7/SPECS/openssh.spec
shell 复制代码
install -m755 contrib/ssh-copy-id $RPM_BUILD_ROOT/usr/bin/ssh-copy-id
shell 复制代码
%attr(0755,root,root) %{_bindir}/ssh-copy-id

下载编译工具和依赖

shell 复制代码
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包

shell 复制代码
./compile.sh

生产rpm包的位置

shell 复制代码
$ 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

备份原有配置

shell 复制代码
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

安装

shell 复制代码
$ pwd
/opt/openssh-rpms-main/el7/RPMS/x86_64
$ yum localinstall -y openssh-*.rpm
shell 复制代码
chmod 0600 /etc/ssh/ssh_host_rsa_key
chmod 0600 /etc/ssh/ssh_host_ecdsa_key
chmod 0600 /etc/ssh/ssh_host_ed25519_key

还原备份文件

shell 复制代码
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

添加内核防火墙策略(可选)

如果内核防火墙是开启的状态

shell 复制代码
vim /etc/ssh/ssh_password
shell 复制代码
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 };
shell 复制代码
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直接读取影子文件被认为存在潜在的安全风险。

重启sshd

shell 复制代码
systemctl restart sshd

检查ssh版本

shell 复制代码
ssh -V
相关推荐
焄塰3 小时前
Ansible 管理变量和事实
学习·centos·ansible
炫友呀3 小时前
Centos 更新/修改宝塔版本
linux·运维·centos
wml000005 小时前
CentOS启动两个MySQL实例
mysql·centos·3406
zzc9216 小时前
TLSv1.2协议与TCP/UDP协议传输数据内容差异
网络·测试工具·安全·wireshark·ssl·密钥·tlsv1.2
林开落L7 小时前
库制作与原理(下)
linux·开发语言·centos·库制作与原理
运维自动化&云计算3 天前
Centos虚拟机硬盘报错,根分区满,已用显示为负40G
linux·运维·centos
妮妮喔妮3 天前
SSH协议的GIT转换
运维·git·ssh
conkl3 天前
Linux 零基础万字入门指南(进阶详解版)
linux·运维·服务器·ssh·文件管理·shell·linux基础
TLucas3 天前
在CentOS 7上将PostgreSQL数据库从默认路径迁移到自定义目录
linux·运维·postgresql·centos
Tearstornbyrain4 天前
在Ubuntu24.04中使用ssh连接本地git仓库到github远程仓库
linux·git·ubuntu·ssh·github