zlib openssl openssh 升级

zlib升级

安装编译环境

yum install vim gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel zlib-devel tcp_wrappers-devel tcp_wrappers perl-IPC-Cmd

解压zlib源码并编译

tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=/usr
make

卸载当前zlib

注意:此步骤必须在步骤A执行完毕后再执行,否则先卸载zlib后,/lib64/目录下的zlib相关库文件会被删除,编译zlib会失败。

查看系统安装的zlib
	rpm -qa | grep zlib
卸载zlib
	rpm -e --nodeps `rpm -qa | grep zlib`

安装之前编译好的zlib

在zlib编译目录执行如下命令
	make install

5、共享库注册

zlib安装完成后,会在/usr/lib目录中生产zlib相关库文件,需要将这些共享库文件注册到系统中。
	echo '/usr/lib' >> /etc/ld.so.conf
    ldconfig #更新共享库cache

openssl升级

解压openssl源码并编译安装

解压编译

tar -zxvf openssl-3.4.0.tar.gz
cd openssl-3.4.0
./config --prefix=/usr --openssldir=/etc/ssl --shared zlib	#必须加上--shared,否则编译时会找不到新安装的openssl的库而报错

备份当前系统ssl

find / -name openssl
/etc/pki/ca-trust/extracted/openssl
/usr/bin/openssl
/usr/lib64/openssl
/usr/include/openssl
	
mv -f /etc/pki/ca-trust/extracted/openssl /etc/pki/ca-trust/extracted/openssl.bak
mv -f /usr/bin/openssl /usr/bin/openssl.bak
mv -f /usr/lib64/openssl /usr/lib64/openssl.bak
mv -f /usr/include/openssl /usr/include/openssl.bak

如下两个库文件必须先备份,因系统内部分工具(如yum、wget等)依赖此库,而新版OpenSSL不包含这两个库
cp /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.10.bak
cp /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.10.bak

卸载当前openssl

rpm -qa | grep openssl
rpm -e --nodeps `rpm -qa | grep openssl`

安装ssl

make clean && make -j 4 && make test && make install 
echo "/usr/lcoal/ssl/lib" >> /etc/ld.so.conf
ldconfig
openssl version -a

恢复共享库

mv /usr/lib64/libcrypto.so.10.bak /usr/lib64/libcrypto.so.10
mv /usr/lib64/libssl.so.10.bak /usr/lib64/libssl.so.10

ssh升级

安装编译环境

如果只更新ssh需要安装编译环境,否则上面步骤已经安装过环境了
yum install vim gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel zlib-devel tcp_wrappers-devel tcp_wrappers perl-IPC-Cmd

编译源码

tar -zxvf openssh-9.9p1.tar.gz
cd openssh-9.9p1
./configure --prefix=/usr --sysconfdir=/etc/ssh          #(--prefix=/usr --sysconfdir=/etc/ssh 指定路径可以直接存储到对应文件位置)

备份+移除原来的文件

#(避免make install 的时候报错或者文件已存在不覆盖新文件)
	mv -f /usr/sbin/sshd /usr/sbin/sshd.bak
	mv -f /usr/bin/ssh /usr/bin/ssh.bak
	mv -f /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
	mv -f /etc/ssh /etc/ssh.bak
#如果是首次升级ssh 需要卸载系统自带ssh,导致删除下面文件,所以需要先进行备份
	cp -f /etc/pam.d/sshd /etc/pam.d/sshd.bak
	cp -f /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak
	cp -f /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak

卸载系统自带ssh

rpm -qa | grep openssh
rpm -e --nodeps `rpm -qa | grep openssh`
rpm -qa | grep openssh

安装最新版本

make &&  make install

恢复/创建 sshd.service

# 卸载系统自带ssh会删除启动文件需要创建系统启动文件
#1、恢复原来的文件
cp /usr/lib/systemd/system/sshd.service.bak /usr/lib/systemd/system/sshd.service
#2、在对应目录新建sshd.service并粘贴以下内容
vim /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.target
Wants=sshd-keygen.target

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

