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
相关推荐
liulilittle1 小时前
CentOS7/Ubuntu SSH配置允许ROOT密码登录
linux·运维·服务器·ubuntu·centos·ssh
deepwater_zone10 小时前
Linux下 使用 SSH 完成 Git 绑定 GitHub
linux·git·ssh
看到千里之外的云13 小时前
Oracle 11g post PSU Oct18 设置ssl连接(使用jks)
数据库·oracle·ssl
言之。17 小时前
CentOS 7上BIND9配置DNS服务器指南
linux·centos
java之迷17 小时前
jenkins使用Send build artifacts over SSH发布jar包目录配置
ssh·jenkins·jar
发非人非18 小时前
CentOS 下 FTP 与 NFS 服务深度解析:从基础配置到实战应用
linux·运维·centos
wuzhenwei041919 小时前
centos系统redis-dump安装
linux·redis·centos
迷雾骑士19 小时前
CentOS Stream安装MinIO教程
centos·minio
shane-u19 小时前
【已解决】docker search --limit 1 centos Error response from daemon
docker·容器·centos
FBI HackerHarry浩1 天前
Linux云计算训练营笔记day13[CentOS 7 find、vim、vimdiff、ping、wget、curl、RPM、YUM]]
linux·运维·笔记·centos·云计算