CentOs7.2升级版本为ssh服务版本 openssh10.5p1,openssl3.6.4 , sudo 1.9.18rc1

服务器版本太老了,有很多漏洞,必须升级openssh10.5p1,openssl3.6.4 , sudo 1.9.18rc1

升级版本为  openssh10.5p1,openssl3.6.4 , sudo 1.9.18rc1

 

一.环境准备

1.1禁用selinux

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

setenforce 0

  

下载源码包和rpm依赖包:openssh-10.5p1.tar.gz,openssl-3.6.4.tar.gz,sudo-1.9.18rc1.tar.gz,yumRPM7.2.tar.gz

yumRPM7.2.tar.gz包制作是用虚拟机联网下载的

命令:yum install --downloaddir=/root/temp --downloadonly gcc make   pam-devel zlib-devel perl-Time-Piece perl-core perl-IPC-Cmd    openssl-devel  

然后打包压缩temp目录。

 

二.编译OpenSSL

在 CentOS 7.2 上升到 OpenSSH 10.5p1 + OpenSSL 3.6.4,只能走源码编译

 2.1备份:

 cp -a /etc/ssh /etc/ssh.bak.$(date +%F)

cp -a /etc/pam.d/sshd /etc/pam.d/sshd.bak

cp -a /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak 2>/dev/null

cp /usr/sbin/sshd /usr/sbin/sshd.orig.bak

cp /usr/bin/ssh /usr/bin/ssh.orig.bak

 

2.2安装编译依赖:

上传文件 yumRPM7.2.tar.gz

tar -zxvf yumRPM7.2.tar.gz

cd temp

rpm -ivhU *  --nodeps --force

 

2.3编译 OpenSSL 3.6.4(独立目录)

 cd /usr/local/src

上传 openssl-3.6.4.tar.gz

 

tar zxf openssl-3.6.4.tar.gz

cd openssl-3.6.4

# 设置 CFLAGS 环境变量后重新配置

export CFLAGS="-std=gnu99"

./config --prefix=/usr/local/openssl-3.6.4 \

         --openssldir=/usr/local/openssl-3.6.4/ssl \

         shared zlib

 

make -j$(nproc)

 make install

 

建统一软链和动态库配置(不要动 /usr/lib64 下的 libssl.so.1.0.2/libcrypto.so.1.0.2):

ln -sf /usr/local/openssl-3.6.4 /usr/local/openssl

echo '/usr/local/openssl/lib64' > /etc/ld.so.conf.d/openssl-3.6.4.conf

ldconfig

/usr/local/openssl/bin/openssl version

 

查看输出的版本号:OpenSSL 3.6.4

 

三.编译 OpenSSH 10.5p1

 cd /usr/local/src

 上传openssh-10.5p1.tar.gz

  

tar zxf openssh-10.5p1.tar.gz

 cd openssh-10.5p1

 mkdir -p /var/empty

  

./configure \

   --prefix=/usr/local/openssh \

   --sysconfdir=/etc/ssh \

   --with-pam \

   --with-zlib \

   --with-ssl-dir=/usr/local/openssl \

   --with-sandbox=no \

   --with-privsep-path=/var/empty \

   --with-privsep-user=sshd

  

make -j$(nproc)

 make install

 

 可能报权限错误;

 # 修复权限

 chmod 600 /etc/ssh/ssh_host_*_key

 chown root:root /etc/ssh/ssh_host_*_key

  

# 验证

 ls -l /etc/ssh/ssh_host_*_key

 # 应该看到类似:-rw------- 1 root root ... ssh_host_rsa_key

  

重新install一次

 make install

  

去掉不支持的功能

 sed -i '/^GSSAPIAuthentication/s/^/#/' /etc/ssh/sshd_config

 sed -i '/^GSSAPICleanupCredentials/s/^/#/' /etc/ssh/sshd_config

  

验证二进制链接的是新 OpenSSL:

 ldd /usr/local/openssh/sbin/sshd | grep crypto

 /usr/local/openssh/bin/ssh -V

  

查看输出的版本号:OpenSSH_10.5p1, OpenSSL 3.6.4

  

三.接 systemd 并替换服务

 CentOS 7 原 rpm 的 sshd.service 可复用,但要把二进制指到新路径。

 id sshd || useradd -r -M -s /sbin/nologin -d /var/empty sshd

 chmod 755 /var/empty

  

vi /usr/lib/systemd/system/sshd.service(覆盖前已备份):

 

[Unit]

 Description=OpenSSH server daemon

 After=network.target

  

