OpenSSH のアップデート for Mac OS X Tiger

素人なのに研究室のPCのセキュリティ関係を一手に引き受けさせられていますこんにちは。

Mac OS X は標準でOpenSSHをベースとしたSSHサーバ機能が付いているので、面倒な設定や新しいソフトを入れる事無しにSSHを使えるのがWindowsに比べて大きなアドバンテージの一つと言えます。しかし、最新版(Mac OS X 10.4.7)でのOpenSSHのバージョンは3.8.1p1で、これはOpenSSHの最新版では無いらしい。しかも、嫌すぎることに致命的な脆弱性があるんだと。

そんな事を監査の人に言われて、「アップデートしなさい」と言われるも、元がLinuxのソフトなので一筋縄で行くかとみたいな。Finkを使えば最新版の導入は自動でやってくれるが、元々ある古いバージョンのsshd (サーバプログラム)が勝手に動いてしまって、これでは意味が無い。Finkで生成されたバイナリをパクって上書きとかしてみるも、やっぱりまともに動かない。と言う事で、自分でコンパイルして、かつ無理矢理元々のプログラムに上書きするようにして何とかしました。以下そのまとめ。

注: これ書いてる人、LinuxもMacも素人の上に身近に聞ける人もいないという環境で、一から孤独にGoogle先生相手に調べた結果をつなぎ合わせただけです。だからコマンドの解釈とかも正しいのかどうか知らなくて、「あくまで自分の中ではこういう意味付けをしている」というだけ。当然、これやってぶっ壊れても知らないよ。というか、Linuxの各種ディストリビューションへのインストール方法を詳しく説明したサイトなら簡単に見つかるけど、Mac OS X となるとほとんど無いね……。

使用OSのバージョンは10.4.6(10.4.7で動く事確認済)。おそらくTigerならOK。Panther→Tigerで仕様が結構変わったらしいので、Panther以前でうまくいくかは不明。あと、コンパイルするためにDeveloper Toolsというものを予めインストールしておく必要有り。デフォルトではインストールされていないはずなので、Mac OS XのインストールDVDからどうにかしてインストールしてみてね。

で、本題。基本的には、
http://www.unixuser.org/~haruyama/security/openssh/INSTALL_nihongo.txt
に書いてある方法に従う。冒頭に、
Zlib と OpenSSL がインストールされている必要があります.

とあって、両方ともデフォルトでMac OS Xにはインストールされているっぽいのだが、嫌すぎる事に最新版のOpenSSHには対応していないっぽいので、インストールしないとダメ。あと管理者権限のあるユーザーでやらないと無理。

・zlibのインストール
入手→http://www.zlib.net/
下の方に、zlib source code, version X.X.X, tar.gz format(X.X.Xは最新バージョンが入る、以下同様)というところがあるのでそこから取る。これを書いている現在では、zlib-1.2.3.tar.gzというファイルが入手できる。このファイルをホームディレクトリへ移動しておく。

インストール
ターミナルを開いて、以下のように入力。
$ tar xvzf zlib-1.2.3.tar.gz
$ cd zlib-1.2.3.tar.gz
$ ./configure --prefix=/usr
(ちょっと時間がかかる)
$ make
(ちょっと時間がかかる)
$ sudo make install
(パスワードを聞かれたらログインパスワードを入力)

tar xvzf 「ファイル名」でそのファイルを展開、sudo 「コマンド」でそのコマンドを管理者として実行(だからパスワードがいる)という感じで。

・OpenSSLのインストール
基本的には似ている。
入手→http://www.openssl.org/source/
リストの一番上の[LATEST]って書いてあるものを落とせば問題無いだろう、今現在openssl-0.9.8b.tar.gzってのが入手できる。やっぱりホームディレクトリへ移動しておく。

