CentOSのOpenSSHを最新版(7.1p1)にアップグレードしてみた。

· 3 min read
CentOSのOpenSSHを最新版(7.1p1)にアップグレードしてみた。
Vector of Internet Security Systems.


CentOS6系のOpenSSHは5.3p1となっています。

# cat /etc/redhat-release
CentOS release 6.9 (Final)

# ssh -V 
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013

このバージョンはパッチが当てられていて安全に使用できるのですが
脆弱性が多いと噂があり、CentOSのOpenSSHはECDSAの鍵認証を受け付けず、
サポートも対象外なのでいっその事OpenSSHの最新版(7.1p1)へとアップグレードしてみました。


環境

  • 使用するOSはCentOS 6.9
  • シリアルコンソール、若しくはtelnetからsshdの再起動操作が行えること

conohaのVPSは管理画面からシリアルコンソールを立ち上げられるのでOK。
telnetを利用する場合、本作業終了後に必ず停止すること。

当然ですが、作業中SSHが切断するので
他の作業中の際はアップグレードするのは控えます。

1.必要なやつインストール

開発ツールやらヘッダーファイルやらを入れておく。

# yum groupinstall -y "Base" "Development tools"
# yum install -y openssl-devel krb5-devel pam-devel tcp_wrappers-devel

2.ソースを取ってきて展開

執筆時点で最新版であるOpenSSH 7.1p1をダウンロードして展開。

# cd
# wget http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-7.1p1.tar.gz
# tar xzvf openssh-7.1p1.tar.gz

3.SPECファイルを弄る

OpenSSHのソースにはこの後行う
RedHat系向けのRPMファイルの構築に必要なSPECファイルが含まれてます。

このSPECファイルにある

「%define no_x11_askpass 0」

「%define no_gnome_askpass 0」

の0を1に変更する。

# cd openssh-7.1p1
# cp contrib/redhat/openssh.spec{,.org}
# vi contrib/redhat/openssh.spec
# cat contrib/redhat/openssh.spec
(前略)
# Do we want to disable building of x11-askpass? (1=yes 0=no)
%define no_x11_askpass 1

# Do we want to disable building of gnome-askpass? (1=yes 0=no)
%define no_gnome_askpass 1
(後略)

4.余分なディレクトリを消してconfigure

ontribディレクトリ内のどうでもいいディレクトリを削除しconfigureする。
configureの際に–without-zlib-version-checkを入れないとエラーになるっぽい?(環境依存)

# cd contrib
# rm -rf aix/ solaris/ suse/ hpux/ cygwin/
# cd ..
# ./configure --without-zlib-version-check

5.RPMを作る

./configureの後はmakeだ!と思いがちですが
opensshのディレクトリのtarballを作ってからrpmbuildでビルドしRPMファイルを生成します。

# cd ..
# tar czvf openssh-7.1p1.cust.tar.gz openssh-7.1p1/
# rm -rf openssh-7.1p1
# rpmbuild --tb --clean openssh-7.1p1.cust.tar.gz

64bit環境の場合、/root/rpmbuild/RPMS/x86_64内に4つのRPMファイルができているはず。

# ll /root/rpmbuild/RPMS/x86_64
total 1424
-rw-r--r-- 1 root root 460584 May 16 14:36 openssh-7.1p1-1.x86_64.rpm
-rw-r--r-- 1 root root 578076 May 16 14:36 openssh-clients-7.1p1-1.x86_64.rpm
-rw-r--r-- 1 root root  16956 May 16 14:36 openssh-debuginfo-7.1p1-1.x86_64.rpm
-rw-r--r-- 1 root root 390000 May 16 14:36 openssh-server-7.1p1-1.x86_64.rpm

(ファイルサイズなどは環境によって変わるかも)

6.前のバージョンの削除&新しいバージョンのインスコ

旧バージョンをアンインストールし、新しいバージョンを生成したRPMからインストールします。

yumで旧バージョンをアンインストールする際、
道連れで削除されるパッケージ(gitなど)があるので注意。

# yum remove openssh
# rpm -Uvh /root/rpmbuild/RPMS/x86_64/openssh-7.1p1-1.x86_64.rpm
# rpm -Uvh /root/rpmbuild/RPMS/x86_64/openssh-server-7.1p1-1.x86_64.rpm
# rpm -Uvh /root/rpmbuild/RPMS/x86_64/openssh-clients-7.1p1-1.x86_64.rpm
# rpm -Uvh /root/rpmbuild/RPMS/x86_64/openssh-debuginfo-7.1p1-1.x86_64.rpm

7.sshd設定をする

インストールするとsshdの設定が一旦リセットされます。
(旧バージョンをアンインストールする前にバックアップしておいたほうがいいかもしれない)。

念の為オリジナルをバックアップしてから、以前の設定に戻すor最低限の設定を行う。

8.sshd再起動(シリアルコンソール等で行う)

新しいバージョンでsshdを再起動します。
ここでは前述のシリアルコンソールかtelnetを使用しましょう。
※私の場合リモートで作業していたので、sshがぶった切られてビビりました・・・w

# /etc/init.d/sshd restart

9.接続&バージョンチェック

無事に接続できればOK。
sshコマンドで-vオプションを付けるとバージョンが確認できます。

# ssh -V
OpenSSH_7.1p1

10.道連れで削除されたパッケージをインストールしなおす

自分の作業にてremoveになったパッケージは以下でした。
まぁあんまり使うことないと思いますが…。

# yum install -y git perl-Git systemtap systemtap-client

おしまい

これでECDSA鍵が使用できますね。