この章では OpenSSH のインストールを扱います。 本書が発行されている時点 (2006年) で 普及している多くの UNIX 系オペレーティングシステム (表 openssh-systems) では、 OpenSSH はパッケージとして最初から含まれており、 本書の説明はほぼそのままあてはまります。 そのため、最新のセキュリティアップデートさえ行っていれば、 特に新しい機能を使いたいのでない限り OpenSSH を自分で インストールをする必要はありません。 しかし、最新のバージョンにのみ含まれる特定の機能を利用したい場合もあるでしょう。 この章では最新の OpenSSH をインストールする方法や、 古い OpenSSH をアップデートする方法を説明します。
最初に、システムにインストールされている OpenSSH (またはその派生版) について調べてみましょう。インストールやアップデートの必要がなければ、 本章を飛ばして 3 章へ読み進めることもできます。また、 多くのオペレーティングシステムでは最新バージョンの OpenSSH が バイナリパッケージとして配布されているので、これらのパッケージを 利用するのもいいでしょう (表 binary-packages 参照)。
オペレーティングシステム | 配布サイト |
---|---|
Red Hat | OpenSSH 公式サイト (http://www.openssh.com/portable.html) |
Solaris | Freeware for Solaris (http://www.sunfreeware.com/) |
Mac OS X | Fink (http://fink.sourceforge.net/) DarwinPorts (http://darwinports.opendarwin.org/) |
逆に「どうもソースコードからのインストール(またはアップデート)が必要だ」と感じたら、 次は環境や希望に応じてインストールあるいはアップデート方法を決定します。
以下に各オペレーティングシステムごとの代表的なインストール方法を示します:
/usr
) とは別個に
ports としても OpenSSH が用意されており、これを /usr/local
以下に
インストールすることが可能。
お使いのシステム用に最新の OpenSSH パッケージが用意されている場合は
既存の OpenSSH を上書きできますが、
ソースコードからインストールするときにシステムの OpenSSH を上書きすべきではありません。
オペレーティングシステムによっては、特定のバージョンの OpenSSH に別のソフトウェアが
依存している場合があり、システム OpenSSH を新しいバージョンに変えると予期しない動作が生じることがあります。
また、そのオペレーティングシステムのパッケージ管理システムとも整合性がとれなくなってしまいます。
したがって、こうした場合には、通常システムのソフトウェアが入っている場所 (/usr
) とは
別の場所 (/usr/local
) にオプションとしてインストールします (図 openssh-config-tree)。
どうしても上書きしたい場合、そのシステムから OpenSSH が完全に消去できるのであれば、
消去したうえで同じ場所に OpenSSH をインストールしてください。
アップデート時の注意 |
---|
システムの OpenSSH が残っている状態で、その設定ファイルを
新しい OpenSSH 用の設定ファイルで上書きすべきではありません。
古いバージョンの OpenSSH で使っていた設定ファイルやホスト鍵ファイルは
そのまま新しいバージョンでも使えますが、新しいバージョンの設定ファイルに
追加された項目は、古いバージョンの OpenSSH ではエラーを起こすことがあるからです。
また、そのシステムの OpenSSH サーバデーモンをすでにユーザが利用している場合、
決してそのホスト鍵 ( |
OpenSSH をインストールあるいはアップグレードする場合、 まず現在インストールされている OpenSSH に関する情報を調べ、 オペレーティングシステムによって異なる方法をとる必要があります。 その後、おおまかな手順は次のようになります:
行先案内板 |
---|
|
現在インストールされている OpenSSH のバージョンを調べるのに一番てっとり早い方法は、以下のコマンドを実行してみることです:
$ which ssh (ssh のパス名を表示する) /usr/bin/ssh $ ssh -V (ssh クライアントのバージョンを表示する) OpenSSH_4.3p2, OpenSSL 0.9.7e-p1 25 Oct 2004
これにより、ssh
コマンドがインストールされている位置と
そのバージョン番号を知ることができます。
また、sshd
サーバデーモンのバージョン番号
(通常、これは ssh
コマンドのバージョン番号と同じはずです)
を知りたい場合は、telnet
コマンドを使って
ローカルホストに接続してみるという手もあります:
$ telnet localhost 22 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. SSH-1.99-OpenSSH_4.3
ここで表示される SSH-1.99 はこのサーバがサポートしているプロトコル番号で、 OpenSSH_4.3 がソフトウェアのバージョンを表しています。 [脚注: この場合、OpenSSH-4.3p2 などの p2 はつきません。]
Red Hat では、以下のようにしてインストールされている パッケージとその関連ファイルを調べることもできます (下線部がバージョン番号です) :
$ rpm -qa | grep -i openssh (インストールされているパッケージのうち、名前に "openssh" を含むものを検索) openssh-4.3p2-1 openssh-server-4.3p2-1 openssh-clients-4.3p2-1 openssh-askpass-4.3p2-1 openssh-askpass-gnome-4.3p2-1 $ rpm -ql openssh (パッケージ openssh に所属するファイルを表示) /etc/ssh /etc/ssh/moduli /usr/bin/scp /usr/bin/ssh-keygen /usr/libexec/openssh /usr/libexec/openssh/ssh-keysign ...
Red Hat 系の Linux では、OpenSSH は openssh-server
や openssh-clients
など
いくつかのパッケージに分かれて管理されています。したがって、インストール時にもこれと同じ構成の
パッケージを作成する必要があります。
Solaris の場合、デフォルトでは "Sun SSH" と呼ばれる OpenSSH の改造版がインストールされています。
$ pkginfo -i | grep -i ssh (インストールされているパッケージのうち、名前に "ssh" を含むものを検索) system SUNWsshcu SSH Common, (Usr) system SUNWsshdr SSH Server, (Root) system SUNWsshdu SSH Server, (Usr) system SUNWsshr SSH Client and utilities, (Root) system SUNWsshu SSH Client and utilities, (Usr) $ pkgchk -l SUNWsshcu (パッケージ SUNWsshcu に関連するファイルを表示) Pathname: /usr Type: directory ...
FreeBSD や Mac OS X では、OpenSSH は独立したパッケージではなく 基本システムとして組み込まれています。
行先案内板 |
---|
|
/usr
になっています。
OpenSSH をソースコードからインストールした場合、
これはデフォルトで /usr/local
になります。
なお、ここに示したパス名はあくまで一例であり、
ディストリビューションによっては一部のパス名が異なっていることがあります。
PREFIX/bin/ssh (slogin) | OpenSSH クライアント プログラム |
PREFIX/bin/scp | ファイルコピー プログラム |
PREFIX/bin/sftp | ファイル転送プログラム (SFTP) |
PREFIX/bin/ssh-keygen | 公開鍵・秘密鍵 管理ユーティリティ |
PREFIX/bin/ssh-agent | 認証エージェント |
PREFIX/bin/ssh-add | 認証エージェントの鍵管理ユーティリティ |
PREFIX/bin/ssh-keyscan | 認証エージェントの鍵管理ユーティリティ |
PREFIX/sbin/sshd | OpenSSH サーバ デーモン |
(PREFIX/libexec/sftp-server ) | (SFTP サーバモジュール) |
(PREFIX/libexec/ssh-keysign ) | (ホスト認証用プログラム) |
(PREFIX/libexec/ssh-rand-helper ) | (乱数生成用プログラム) |
(PREFIX/libexec/ssh-askpass ) | (認証用パスワード確認プログラム) |
注意 |
---|
ユーザがここに書かれているプログラムすべてを「コマンド」として
実行するわけではありません。とくに PREFIX/libexec/ 以下にある
プログラムは通常ユーザが実行することはまれで、これらはすべてそれ以外の
プログラム (クライアントあるいはサーバプログラム) から必要に応じて呼び出されます。
|
次に OpenSSH の設定ファイルの構成を示します (表 openssh-configs)。
SYSCONFDIR は、ほとんどオペレーティングシステムでは
/etc/ssh
になっています。
[脚注: Mac OS X では /etc
です。]
ただしソースコードからインストールした場合は PREFIX/etc と同じになります。
ソースコードから新規に OpenSSH をインストールする場合、システムの OpenSSH と
設定ファイルを共有したい場合は configure
(2.4.1. configure スクリプトの実行と make 参照) のときに、
この SYSCONFDIR をシステムと同じにする必要があります。
SYSCONFDIR/ssh_config | OpenSSH クライアント設定ファイル (すべてのユーザ用) |
SYSCONFDIR/sshd_config | OpenSSH サーバ設定ファイル |
SYSCONFDIR/ssh_host_key | ホスト秘密鍵 (SSH1 プロトコル用) |
SYSCONFDIR/ssh_host_key.pub | ホスト公開鍵 (SSH1 プロトコル用) |
SYSCONFDIR/ssh_host_rsa_key | ホスト RSA 秘密鍵 (SSH2 プロトコル用) |
SYSCONFDIR/ssh_host_rsa_key.pub | ホスト RSA 公開鍵 (SSH2 プロトコル用) |
SYSCONFDIR/ssh_host_dsa_key | ホスト DSA 秘密鍵 (SSH2 プロトコル用) |
SYSCONFDIR/ssh_host_dsa_key.pub | ホスト DSA 公開鍵 (SSH2 プロトコル用) |
SYSCONFDIR/moduli | DH 鍵交換アルゴリズムで使われる素数の一覧 |
一口メモ |
---|
たいていの場合、システムの OpenSSH では
|
このほかにもマニュアルページが格納されるディレクトリや
/etc/rc.d
などの起動スクリプトがあります。
起動スクリプトについては 2.5. インストール (アップデート) とサーバデーモンの開始 節で説明します。
ソースコードからコンパイルする場合は、
まず OpenSSH のサイトの「移植版 OpenSSH (portable OpenSSH)」のページ
[脚注: http://www.openssh.com/ja/portable.html]
を開き、ダウンロードします。tar.gz
パッケージは
"openssh-4.3p2.tar.gz
" などの名前になっており、
各ミラーサイトの /pub/OpenBSD/OpenSSH/portable/
というディレクトリにあります。
このソースコードには、Red Hat および Solaris 用のパッケージを
作成する補助スクリプトがついています。
また、OpenSSH のコンパイルには暗号化をおこなう OpenSSL ライブラリと データ圧縮のための zlib ライブラリが必要です。これらはほとんどのシステムに含まれていますが、 脆弱性があるバージョンもあるので、必ず最新のバージョンにアップデートするようにしてください。 もし何らかの理由でこれらのライブラリが含まれていない場合は、 OpenSSL 配布サイト [脚注: http://www.openssl.org/] や zlib 配布サイト [脚注: http://www.zlib.net/] などから入手し、 インストールしてください。
実は OpenSSH は、2002年に公式サイト上の配布パッケージが何者かによって
バックドアを内蔵した「トロイの木馬」に入れ替えられたという歴史をもっています。
[脚注: また、2004年には OpenSSH に関する偽のセキュリティホール情報が流されました。
どうも OpenSSH には敵が多いようです。]
そのため、ダウンロードした tar.gz
パッケージが
「本物の」OpenSSH 配布ファイルかどうか確かめたい方もいるでしょう。
移植版 OpenSSH のパッケージは責任者である Damien Miller 氏によって
電子署名されており、GnuPG がインストールされていれば
以下の手順でパッケージが偽物かどうか判定することができます。
[脚注: http://www.gnupg.org/ ]
djm@mindrot.org
) の公開鍵を入手します。
検索ボックスに Miller氏のメールアドレス "djm@mindrot.org
" を入力し、
見つかった鍵のうち KeyID が "86FF9C48
" の公開鍵をダウンロードします。
pubkey.asc
という名前で保存されていた場合は以下のように入力します:
$ gpg --import pubkey.asc gpg: WARNING: using insecure memory! gpg: please see http://www.gnupg.org/faq.html for more information gpg: key 86FF9C48: public key "Damien Miller (Personal Key) <djm@mindrot.org>" imported gpg: Total number processed: 1 gpg: imported: 1 gpg: 3 marginal(s) needed, 1 complete(s) needed, classic trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
openssh-4.3p2.tar.gz
ならば、openssh-4.3p2.tar.gz.asc
) をダウンロードします。
$ gpg --verify openssh-4.3p2.tar.gz.asc openssh-4.3p2.tar.gz gpg: WARNING: using insecure memory! gpg: please see http://www.gnupg.org/faq.html for more information gpg: Signature made Fri Feb 10 19:08:05 2006 EST using DSA key ID 86FF9C48 gpg: Good signature from "Damien Miller (Personal Key) <djm@mindrot.org>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 3981 992A 1523 ABA0 79DB FC66 CE8E CB03 86FF 9C48
行先案内板 |
---|
|
ソースコードから手動でコンパイルするには、
ソースコードをダウンロードしたあとに
./configure
と make
を実行します。
このとき、システムの正しい位置にインストールするために
configure
にオプションを与えてやる必要があります。
表openssh-configure-options に OpenSSH をコンパイルするさいの代表的なオプションを示します。
--prefix=パス名 | インストール先の基底となるパス名 PREFIX を指定する。 省略時は /usr/local 。 |
--sysconfdir=パス名 | OpenSSH 設定ファイルを格納するディレクトリを指定する。 省略時は PREFIX /etc 。 |
--libexecdir=パス名 | OpenSSH 補助プログラムを格納するディレクトリを指定する。 省略時は PREFIX /libexec 。 |
--with-pam | PAM のサポート。PAM のモジュールを使用したい場合に必要。 Mac OS X でパスワード認証を行うさいには必ず必要。 |
--with-tcp-wrappers | TCP wrappers のサポート。/etc/hosts.allow , /etc/hosts.deny を有効にしたいときに必要。
|
--with-md5-passowrds | MD5 形式のパスワードのサポート。 ほとんどのオペレーティングシステムでは必要。 |
--with-libedit[=パス名] | libedit のサポート。 libedit は readline の互換ライブラリで、 これを使用すると sftp コマンド内で行編集が可能になる。
|
--without-zlib-version-check | zlib のバージョンを検査しない。 |
ほとんどのオペレーティングシステムでは、システムの OpenSSH は
--prefix
と --sysconfdir
に
それぞれ /usr
と /etc/ssh
を指定してコンパイルされています
(Red Hat の場合は --libexecdir=/usr/libexec/openssh
も必要です)。
システムと同じ場所にインストールする (上書きする) 場合は、
これらのオプションに同じ値を設定する必要があります。
注意すべきオプションのひとつに、--without-zlib-version-check
があります。
これは zlib のバージョン検査を意図的に行わないようにするものです。
通常 configure
はシステムにインストールされている zlib のバージョンを検査し、
それが脆弱性のあるバージョン (1.2.2
以前) の場合は続行を拒否します。
しかし多くのシステムではセキュリティ・アップデートにより zlib の脆弱性を回避したあとも、
互換性を保つために zlib のバージョン番号は以前のままにしておく傾向があります。
このような場合、最新のセキュリティ・アップデートを適用して
システムの zlib にエラーがないことが確信できているのであれば、
このオプションをつけて configure
の警告を回避してください。
これ以外のオプションについては configure --help
を参照してください。
以下の例は、Red Hat Linux 上で MD5 パスワードと TCP wrappers を有効にした場合の
configure
の出力結果です:
$ ./configure --with-md5-passwords --with-tcp-wrappers checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... (... 中略 ...) OpenSSH has been configured with the following options: User binaries: /usr/local/bin (コマンドがインストールされるパス名) System binaries: /usr/local/sbin (サーバデーモンがインストールされるパス名) Configuration files: /usr/local/etc (設定ファイルがインストールされるパス名) Askpass program: /usr/local/libexec/ssh-askpass Manual pages: /usr/local/man/manX PID file: /var/run Privilege separation chroot path: /var/empty sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin Manpage format: doc PAM support: no KerberosV support: no Smartcard support: no S/KEY support: no TCP Wrappers support: yes (TCP wrappers がサポートされている) MD5 password support: yes (MD5 形式のパスワードがサポートされている) libedit support: no IP address in $DISPLAY hack: no Translate v4 in v6 hack: yes BSD Auth support: no Random number source: OpenSSL internal ONLY Host: i686-pc-linux-gnu Compiler: gcc Compiler flags: -g -O2 -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -std=gnu99 Preprocessor flags: Linker flags: Libraries: -lwrap -lresolv -lcrypto -lutil -lz -lnsl -lcrypt (使用するライブラリ)
configure
の実行が終わると、どの機能が有効になっているかが
yes
あるいは no
で表示されます。
欲しい機能が有効になっていなかったり、configure
がエラーを出して途中で
止まってしまう場合は 7.1. インストール時のトラブル を参照してください。
OpenSSH のソースコードには Red Hat 用の RPM ファイルを作成するための
.spec
ファイルが付属していますので、これを使用します。
# cp openssh-4.3p2.tar.gz /usr/src/redhat/SOURCES # tar zxf openssh-4.3p2.tar.gz # rpmbuild -bb openssh-4.3p2/contrib/redhat/openssh.spec
この操作の後、/usr/src/redhat/RPMS/i386
に
openssh の RPM パッケージができているはずです。
参考までに、この spec ファイルが使っている
configure
のオプションを示しておきます:
$ ./configure --prefix=/usr \ --sysconfdir=/etc/ssh \ --libexecdir=/usr/libexec/openssh \ --datadir=/usr/lib/openssh \ --with-tcp-wrappers \ --with-rsh=/usr/bin/rsh \ --with-default-path=/usr/local/bin:/bin:/usr/bin \ --with-superuser-path=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin \ --with-privsep-path=/var/empty/sshd \ --with-md5-passwords \ --with-pam
Solaris では、以下のようにしてソースファイルからパッケージを作成できます:
$ ./configure --with-pam --with-md5-passwords --with-tcp-wrappers=/usr/sfw $ make package
この後、ソースコードのディレクトリ中には
OpenSSH-OpenSSH_4.3p2-Solaris-sparc.pkg
といった名前の
パッケージファイルができているはずです。
行先案内板 |
---|
|
ソースコードから手動で OpenSSH をコンパイルする場合、
コンパイルが終了したら、make install
を実行することにより
OpenSSH の各プログラムと設定ファイルが所定の場所にインストールされます。
パッケージを作成してインストールした場合は、
各オペレーティングシステムによって自動的に実行される動作が違います。
make install
でインストールする場合
ソースコードのディレクトリで make install
を実行すると、
各プログラムファイルがインストールされたあとに、
configure
で指定した SYSCONFDIR に
デフォルトの設定ファイルがコピーされます。
ここですでに設定ファイルが同じディレクトリ中に存在していた場合は、
前の設定ファイルがそのまま使われ、上書きはされません。
また、ホスト鍵が存在していない場合は自動的に生成されますが、
すでにホスト鍵が存在している場合にはそれがそのまま使われます。
システム起動時に sshd
サーバデーモンを
開始させるスクリプトは /etc/rc.d/sshd
にあります。
ただし、デフォルトではこれは /usr/sbin/sshd
を実行するように
設定されているので、/usr/local
以下に独自にインストールした
デーモンを実行するには、/etc/rc.conf
ファイルを以下のように
書き換えてください:
sshd_enable="YES" # 起動時に sshd を開始する sshd_program="/usr/local/sbin/sshd" # サーバデーモンとして /usr/local/sbin/sshd を使用する
その後、サーバデーモンを開始します:
# /etc/rc.d/sshd start
Mac OS X では、sshd
はデーモンとして走らせるのではなく、
xinetd
から起動されるようになっています
(設定は /etc/xinetd.d/ssh
に記されています)。
sshd
は
ラッパスクリプト /usr/libexec/sshd-keygen-wrapper
経由で
起動されるようになっており、このスクリプトは最初に起動したとき、
ホスト鍵を自動的に生成します。
システムとは異なるバージョンの OpenSSH を /usr/local
以下などに
インストールした場合は、/usr/sbin/sshd
のかわりに
/usr/local/sbin/sshd
などを起動するよう
このラッパスクリプトを修正します。
具体的には /usr/libexec/sshd-keygen-wrapper
スクリプトの最終行にある、
の部分を、以下のように書き換えます。exec /usr/sbin/sshd $@
exec /usr/local/sbin/sshd $@
この後、システム環境設定の「共有」パネルから、
「リモートログイン」の設定を「開始」にすれば sshd
が開始します。
Red Hat では 2.4.2. バイナリパッケージを作成する で作成したバイナリパッケージでシステムの
OpenSSH をアップデートできます。
rpm
コマンドの -U オプションを使って、
システムの OpenSSH をアップデートしてください。
# rpm -U openssh*-4.3p2-*.rpm
設定ファイルは /etc/ssh
にコピーされます。
すでに設定ファイルが存在していた場合は、
新しいバージョン用の sshd_config
ファイルが
/etc/ssh/sshd_config.rpmnew
として作成され、
前の設定ファイルはそのまま残ります。
また、ホスト鍵が存在していない場合は自動的に生成され、
sshd
サーバデーモンが起動している場合は、
自動的に新しいバージョンが再起動されます。
インストール後、起動時にサーバデーモンを有効にするには以下のように実行します:
# chkconfig sshd on (起動時に sshd を開始するよう設定) # service sshd start (いますぐ sshd を開始する)
Solarisでは、2.4.2. バイナリパッケージを作成する で作成したパッケージを
pkgadd
コマンドでインストールしてください。
# pkgadd -d OpenSSH-OpenSSH_4.3p2-Solaris-sparc.pkg OpenSSH
設定ファイルは /usr/local/etc/ssh
にコピーされます。
すでに設定ファイルが存在していた場合は、
前の設定ファイルがそのまま使われ、上書きはされません。
また、ホスト鍵が存在していない場合は自動的に生成されますが、
すでにホスト鍵が存在している場合にはそれがそのまま使われます。
インストール後、次のようにしてサーバデーモンを起動します:
# /etc/rc.d/opensshd start
さて、無事にインストールが完了し、
sshd_config
設定ファイルと
ホスト鍵ファイルが最低ひとつ存在していれば
sshd
サーバデーモンは正しく走っているはずです。
サーバデーモンが動いていることを確認するには、
ps
コマンドを使うという手もありますが、
telnet
コマンドを使ってローカルホストに接続してみるのが確実でしょう
(2.1. 現在インストールされている OpenSSH のバージョン番号を調べる 参照)。
もし、ここで期待しているバージョンとは別のバージョン番号が
表示されたら、どこかシステムの別の場所にあるサーバデーモンが
間違って実行されていることがわかります。
サーバデーモンがうまく起動しない場合は 7.2. サーバが起動しない を参照してください。
OpenSSHを新規にインストールした場合の設定ファイルや、
ほとんどのディストリビューションで提供されている OpenSSH の設定ファイルは、
たいていデフォルトで安全なように作られています。しかし、
ディストリビューションごとの都合により、設定の一部が
変更されている場合もあるため、サーバを実際に外部に公開する前には
かならず sshd_config
設定ファイルの内容を確認するようにしてください
(5.2. sshd を安全に設定する 参照)。
コラム - sudo の勧め |
---|
のような一行を追加しておき、root権限を必要とする ほとんどの作業は%wheel ALL = (ALL) ALL su ではなく sudo を
使うようにしています。
ただし、 |