[Service]

 Type=notify

 Environment=LD_LIBRARY_PATH=/usr/local/openssl/lib64

 ExecStart=/usr/local/openssh/sbin/sshd -D $SSHD_OPTS

 ExecReload=/bin/kill -HUP $MAINPID

 KillMode=process

 Restart=on-failure

  

[Install]

 WantedBy=multi-user.target

  

 

PAM 用原系统文件即可(已备份 /etc/pam.d/sshd)。然后:

 # 保留主机密钥:不要 rm /etc/ssh/*,只让新配置覆盖需要的

 ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" -f /etc/ssh/ssh_host_ed25519_key <<<y 2>/dev/null

 ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N "" <<<y 2>/dev/null

 ssh-keygen -t ecdsa -b 521 -f /etc/ssh/ssh_host_ecdsa_key -N "" <<<y 2>/dev/null

  

# 确保 sshd_config 关键项

 grep -E '^HostKey|^UsePAM|^Subsystem' /etc/ssh/sshd_config

  

# 没有就补,编辑/etc/ssh/sshd_config:

 HostKey /etc/ssh/ssh_host_rsa_key

 HostKey /etc/ssh/ssh_host_ecdsa_key

 HostKey /etc/ssh/ssh_host_ed25519_key

 UsePAM yes

 Subsystem sftp /usr/local/openssh/libexec/sftp-server

  

重启系统服务

systemctl daemon-reload

 sshd -t -f /etc/ssh/sshd_config

 systemctl restart sshd

 systemctl status sshd

  

新建立一个非root用户,如果有非root用户则跳过此步骤,新配置默认禁止root远程登录

 useradd zhouxj

 passwd zhouxj

  

visudo 授权zhouxj

  

新开一个终端验证能登录,再确认版本和服务端口:

 ssh -V

 /usr/local/openssh/sbin/sshd -V

 ss -tlnp | grep :22

 

五.让系统默认 ssh/sshd 用新版

 

cp /usr/bin/ssh /usr/bin/ssh.rpm.bak

cp /usr/sbin/sshd /usr/sbin/sshd.rpm.bak

ln -sf /usr/local/openssh/bin/ssh /usr/bin/ssh

ln -sf /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen

ln -sf /usr/local/openssh/sbin/sshd /usr/sbin/sshd

  

六.回滚

如果新 sshd 起不来且无法登录:

systemctl stop sshd

cp /usr/sbin/sshd.rpm.bak /usr/sbin/sshd

cp -a /etc/ssh.bak.* /etc/ssh   # 或按需恢复 sshd_config、host keys、pam

systemctl daemon-reload

systemctl restart sshd

 

七.升级sudo 

sudo -V

 

7.1 备份系统 sudo 相关文件(很重要,出问题可回滚)

cp -a /usr/bin/sudo /usr/bin/sudo.bak.$(date +%F)

cp -a /etc/sudoers /etc/sudoers.bak.$(date +%F)

cp -a /etc/sudoers.d /etc/sudoers.d.bak.$(date +%F)

 

 

7.2安装依赖,前面已经安装过了,跳过

  

7.3编译

cd /usr/local/src

上传文件sudo-1.9.18rc1.tar.gz

 

tar xzf sudo-1.9.18rc1.tar.gz

cd sudo-1.9.18rc1

 

# 重新 configure,显式禁用 OpenSSL

 

./configure \

  --prefix=/usr/local/sudo \

  --libexecdir=/usr/local/sudo/libexec \

  --with-pam \

  --with-selinux \

  --with-secure-path \

  --with-env-editor \

  --without-openssl \

  --disable-log-server

 

make -j$(nproc)

make install

  

7.4装完验证:

/usr/local/sudo/bin/sudo -V | head -1

# 用绝对路径测试提权

/usr/local/sudo/bin/sudo id

测试没问题再做系统切换:

# 软链覆盖(保守)

ln -sf /usr/local/sudo/bin/sudo /usr/local/bin/sudo

 

# 把 /usr/local/sudo/bin 放到 PATH 最前面,避免用到旧 /usr/bin/sudo

echo 'export PATH=/usr/local/sudo/bin:$PATH' > /etc/profile.d/sudo-rc1.sh

source /etc/profile.d/sudo-rc1.sh

hash -r

sudo -V

 

查看输出的版本号:sudo 1.9.18rc1

  

7.5有问题,回滚sudo

 cp -a  /usr/bin/sudo.bak.$(date +%F)  /usr/bin/sudo  

cp -a  /etc/sudoers.bak.$(date +%F)  /etc/sudoers

cp -a  /etc/sudoers.d.bak.$(date +%F)  /etc/sudoers.d

 

 

 

 
posted @ 2026-10-14 10:00  阿星777  阅读(7)  评论(0)    收藏  举报