当前位置:   article > 正文

openssh-浅谈openssl和openssh的升级_--with-openssl-includes

--with-openssl-includes

2023年9月-博主最近将文档进行了更新,着重更新开机自启部分

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

以下为正文部分:博主项目上要求修复ssh漏洞,于是打算分享openssl和openssh升级的方法。其中有不少踩坑,请大家仔细阅读:本文仅举例Centos7下操作方法,其他环境自行调整

一、  标准升级方法

标准升级就是使用系统源自动更新最新版本,但是Centos7的rpm包只更新到了7.4版本

  1. #在线升级
  2. yum update openssh
  3. #离线升级
  4. rpm -Uvh openssh-7.4p1-22.el7_9.x86_64.rpm

补充:rpm包离线下载推荐网址:RPM Search

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

压缩包编译安装是linux系统下软件更新的第二种常用方式,软件厂家只需要提供压缩包的源码或者编译程序,适配各系统由用户自行编译,适合于各类系统安装升级

1、  环境说明

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

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

  1. #在线安装
  2. yum install telnet telnet-server xinetd -y
  3. #离线安装telnet-server
  4. 1-在有互联网的机器,提前缓存离线包,执行以下命令
  5. mkdir /home/telnet
  6. yum install telnet telnet-server xinetd --downloadonly --downloaddir=/home/telnet
  7. 2-将刚才下载的依赖文件夹的安装包拷贝到内网机器进行安装
  8. yum localinstall ./*.rpm -y
  9. #关闭防火墙和selinux
  10. systemctl stop firewalld.service
  11. systemctl disable firewalld.service
  12. setenforce 0
  13. sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
  14. sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  15. sestatus
  16. #启动服务
  17. systemctl start telnet.socket
  18. systemctl start xinetd
  19. systemctl status telnet.socket
  20. systemctl status xinetd
  21. systemctl enable telnet.socket
  22. systemctl enable xinetd
  23. #重启服务
  24. echo 'pts/0' >>/etc/securetty
  25. echo 'pts/1' >>/etc/securetty
  26. systemctl restart telnet.socket
  27. systemctl restart xinetd
  28. systemctl status telnet.socket
  29. systemctl status xinetd
  30. #停止服务
  31. systemctl stop telnet.socket

4、  更新openssl

升级前:OpenSSL 1.0.2k-fips                          升级后:OpenSSL 1.1.1s(2022-12)

a)  检查当前版本和路径
  1. openssl version
  2. which openssl

b)  安装依赖                                           
  1. #在线安装依赖
  2. yum -y install gcc gcc-c++ zlib zlib-devel perl pam-devel libXt libstdc++-devel
  3. #离线安装依赖
  4. 1-在有互联网的机器,提前缓存离线包,执行以下命令
  5. mkdir /home/yilai
  6. yum install gcc zlib zlib-devel gcc perl --downloadonly --downloaddir=/home/yilai
  7. 2-将刚才下载的依赖文件夹的安装包拷贝到内网机器进行安装
  8. yum localinstall ./*.rpm
c)  备份之前的ssl文件

注意:不同版本可能源文件的ssl路径不一样,不用在意,主要备份/usr/bin/openssl下即可

  1. #备份以前的文件
  2. #在/home下创建opensslbak作为备份文件夹
  3. mkdir -p /home/opensslbak
  4. cd /home/opensslbak
  5. ll /usr/bin/openssl
  6. ll /usr/include/openssl
  7. mv /usr/bin/openssl /home/opensslbak/
  8. mv /usr/lib64/libssl.so /home/opensslbak/
  9. mv /usr/include/openssl /home/opensslbak/
d)  下载openssl升级包和编译
  1. #下载官网安装包-2022-12
  2. https://www.openssl.org/source/openssl-1.1.1s.tar.gz
  3. wget https://www.openssl.org/source/openssl-1.1.1s.tar.gz --no-check-certificate
  4. #解压并编译安装
  5. tar -xzvf openssl-1.1.1s.tar.gz
  6. cd openssl-1.1.1s/
  7. ./config --shared zlib
  8. make && make install

e)  编译后复制到/bin目录使用
  1. #查看新生成文件夹
  2. ls /usr/local/bin/openssl
  3. ls /usr/local/include/openssl
  4. ls /usr/local/ssl
  5. ls /usr/local/lib64/
  6. ls /usr/local/lib64/libssl.so
  7. ls /usr/local/lib64/libcrypto.so
  8. #测试新命令可能会报错,稍后更新下库依赖路径ldconfig后就正常了
  9. /usr/local/bin/openssl version
  10. /usr/local/bin/openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
  11. #挂载新的文件
  12. ln -s /usr/local/bin/openssl /usr/bin/openssl
  13. ln -s /usr/local/include/openssl/ /usr/include/openssl
  14. ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
  15. ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
  16. echo "/usr/local/lib" >> /etc/ld.so.conf
  17. echo "/usr/local/lib64" >> /etc/ld.so.conf
  18. ldconfig
  19. ldconfig -v
  20. #写入新的依赖库路径
  21. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
  22. echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64" >> ~/.bashrc
  23. echo $LD_LIBRARY_PATH
  24. #测试是否正常更新
  25. bash
  26. openssl version
  27. OpenSSL 1.1.1s 1 Nov 2022

5、  升级openssh

升级前:OpenSSH_7.4p1                                         升级后:OpenSSH_9.1p1

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

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

  1. cd /home/
  2. wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.1p1.tar.gz --no-check-certificate
  3. tar xfz openssh-9.1p1.tar.gz
  4. chown -R root:root openssh-9.1p1
  5. cd ./openssh-9.1p1
  6. #备份ssh文件夹
  7. mkdir -pv /home/sshbak
  8. cp -arp /etc/ssh/ /home/sshbak/ssh
  9. cp /etc/ssh/sshd_config /home/sshbak/sshd_config.backup
  10. cp /etc/pam.d/sshd /home/sshbak/sshd.backup
  11. cp /etc/init.d/sshd /home/sshbak/sshd.old
  12. mv /etc/ssh /etc/ssholdbak
  13. ll /home/sshbak/

b)  设置编译参数和编译安装,注意要更新openssl后才能生效
  1. cd ./openssh-9.1p1
  2. ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/include/openssl --with-ssl-dir=/usr/local/lib64 --with-zlib --with-md5-passwords --with-pam
  3. #./configure
  4. #--prefix=/usr
  5. #--sysconfdir=/etc/ssh #编译后ssh路径
  6. #--with-openssl-includes=/usr/local/include/openssl #有很多xxx.h的文件目录
  7. #--with-ssl-dir=/usr/local/lib64 #有xxx.so的目录
  8. #--with-zlib
  9. #--with-md5-passwords
  10. #--with-pam
  11. make && make install
  12. #升级完成
  13. ssh -V

c)  修改配置文件/etc/ssh/sshd_config,取消注释以下文件
#根据自己需要调整sshd配置文件,参考如下
  1. vim /etc/ssh/sshd_config
  2. 32 PermitRootLogin yes #允许root登录,root用户必须添加
  3. 41 AuthorizedKeysFile .ssh/authorized_keys #指定公钥文件的保存位置以及名称
  4. 57 PasswordAuthentication yes #允许密码验证
  5. 82 UsePAM yes #PAM模块
  6. 98 UseDNS no #关闭dns检测
  7. 109 Subsystem sftp /usr/libexec/sftp-server #开启SFTP并指定路径
d)  检测文件配置测试

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

e)  修改pam认证文件
  1. cp /etc/pam.d/sshd /etc/pam.d/sshd.bak
  2. cat > /etc/pam.d/sshd << 'EOF'
  3. #%PAM-1.0
  4. auth required pam_sepermit.so
  5. auth include password-auth
  6. account required pam_nologin.so
  7. account include password-auth
  8. password include password-auth
  9. # pam_selinux.so close should be the first session rule
  10. session required pam_selinux.so close
  11. session required pam_loginuid.so
  12. # pam_selinux.so open should only be followed by sessions to be executed in the user context
  13. session required pam_selinux.so open env_params
  14. session optional pam_keyinit.so force revoke
  15. session include password-auth
  16. EOF

f)  添加互信命令文件ssh-copy-id
  1. #mv /usr/bin/ssh-copy-id /home/sshbak/
  2. cd /home/openssh-9.1p1
  3. install -v -m755 contrib/ssh-copy-id /usr/bin
  4. ll /usr/bin/ssh-copy-id

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

开机自启网上有很多配置方法,结合博主实测,建议是自行学习后自定义开机systemd文件

1、  使用openssh-9.1p1安装包下脚本,自动生成开机自启脚本

  1. #进入ssh安装包的文件夹里面自带redhat系统的开机脚本
  2. cd /home/openssh-9.1p1
  3. cp -a contrib/redhat/sshd.init /etc/init.d/sshd.init
  4. chmod +x /etc/init.d/sshd.init
  5. /etc/init.d/sshd.init start
  6. #执行启动之后就会自动生成一个服务文件在run/systemd/generator.late/
  7. ll /run/systemd/generator.late/sshd.init.service

  1. #修改脚本启动类型为simple,防止启动通知服务过程卡死
  2. vim /run/systemd/generator.late/sshd.init.service
  3. [Service]
  4. #类型修改Type=forking为simple,防止启动通知服务过程卡死
  5. Type=simple
  6. #超时时间可以改短一些
  7. TimeoutSec=30s

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

  1. #修改名称sshd.init.service为sshd9.service
  2. cp /run/systemd/generator.late/sshd.init.service /usr/lib/systemd/system/sshd9.service
  3. systemctl daemon-reload
  4. systemctl restart sshd9.service
  5. systemctl status sshd9.service
  6. systemctl enable sshd9.service
  7. cat /usr/lib/systemd/system/sshd9.service
  8. #配置开机自启,如果没有自启,手动挂载软链接开机自启
  9. ln -s /usr/lib/systemd/system/sshd9.service /etc/systemd/system/multi-user.target.wants/sshd9.service

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

  1. systemctl status sshd.service
  2. systemctl stop sshd.service
  3. systemctl disable sshd.service
  4. #检查是否配置成功
  5. systemctl list-unit-files | grep sshd9
  6. ls /etc/systemd/system/multi-user.target.wants | grep sshd9
  7. ls /usr/lib/systemd/system/ | grep sshd9
  8. openssl version && ssh -V
  9. #重启服务器
  10. reboot

4、  检查版本

5、  部分漏洞需要关闭scp

  1. #查询scp
  2. whereis scp
  3. #备份scp
  4. mkdir /home/scpbak
  5. cp /usr/bin/scp /home/scpbak
  6. #取消权限
  7. chmod a-x /usr/bin/scp
  8. #重命名scp
  9. mv /usr/bin/scp /usr/bin/scpbak

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

● 老版本的服务需要先启动sshd-keygen.service

● 但是新版本编译没有这个服务相关文件,如果直接替换就会报错,需要删除

● 将Type=notify改为Type=simple,防止通知一直卡死系统

1、  9.1版本新编写sshdnew.service

  1. vim /usr/lib/systemd/system/sshdnew.service
  2. [Unit]
  3. Description=OpenSSH server daemon
  4. Documentation=man:sshd(8) man:sshd_config(5)
  5. After=network.target
  6. [Service]
  7. Type=simple
  8. ExecStart=/usr/sbin/sshd -D
  9. KillMode=process
  10. Restart=on-failure
  11. RestartSec=42s
  12. [Install]
  13. WantedBy=multi-user.target

2、  7.4版本sshd.service原版文件

  1. cat /usr/lib/systemd/system/sshd.service
  2. [Unit]
  3. Description=OpenSSH server daemon
  4. Documentation=man:sshd(8) man:sshd_config(5)
  5. After=network.target sshd-keygen.service
  6. Wants=sshd-keygen.service
  7. [Service]
  8. Type=notify
  9. EnvironmentFile=/etc/sysconfig/sshd
  10. ExecStart=/usr/sbin/sshd -D $OPTIONS
  11. ExecReload=/bin/kill -HUP $MAINPID
  12. KillMode=process
  13. Restart=on-failure
  14. RestartSec=42s
  15. [Install]
  16. WantedBy=multi-user.target

3、  7.4版本sshd-keygen.service文件

  1. vim /usr/lib/systemd/system/sshd-keygen.service
  2. [Unit]
  3. Description=OpenSSH Server Key Generation
  4. ConditionFileNotEmpty=|!/etc/ssh/ssh_host_rsa_key
  5. ConditionFileNotEmpty=|!/etc/ssh/ssh_host_ecdsa_key
  6. ConditionFileNotEmpty=|!/etc/ssh/ssh_host_ed25519_key
  7. PartOf=sshd.service sshd.socket
  8. [Service]
  9. ExecStart=/usr/sbin/sshd-keygen
  10. Type=oneshot
  11. RemainAfterExit=yes

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/199991
推荐阅读
相关标签
  

闽ICP备14008679号