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
相关推荐
qetfw2 小时前
CentOS 7 vsftpd.conf 配置文件详解:监听、用户、权限、被动模式与 TLS
linux·运维·centos·ftp·vsftpd
AlbertS3 小时前
Let‘s Encrypt 证书自动续期并自动应用到Nginx
运维·nginx·ssl·cerbot·renew·续期
如若1233 小时前
Ubuntu 无 sudo 安装花生壳并实现 SSH 内网穿透:Conda 环境部署、冲突排查与自动启动
linux·运维·ubuntu·ssh·内网穿透
老杨聊技术17 小时前
CentOS 7 安装 MySQL 8 保姆级教程
linux·mysql·centos
qetfw18 小时前
CentOS 7 搭建 vsftpd:匿名用户、本地用户、虚拟用户与 FTPS
linux·运维·centos·ftp·vsftpd
芳草萋萋鹦鹉洲哦1 天前
【git】重新生成并添加 SSH Key(Mac)
git·macos·ssh
午安~婉1 天前
git中http与ssh连接
git·http·ssh
炸膛坦客2 天前
Git 和 GitHub:(七)将本地新建仓库与 GitHub 远程仓库关联起来(SSH)
git·ssh·github
AOwhisky2 天前
Linux(CentOS)系统管理入门笔记(第十五期)——文件系统与存储管理(上篇):设备识别、挂载与文件查找
linux·运维·笔记·centos·文件系统
三言老师2 天前
CentOS7 / 8 yum 查询软件安装路径实操
运维·服务器·网络·centos