0


openssh-浅谈openssl和openssh的升级

2023年1月-博主最近将文档进行了更新,着重如果去更新和操作的过程

  • 以前原文已放后面链接:原文:openssh-浅谈openssl和openssh的升级
  • 关于linux漏洞升级的科普文章:linux科普:如何标准的安装和升级软件

以下为正文部分

(本文仅举例Centos下操作方法,其他环境根据自己版本修改下载网址)

一、 标准升级方法

1、 在线升级

yum update openssh

2、 离线升级

前往RPM Search下载对应系统版本的openssh的rpm包进行升级

rpm -Uvh openssh-7.4p1-22.el7_9.x86_64.rpm

二、 手动下载编译包进行升级

1、 环境说明

2、 检查升级前openssl和openssh版本

3、 更新openssl

补充:

  • 编译安装
  • 升级前:OpenSSL 1.0.2k-fips
  • 升级后:OpenSSL 1.1.1s(2022-12)

a) 检查当前版本和路径

openssl version
which openssl

b) 安装依赖

#在线安装依赖
yum -y install gcc zlib zlib-devel gcc perl pam-devel

#离线安装依赖
1-在有互联网的机器,提前缓存离线包,执行以下命令
mkdir /home/yilai
yum install gcc zlib zlib-devel gcc perl --downloadonly --downloaddir=/home/yilai

