如何创建OpenSSH-rpm包

时间:2019-08-20 17:58:13  来源:igfitidea点击:

为了解决CVE-2014-2532问题,我们将创建OpenSSH版本6.7稳定版本的rpm包,并对OpenSSH进行升级。

CVE-2014-2532说明

发现OpenSSH没有正确处理带有通配符的某些AcceptEnv参数值。
远程攻击者可以利用此漏洞绕过预期的环境变量限制。

解决放在哪

  1. 从openssh6.7源代码创建rpm包。

  2. 将OpenSSH升级到新版本6.7.

openssh升级到新版本时的注意事项

  1. 备份ssh配置文件/etc/ssh

  2. 备份pam文件/etc/pam.d/sshd

  3. 如果是从远程ssh到服务器,最好安装telnet服务器, 可以通过telent连接,确保升级出问题时,能连上服务器操作。

创建OpenSSH rpm包

因为没有现成的rpm包,所以需要我们自己制作。

安装创建OpenSSH rpm包所需的软件包

yum install rpm-build gcc make wget openssl-devel krb5-devel pam-devel libX11-devel xmkmf libXt-devel

创建rpm构建目录

mkdir -p /usr/src/redhat/{SOURCES,SPECS}

它将创建下面的新目录

(a) /usr/src/redhat/

(b) /usr/src/redhat/SOURCES

(c) /usr/src/redhat/SPECS

下载最新的OpenSSH包

cd /usr/src/redhat/SOURCES/
wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.7p1.tar.gz
wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.7p1.tar.gz.asc

提取spec文件

cd /usr/src/redhat/SOURCES/
tar xfz openssh-6.7p1.tar.gz openssh-6.7p1/contrib/redhat/openssh.spec
mv openssh-6.7p1/contrib/redhat/openssh.spec ../SPECS/

更改提取的spec文件的所有权和组

chown sshd:sshd /usr/src/redhat/SPECS/openssh.spec

使用sed命令,修改spec文件一些命令

  1. 禁用 ask-pass
  2. 将过时弃用的BuildPreReq命令改成BuildRequires
sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" /usr/src/redhat/SPECS/openssh.spec
sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" /usr/src/redhat/SPECS/openssh.spec
sed -i -e "s/BuildPreReq/BuildRequires/g" /usr/src/redhat/SPECS/openssh.spec

运行rpmbuild命令。

cd  /usr/src/redhat/SPECS/
rpmbuild -ba openssh.spec

实际上,执行这个命令后,提示

error: File /root/rpmbuild/SOURCES/openssh-6.7p1.tar.gz: No such file or directory

所以要将源代码文件复制到/root/rpmbuild/SOURCES/

cp -v /usr/src/redhat/SOURCES/openssh-6.7p1.tar.gz* /root/rpmbuild/SOURCES/

再次运行命令

cd  /usr/src/redhat/SPECS/
rpmbuild -ba openssh.spec

生成的rpm包在/root/rpmbuild/RPMS/x86_64中

cd /root/rpmbuild/RPMS/x86_64
ls -lhrt

备份ssh配置

新版本6.7的PAM配置文件发送了变化。升级后/etc/pam.d/sshd文件参数不兼容。

备份ssh配置目录

cd ~
tar -cvzf etc_ssh.tar.gx /etc/ssh

备份pam.d/sshd文件。(非常重要,不要忘记)

cp -p /etc/pam.d/sshd ~/sshd.orig.`date +%F`

将OpenSSH服务器升级到6.7版本

升级ssh服务器

ls -l /root/rpmbuild/RPMS/x86_64/

rpm -Uvh /root/rpmbuild/RPMS/x86_64/*.rpm

备份升级后sshd pam文件

cp -p /etc/pam.d/sshd /root/sshd.afterupgrade

现在恢复原始的sshd pam文件

cp /root/sshd.orig /etc/pam.d/sshd

编辑配置文件/etc/ssh/sshd_config 并启用UsePAM。

vi /etc/ssh/sshd_config
..
UsePAM yes
..

移除旧密钥来重新生成新的ssh密钥

rm /etc/ssh/ssh*key

现在重启ssh服务

在CentOS 7/RHEL 7上

systemctl restart sshd

在CentOS 6/Amazon Linux上

service sshd restart

尝试通过ssh从远程机器连接,并检测ssh的版本