恢复卸载自带ssh后删除的文件,如果没有该文件将无法登录

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

配置ssh

#(允许root登录 允许密码认证等,可以从原来的备份复制过来,注意:有可能有些配置不能使用)
	vim /etc/ssh/sshd_config
# 或者直接从备份文件中恢复

重新加载启动文件

systemctl daemon-reload

重启ssh

systemctl restart sshd

设置开机自启

systemctl enable sshd

查看ssh版本、查看sftp是否正常

ssh -V

报错小计

升级成功但是使用密码登录访问拒绝,报错 error: Could not get shadow information for root

​ 原因:默认情况下,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直接读取影子文件被认为存在潜在的安全风险。

解决方案

方案一:(太过粗放霸道)

​ 通过setenforce关闭selinux即可,或者编辑 /etc/selinux/config 文件,修改如下设置:

SELINUXTYPE=disabled

​ 重启服务器,用以永久禁用SELinux。

方案二:(创建selinux策略,放行sshd直接读shadow)

​ 参考链接:https://access.redhat.com/solutions/46137
​ 需要提前确保这两个工具包已安装:checkpolicy、policycoreutils-python

vi /etc/ssh/ssh_password 
#添加以下内容

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 };

添加策略文件到系统

cd /etc/ssh/

checkmodule -M -m -o ssh_password.mod ssh_password

semodule_package -o ssh_password.pp  -m ssh_password.mod

ll ssh_password*
-rw-r--r--. 1 root root 187 Mar 20 12:07 ssh_password
-rw-r--r--. 1 root root 926 Mar 20 12:08 ssh_password.mod
-rw-r--r--. 1 root root 942 Mar 20 12:08 ssh_password.pp

semodule -i ssh_password.pp

semodule -l |grep ssh
rssh
ssh
ssh_password  #已添加的策略

方案三:启动UsePAM yes,由pam_unix去读取shadow文件。(该方案试过无效,当前最新版本ssh不支持UsePAM)

​ 1、升级openssh之前,备份原有配置文件

mv /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
mv /etc/pam.d/sshd /etc/pam.d/sshd_bak

​ 2、升级完成之后备份新的配置文件,恢复原来的配置

mv /etc/pam.d/sshd /etc/pam.d/sshd_new
mv /etc/ssh/sshd_config /etc/ssh/sshd_config_new
mv /etc/ssh/sshd_config_bak /etc/ssh/sshd_config
mv /etc/pam.d/sshd_bak /etc/pam.d/sshd 

注意:使用本方案,需要使用老的/etc/pam.d/sshd文件,否则会报错:

sshd-session[19991]: PAM unable to dlopen(/usr/lib64/security/pam_stack.so): /usr/lib64/security/pam_stack.so: cannot open shared object file: No such file or directory
sshd-session[19991]: PAM adding faulty module: /usr/lib64/security/pam_stack.so

其他报错信息

sshd-session[21108]: error: Received disconnect from 192.168.14.143 port 42902:14: Unable to authenticate using any of the configured authentication methods.  [preauth]

原因:配置了PermitRootLogin prohibit-password或passwordauthentication no

原因:配置了PermitRootLogin prohibit-password或passwordauthentication no

sshd-session[19991]: PAM unable to dlopen(/usr/lib64/security/pam_stack.so): /usr/lib64/security/pam_stack.so: cannot open shared object file: No such file or directory
sshd-session[19991]: PAM adding faulty module: /usr/lib64/security/pam_stack.so

原因:配置了usepam yes,然使用的/etc/pam.d/sshd 是新的,需要使用旧文件替代。

本文参考链接:
https://blog.csdn.net/avatar_2009/article/details/129665320
https://www.cnblogs.com/wzh19820101/p/12095850.html

posted @ 2024-11-06 14:15  奶油炒白菜  阅读(17)  评论(0编辑  收藏  举报