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
相关推荐
心灵宝贝1 天前
CentOS 7 安装 net-tools.rpm 包步骤详解(附 rpm 命令和 yum 方法)附安装包
linux·运维·centos
某zhuan1 天前
云计算实验1——CentOS中hadoop的安装
hadoop·centos·云计算
奥尔特星云大使1 天前
mysql重置管理员密码
linux·运维·数据库·mysql·centos
小白电脑技术1 天前
飞牛NAS的SSL证书过期,又开启了强制HTTPS,进不去界面修改SSL怎么办?
ssl
Bruce_Liuxiaowei2 天前
解锁 SSH 的完整潜力:从登录到隧道,再到自动化
运维·自动化·ssh
和光同尘20232 天前
CentOS7搭建ELK日志分析系统
运维·elasticsearch·云原生·kubernetes·centos·kibana·logstash
杨云龙UP2 天前
CentOS 7上离线部署MySQL 8.0.X操作指南(二进制压缩包部署+独立目录部署,不在自动默认路径配置下安装)
linux·运维·服务器·mysql·centos
1白天的黑夜12 天前
Linux(4)|入门的开始:Linux基本指令(4)
linux·运维·服务器·centos
Suger9992 天前
centos网络打流测试
linux·网络·centos
1024find2 天前
Docker安装(Centos/Ubuntu/UOS)
ubuntu·docker·centos·debian