背景说明
最近公司项目上客户提供的云主机,被云服务器提供商扫描告知有许多openssh漏洞,一下想到的就是升级到最新版本,可是大家都知道openssh是一个非常重要的服务,实在不敢随意升级于是就在虚拟机里面进行了多次模拟演练,结果都失败了。
经过一番百度和不断的模拟对比,对升级过程进行一步一步的仔细探索,终于将openssh升级到最新版7.5p1,其中sshd和sftp-server均正常功能,至于x11功能未进行测试。
升级中遇到的坑
遇到问题多看日志,仔细分析,由于修复漏洞的时间比较紧,当时没有仔细分析日志,待安装完成后,再重新进行问题重现的过程中仔细查看分析日志才知道原来都是一些配置错误。
- 升级过程中ssh不会因为重启断开,一定要在启一个窗口测试可以登录之后再关闭当前的ssh链接,避免升级不成功导致不能远程连接到服务器。
- 升级成功后不能使用systemctl start sshd启动程序
原因分析:
1、编译安装时未启用某些功能支持导致使用旧配置文件无法启动sshd,如GSSAPIAuthentication、UsePrivilegeSeparation
2、配置文件权限错误,导致无法启动,如:ssh_host_rsa_key、ssh_host_ecdsa_key、ssh_host_ed25519_key - 升级成功后输入密码无法登录系统
原因分析:
1、未对配置文件进行修改,openssh7.5默认配置不允许使用root登录系统
2、pam配置文件错误或丢失
3、配置文件中未启用pam选项:UsePAM
升级准备
在升级过程中,测试了源码编码及使用源码创建rpm进行升级,此文先将源码编译升级进行讲解,之后再讲解如何使用rpmbuild命令创建rpm进行安装
(1) 下载源码包,下载地址如下
openssh-7.5p1 下载地址:
https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-7.5p1.tar.gz
其他版本openssh下载地址:
https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/
cd /opt
wget https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-7.5p1.tar.gz
(2) 备份原openssh配置文件
cp /etc/ssh{,.old_$(date '+%s')}
cp /etc/pam.d/sshd{,.old_$(date '+%s')}
(3) 安装依赖
yum -y install gcc automake zlib-devel openssl-devel pam-devel
(4) 解压编译安装
tar xf openssh-7.5p1.tar.gz
cd openssh-7.5p1
./configure --prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin \
--sysconfdir=/etc/ssh --mandir=/usr/share --docdir=/usr/share /doc/openssh75 \
--with-pam --with-md5-passwords --with-zlib --with-ssl
make && make install
(5) 修改配置文件sshd_config,如果无法远程,请多查看报错根据报错来修改配置文件。下面是推荐可用参数
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
Subsystem sftp /usr/libexec/sftp-server
(6) 重启服务
systemctl restart sshd
安装脚本:
mkdir /opt/backup
mv /etc/ssh /opt/backup
cp /etc/pam.d/sshd /opt/backup
yum -y install gcc automake openssl-devel zlib-devel pam-devel
tar xf openssh-7.5p1.tar.gz
cd openssh-7.5p1
./configure --prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc/ssh --mandir=/usr/share --docdir=/usr/share/doc/openssh75 --with-pam --with-md5-passwords --with-zlib --with-ssl
make
mv sshd_config{,old_$(date '%s')}
cat >> sshd_config << SSHDEOF
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
Subsystem sftp /usr/libexec/sftp-server
SSHDEOF
cp contrib/redhat/sshd.init /etc/init.d/sshd
chmod 755 /etc/init.d/sshd
chkconfig --add sshd
chkconfig sshd on
rpm -qa | grep openssh | xargs rpm -e --nodeps
cp /opt/backup/sshd /etc/pam.d/
make install
service sshd start