OpenSSH 4.0p1 をインストールする

SETUP


SSH

SSH とは、Secure Shell の略で、セキュリティによって保護された通信間で操作できる Shell のことです。telnet と違い、通信が暗号化されるため、盗聴されにくいという利点があります。SSH は SSL ( Secure Socket Layer ) という技術を使って、通信を暗号化しています。

 

今回は、Linux Slackware 7.1 へインストールされていた OpenSSH 3.4p1 を差し替える感じで OpenSSH 4.0p1 をインストールしてみたときのお話です。

一応、以前に書いたお話 EZ-NET: OpenSSH 3-4p1 の注意事項 の続きでもありつつ、特には関係なさそうな感じです。もしこの内容だけでは不足の場合は、過去の記事へさかのぼってもらえれば、何か判るかもしれません。

 

インストールにあたっての注意事項

いろいろな環境に OpenSSH 4.0p1 をインストールしている過程で気がついたのですけど、このバージョンの OpenSSH でも 3.4p1 のときにお話した Privilege Separation (特権分離) の機能が働いているようです。

このため、この Privilege Separation のための SSH アカウントを Linux へ登録しておかないと、SSH が上手く動作しないので注意が必要です。実際にアカウントを登録し忘れてしまうと、インストールまでは正常に行えるのですけど、いざ sshd を起動しようとしたときに次のようなエラーメッセージが表示されます。

Privilege separation user sshd does not exist

エラーが表示されてそのまま sshd が終了してしまうので、遠隔で SSH のバージョンを更新しているような場合には特に注意しましょう。

 

この Privilege Separation に使用するアカウントは sshd という名前のアカウントですので、このアカウントが登録されていない場合には、次のようにしてアカウントを登録しておくと良さそうです。また、/var/empty ディレクトリも必要らしいので、下記ではそれもあわせて作成してみています。

mkdir /var/empty

 

groupadd sshd-priv

useradd -g sshd-priv -d /dev/null -s /bin/false sshd

 

OpenSSH 4.0p1 のインストール

OpenSSH 4.0p1 のインストール作業開始

まずは最新の OpenSSH を入手します。

"ftp://ftp.jp.openbsd.org/pub/OpenBSD/OpenSSH/portable/" から、2005/03/19 の時点で最新の "openssh-4.0p1.tar.gz" をダウンロードして展開し、出来上がったディレクトリへ移動します。

tar xvzf openssh-4.0p1.tar.gz

cd openssh-4.0p1/

 

説明書をみると、必要環境は簡単な環境では次のような感じとのことでした。

OpenSSL はたしか 0.9.6 をインストールした覚えがあるので、zlib の方は良くわからなかったものの、まずはそのままインストールを行ってみることにしました。インストール手順は、手馴れた方法で大丈夫のようでした。

./configure

まずは ./configure から行ってみると、ここで早速エラーが発生してしまいました。

configure: error: *** zlib too old - check config.log ***

エラー内容は単純に、zlib のバージョンが古いとのことでした。ですのでまずは zlib のバージョンを更新する必要がありそうです。

 

インストールのための環境整備

最新の zlib を入手してインストールします。

http://www.gzip.org/zlib/ から、2005/03/19 の時点で最新の "zlib-1.2.2.tar.gz" を入手して、展開・インストールを行います。インストール方法は難しいことはなく、次のようにして簡単にインストールすることが出来ました。

./configure

 

make

make install

ついでなので念のため、OpenSSL のバージョンについても確認しておくことにします。

/usr/local/ssl/bin/openssl version

このようにすることでバージョンを確認することが出来ました。確認方法を探していたときには /usr/bin/openssl というパスで載っていましたので、環境によっては別の場所に OpenSSL がインストールされているかもしれないです。

なお、zlib の方のバージョンを確認する方法もみつかりました。これは "/usr/include/zlib.h" を参照して、最初の行にあるバージョン情報を確認することで可能です。

 

OpenSSH のインストール再開

zlib 1.2.2 のインストールが完了したので、改めて OpenSSH のインストールを行ってみます。

./configure

 

make

make install

 

今度は ./configure でエラーが出ることもなく、無事にインストール完了にまで至りました。

とりあえず Linux を再起動して、SSH で接続してみます。とりあえず他の PC からネットワーク経由での接続を試みてみたのですけど、サーバは応答するものの、なぜだか認証に失敗してしまうのでした。

ローカルから利用できるかを調べてみることにします。付属の SSH クライアントでの接続を試みると、やはり接続までは出来るものの、認証の段階で "Permission denied" とのことです。

改めてネットワーク経由から、パスワードを保存しておいてくれる SSH クライアントがあったのでそれで接続してみましたが、接続できないとのことで、パスワードの単純な記憶違いとかではなくて、認証の段階で問題が起こっている様子だったのでした。

 

そういえば、こんな感じの症状を以前にも体験していたのを思い出しました。

それは調べる限りでは Slackware 特有の問題で、MD5 認証に明示的に対応させてあげないと、認証の段階で失敗してしまうというものでした。今回改めて調べてみると、これは何も Slackware に特有の問題でもなく、よく見られるお話のようです。

--with-pam が指定された場合は要らないそうなのですけど、ともあれこれを指定しないと MD5 パスワードを持ったアカウントがログインすることが出来なくなってしまうとのことでした。要は、Linux アカウントでのログインが出来ないということなのでしょう。

 

改めて次のようにしてインストールしてみると、無事、ローカルから正常にログインすることが出来るようになりました。

./configure --with-md5-passwords

 

make

make install

ネットワークからのログインがなぜか出来なかったのですけど、でもそれも、Linux を再起動してみたら問題なく接続できるようになりました。

注意したいのは、./configure オプションの --with-md5-passwords を、ちゃんと passwords と複数形にしておくことです。これを "s" を忘れて単数形にしてしまうと、特にエラーのないまま ./configure を通過してしまって、結局、インストール後にログインできないということになってしまったりします。

./configure が終わったときに MD5 パスワードが有効になっているかの表示が見える位置にあると思うので、SSH 経由でインストールしていて接続できなくなると困るような場合は、そこを確認しておくと良いでしょう。もっとも、それでも不備があるかもしれないので、TELNET を復活させておくなど、接続できなくなった場合の回避策を考えておくと良いでしょう。

 

その他、気になったお話

/usr/local/etc/sshd_config について興味深い項目がありましたので、メモついでに記しておきます。

PermitEmptyPasswords no

PermitRootLogin no

これは、空パスワードでのログインと、root アカウントでのログインを禁止するというものです。安全性の都合上、必要に応じてこのような設定をしておくと安心かもしれないです。

 

他、SSH を起動したときに "Deprecate option RhostsAuthentication" という表示がなされていて気になりました。

行番号も表示されていて、sshd_config の今回の場合は 33 行目を参照してみると、そこには "RhostsAuthentication no" という業がありました。これの意味するところは、単純な "r" 認証は行わない (?) という設定らしいです。

これを有効にしてしまうと "host base 認証" とやらが有効となってセキュリティ上まずいとのことなので、これはこれで問題ないのでしょう。これが "no" であれば、SSH1 認証にて "rhosts" と "/etc/hosts.equiv" の設定を無視してくれるのだそうです。

これらはなんだか rsh (リモートシェル) 関連のものらしいので、良くはわからないのですけど、"no" のままで問題ないのでしょう。