インストール
ターミナルからこんな感じで。
$ tar xvzf openssl-0.9.8b.tar.gz
$ cd openssl-0.9.8b.tar.gz
$ ./config --prefix=/usr --openssldir=/usr/local/ssl shared
(ちょっと時間がかかる)
$ make
(結構時間がかかったような気がする)
$ make test
(結構時間がかかったような気がする)
$ sudo make install
(パスワードを聞かれたらログインパスワードを入力)
一旦ログアウト(or 再起動)して、再度ターミナルを開いてバージョンを確認する。
$ openssl version
(これでOpenSSLのバージョンを確認し、0.9.8b(0.9.7iより先のバージョン)以降が表示されれば成功)


・OpenSSHのインストール
ようやく本題。うまくいかなかった場合、多分zilbかOpenSSLのインストールで失敗していると思う。
入手→http://www.openssh.com/ja/portable.html
ダウンロードの一覧から適当なサイトを選ぶとファイルの一覧が出てくる。新しいものほど下にあるっぽい。今のところ、openssh-4.3p2.tar.gz(openssh-4.3p2.tar.gz.ascってのとは違う)を入手しておくと無難。今まで通りホームディレクトリへ。

インストール
ここまでうまくいっていれば何とかなるはず。
$ tar xvzf openssh-4.3p2.tar.gz
$ cd openssh-4.3p2.tar.gz
$ ./configure --prefix=/usr --sysconfdir=/etc
(それなりに時間がかかる)
$ make
(それなりに時間がかかる)
$ sudo make install
(パスワード(略))
一旦ログアウト(or 再起動)して、再度ターミナルを開いてバージョンを確認する。
$ ssh -v
(これでOpenSSHのバージョンを確認し、冒頭にOpenSSH_4.3p2とか表示(3.8.1p1以降)が表示されれば成功。ちなみにこれでOpenSSLのバージョンも同時に確認できる)


これで終了。ただ、問題が。これでインストールしたOpenSSHをサーバとして使おうとすると、通常のパスワード認証を受け付けない(原因不明)のです。何で? とりあえずクライアントして使う分には問題無いですが……。

これは認証に公開鍵方式を使う事で解決できた。以下のURLにある説明が参考になる。
http://www.geocities.jp/turtle_wide/tools/sshpass.html

ちょっと違う点として、
・通常のパスワード認証が使えないのでscpコマンドで公開鍵を送る事ができない。メール添付なりUSBメモリに入れて運ぶなり黒魔術白魔術その他の手段でどうにかしてサーバ(リモート)側PCに持っていかなければダメ。公開鍵はいくら見られてもセキュリティ的には問題無いので、移動する手段は問われないのです。
・公開鍵が置いてある.sshフォルダは隠しフォルダなのでFinderからは普通は見えない。そこで生成した公開鍵は予めターミナルからmvコマンドで見える所(例:ホームディレクトリ)に移動しておくか、Finderのメニューから「移動」→「フォルダへ移動」を選んで、~/.ssh と入力して強引に表示させるかする必要がある。これはリモート側に公開鍵を置く場合も同様。
・リモート側の作業もローカルからリモートログインしてやることはできないので、リモートPCを直接いじって何とかして下さい。
・touchコマンドとその次のchmodコマンドは最初の1回だけやればOK(authorized_keysファイルが既にあればやる必要無し)
・参考URLではパスワード無しの設定が書かれているが、セキュリティ的にはパスワードがあった方が良いかも。ssh-keygenコマンド実行時、Enter passphraseのところで好きなパスワードを入れれば良い。

これをそのサーバにアクセスする可能性があるPC全てでやる必要がある。面倒。秘密鍵をコピーすればいける気もするが、何となく躊躇してやっていない。まあ、一回やってしまえば以後は存在を気にする事無く使えるし、単純なパスワード認証よりもセキュリティ的に信頼がおける方法ではあるのですが……。

全てデフォルトでOS X に入っているOpenSSHが古いのが悪いのですが、もしかすると古いバージョンがベースであるというだけで、脆弱性に対するパッチは適用されているのかもしれない(というかそれがセキュリティ対策においてあるべき姿勢だと思う)、という努力を全て無に帰すような事実に途中で気付いたが、敢えてその可能性についてはきちんと調べないのでした。
[PR]
by fyama_tani | 2006-07-08 17:44 | 雑記