2-将刚才下载的依赖文件夹的安装包拷贝到内网机器进行安装
yum localinstall ./*.rpm

c) 下载openssl升级包

#下载官网安装包-2022-12
https://www.openssl.org/source/openssl-1.1.1s.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1s.tar.gz --no-check-certificate

#解压并编译安装
tar -xzvf openssl-1.1.1s.tar.gz
cd openssl-1.1.1s/ && ./config --shared zlib
make && make install

#备份以前的文件
#在/home下创建opensslbak作为备份文件夹
mkdir -p /home/opensslbak
cd /home/opensslbak
ll /usr/bin/openssl
ll /usr/include/openssl
mv /usr/bin/openssl /home/opensslbak/
mv /usr/include/openssl /home/opensslbak/

#挂载新的文件
ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl/ /usr/include/openssl
echo "/usr/local/lib/" >> /etc/ld.so.conf
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
ldconfig -v

#测试是否正常更新
bash
openssl version
OpenSSL 1.1.1s 1 Nov 2022

4、 安装telnet,防止ssh升级错误无法连接远程

#在线安装
yum install telnet telnet-server xinetd -y

#离线安装telnet-server
1-在有互联网的机器,提前缓存离线包,执行以下命令
mkdir /home/telnet
yum install telnet telnet-server xinetd --downloadonly --downloaddir=/home/telnet

2-将刚才下载的依赖文件夹的安装包拷贝到内网机器进行安装
yum localinstall ./*.rpm -y

#关闭防火墙和selinux
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sestatus

#启动服务
systemctl start telnet.socket
systemctl start xinetd
systemctl status telnet.socket
systemctl status xinetd
systemctl enable telnet.socket
systemctl enable xinetd

#重启服务
echo 'pts/0' >>/etc/securetty
echo 'pts/1' >>/etc/securetty
systemctl restart telnet.socket
systemctl restart xinetd
systemctl status telnet.socket
systemctl status xinetd

#停止服务
systemctl stop telnet.socket

5、 升级openssh

补充:

  • 编译安装
  • 升级前:OpenSSH_7.4p1
  • 升级后:OpenSSH_9.1p1, OpenSSL 1.1.1s 1 Nov 2022

a) 下载新版和备份老的ssh文件

https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.1p1.tar.gz

cd /home/
wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.1p1.tar.gz --no-check-certificate
tar xfz openssh-9.1p1.tar.gz
chown -R root:root openssh-9.1p1 && cd ./openssh-9.1p1

#备份ssh文件夹
mkdir -p /home/sshbak
cp -arp /etc/ssh /home/sshbak/
mv /etc/ssh /etc/ssholdbak

b) 设置编译参数和编译安装,注意要更新openssl后才能生效

cd ./openssh-9.1p1

./configure --prefix=/usr/ --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/ssl/include --with-ssl-dir=/usr/local/ssl/lib/ --with-zlib --with-md5-passwords --with-pam

make && make install

c) 修改配置文件/etc/ssh/sshd_config,取消注释以下文件

#根据自己需要调整sshd配置文件,参考如下
vim /etc/ssh/sshd_config 

32 PermitRootLogin yes                                          #允许root登录,root用户必须添加
41 AuthorizedKeysFile      .ssh/authorized_keys    #指定公钥文件的保存位置以及名称
57 PasswordAuthentication yes                             #允许密码验证
82 UsePAM yes                                                      #PAM模块
98 UseDNS no                                                        #关闭dns检测
109 Subsystem       sftp    /usr/libexec/sftp-server    #开启SFTP并指定路径

d) 检测文件配置测试

/usr/sbin/sshd -t -f /etc/ssh/sshd_config

e) 修改pam认证文件

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

cat > /etc/pam.d/sshd << 'EOF'
#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
EOF

f) 添加互信命令文件ssh-copy-id

#mv /usr/bin/ssh-copy-id /home/sshbak/
cd /home/openssh-9.1p1
install -v -m755 contrib/ssh-copy-id /usr/bin

三、 升级后配置openssh开机自启

1、 配置sysyemd托管,生成服务文件

熟悉服务的也可以自己编写托管服务

#使用自动脚本生成systemd文件
cd /home/openssh-9.1p1
cp -a contrib/redhat/sshd.init /etc/init.d/sshd.init
chmod +x /etc/init.d/sshd.init
/etc/init.d/sshd.init start
#执行启动之后就会自动生成一个服务文件,在run/systemd/generator.late/下
ll /run/systemd/generator.late/

#手动给脚本加入开机自启
vim /run/systemd/generator.late/sshd.init.service
# Automatically generated by systemd-sysv-generator

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/sshd.init
Description=SYSV: OpenSSH server daemon

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=no
PIDFile=/var/run/sshd.pid
ExecStart=/etc/rc.d/init.d/sshd.init start
ExecStop=/etc/rc.d/init.d/sshd.init stop
ExecReload=/etc/rc.d/init.d/sshd.init reload

#手动加入这行
[Install]
WantedBy=multi-user.target

2、 修改服务文件,生成systemd托管服务

#修改名称sshd.init.service为sshd9.service
cp /run/systemd/generator.late/sshd.init.service  /usr/lib/systemd/system/sshd9.service
systemctl daemon-reload
systemctl restart sshd9.service
systemctl status sshd9.service
systemctl enable sshd9.service

#配置开机自启,如果没有自启,手动挂载软链接开机自启
ln -s /usr/lib/systemd/system/sshd9.service /etc/systemd/system/multi-user.target.wants/sshd9.service

3、 停掉历史ssh服务,重启操作系统并验证

systemctl status sshd.service
systemctl stop sshd.service
systemctl disable sshd.service

#重启服务器
reboot

4、 检查版本

5、 部分漏洞需要关闭scp

#查询scp
whereis scp

#备份scp
mkdir /home/scpbak
cp /usr/bin/scp /home/scpbak

#取消权限
chmod a-x  /usr/bin/scp

#重命名scp
mv /usr/bin/scp /usr/bin/scpbak

四、 补充:如何自定义systemd托管ssh文件

  • 老版本的服务需要先启动****sshd-keygen.service
  • 但是新版本编译没有这个服务相关文件,如果直接替换就会报错
  • 所以要在服务里面删除这部分内容

9.1版本新编写sshdnew.service

vim /usr/lib/systemd/system/sshdnew.service

[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target

[Service]
Type=simple
ExecStart=/usr/sbin/sshd -D
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

7.4版本sshd.service原版文件

cat /usr/lib/systemd/system/sshd.service
 
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[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

7.4版本sshd-keygen.service文件

vim /usr/lib/systemd/system/sshd-keygen.service

[Unit]
Description=OpenSSH Server Key Generation
ConditionFileNotEmpty=|!/etc/ssh/ssh_host_rsa_key
ConditionFileNotEmpty=|!/etc/ssh/ssh_host_ecdsa_key
ConditionFileNotEmpty=|!/etc/ssh/ssh_host_ed25519_key
PartOf=sshd.service sshd.socket

[Service]
ExecStart=/usr/sbin/sshd-keygen
Type=oneshot
RemainAfterExit=yes
标签: ssh ssl 网络安全

本文转载自: https://blog.csdn.net/SUBSEA123/article/details/126404990
版权归原作者 麻辣香锅777 所有, 如有侵权,请联系我们删除。

“openssh-浅谈openssl和openssh的升级”的评论:

还没有评论