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
版权归原作者 麻辣香锅777 所有, 如有侵权,请联系我们删除。