0


openssh-浅谈openssl和openssh的升级

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

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

以下为正文部分

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

一、 标准升级方法

1、 在线升级

  1. yum update openssh

2、 离线升级

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

  1. 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) 检查当前版本和路径

  1. openssl version
  2. which openssl

b) 安装依赖

  1. #在线安装依赖
  2. yum -y install gcc zlib zlib-devel gcc perl pam-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) 下载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/ && ./config --shared zlib
  7. make && make install
  8. #备份以前的文件
  9. #在/home下创建opensslbak作为备份文件夹
  10. mkdir -p /home/opensslbak
  11. cd /home/opensslbak
  12. ll /usr/bin/openssl
  13. ll /usr/include/openssl
  14. mv /usr/bin/openssl /home/opensslbak/
  15. mv /usr/include/openssl /home/opensslbak/
  16. #挂载新的文件
  17. ln -s /usr/local/bin/openssl /usr/bin/openssl
  18. ln -s /usr/local/include/openssl/ /usr/include/openssl
  19. echo "/usr/local/lib/" >> /etc/ld.so.conf
  20. ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
  21. ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
  22. ldconfig -v
  23. #测试是否正常更新
  24. bash
  25. openssl version
  26. OpenSSL 1.1.1s 1 Nov 2022

4、 安装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

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

  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 && cd ./openssh-9.1p1
  5. #备份ssh文件夹
  6. mkdir -p /home/sshbak
  7. cp -arp /etc/ssh /home/sshbak/
  8. mv /etc/ssh /etc/ssholdbak

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

  1. cd ./openssh-9.1p1
  2. ./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
  3. make && make install

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

  1. #根据自己需要调整sshd配置文件,参考如下
  2. vim /etc/ssh/sshd_config
  3. 32 PermitRootLogin yes #允许root登录,root用户必须添加
  4. 41 AuthorizedKeysFile .ssh/authorized_keys #指定公钥文件的保存位置以及名称
  5. 57 PasswordAuthentication yes #允许密码验证
  6. 82 UsePAM yes #PAM模块
  7. 98 UseDNS no #关闭dns检测
  8. 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

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

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

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

  1. #使用自动脚本生成systemd文件
  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/
  8. #手动给脚本加入开机自启
  9. vim /run/systemd/generator.late/sshd.init.service
  10. # Automatically generated by systemd-sysv-generator
  11. [Unit]
  12. Documentation=man:systemd-sysv-generator(8)
  13. SourcePath=/etc/rc.d/init.d/sshd.init
  14. Description=SYSV: OpenSSH server daemon
  15. [Service]
  16. Type=forking
  17. Restart=no
  18. TimeoutSec=5min
  19. IgnoreSIGPIPE=no
  20. KillMode=process
  21. GuessMainPID=no
  22. RemainAfterExit=no
  23. PIDFile=/var/run/sshd.pid
  24. ExecStart=/etc/rc.d/init.d/sshd.init start
  25. ExecStop=/etc/rc.d/init.d/sshd.init stop
  26. ExecReload=/etc/rc.d/init.d/sshd.init reload
  27. #手动加入这行
  28. [Install]
  29. WantedBy=multi-user.target

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. #配置开机自启,如果没有自启,手动挂载软链接开机自启
  8. 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. 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
  • 但是新版本编译没有这个服务相关文件,如果直接替换就会报错
  • 所以要在服务里面删除这部分内容

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

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

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
标签: ssh ssl 网络安全

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

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

还没有评论