OpenSSL/ OpenSSH(SSH1) の設定に関するメモ(2003/03/25,
更新日:2003/09/22)
昨今 OpenSSL/OpenSSH は、頻繁にセキュリティホールが見つかっているのが現状です。そのため本記事を参照しサービスを開始した場合、セキュリティホールへの感心とバージョンアップには、常に配慮をしてください。また、あきらかに使用しない時間帯であるのであれば、ssh によるサービスを停止するなどのスケジューリングも必要となるかもしれません。
便利の裏には常にリスクがあるということを・・・・忘れずに
グローバルなインターネットの環境から、Qube3J を操作したいと思われる貴方! 怖いですね〜はい。って意味不明・・・。えっとぉ安易に考えるのは、Telnet(23)ポートを空けて操作しようと考えてしまいますが、もともと Telnet(23) との通信には、垂れ流しの文字としてやりとりされるため、途中の経路でスニフィング(盗聴)されてしまうと、全ての通信内容が暴露されてしまいます。こまった〜。
OpenSSL とは、Secure Sockets Layer(SSL v2/v3)および Transport Layer Security(TLS v1)を実装した高機能なオープンソースのツールキットである。OpenSSL ツールキットには Apache 形式のライセンスが供与されているため、いくつかの簡単なライセンスの制約下でなら、入手や商用・非商用の利用は自由である。ライセンスの詳細は、LICENCE ファイルを参照すること。
OpenSSH とは、SSH の FREE バージョンである。OpenSSH には rlogin や telnet を置き換える ssh、rcp や ftp を置き換える scp などのプログラムが含まれている。
2003/09/22 現在の最新版は OpenSSH 3.7p1 である。これは SSH1プロトコル(1.3/1.5)、SSH2プロトコルをサポートしており、商用版の SSH1/2 と等価的に利用できる。配布や利用に制限のかかる部分はすべて OpenSSL のような外部のライブラリを使用するようになっている。このため、OpenSSH を利用するには OpenSSL が必要となる。
※2003/09/16現在、OpenSSH共通鍵というセキュリティホールが見つかっています。この対処した版は、3.7以降なので早急に対策が必要です。
Qube3Jにrootアカウントで入り下記のコマンドを実行する。(結構、時間かかります)
※ ソースを展開しないと、OpenSSHをコンパイルすることができない。
# rpm -bb /home/redhat/SPECS/openssl.spec
Sun Cobalt Qube3J のアップデートパッチを全て(2003/03/25版まで)当てた状態で作業を開始します。
sshd アカウントが作成されていないと、エラーとなり先に進むことが出来ない場面が多々ありますので、最初に作っちゃいましょう。(もちろん root で・・・)
# groupadd sshd
# useradd -g root -d /home/users/sshd -s /bin/usersh -m sshd
OpenSSH サイトより、OpenSSH の最新版(Linux版)モジュールをダウンロードしインストールします。
※ rootアカウントで下記の赤字コマンドを実行します。(かなり時間かかります♪)
# wget ftp://ftp.jp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-3.7p1.tar.gz
# gzip -cd openssh-3.7p1.tar.gz | tar xf -
# cd openssh-3.7p1
# ./configure
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
KerberosIV support: no
KerberosV support: no
Smartcard support: no
AFS support: no
S/KEY support: no
TCP Wrappers support: no
MD5 password support: no
IP address in $DISPLAY hack: no
Use IPv4 by default hack: no
Translate v4 in v6 hack: yes
BSD Auth support: no
Random number source: OpenSSL internal ONLY
Host: i586-pc-linux-gnu
Compiler: gcc
Compiler flags: -g -O2 -Wall -Wpointer-arith -Wno-uninitialized
Preprocessor flags:
Linker flags:
Libraries: -lutil -lz -lnsl -lcrypto -lcrypt
# make
# make install
./configure 実行時に上記の様な出力がされていない場合は、アップデートパッチが不十分な可能性もあります。
make 実行時に、「sshd」アカウントが作成されていない場合、下記のエラーメッセージが表示されます。
Privilege separation user sshd does not exist
make: [check-config] Error 255 (ignored)
1) rootアカウントでログインし、SSH経由でログインするときの認証方法を設定します。 /usr/local/etc/sshd_config 内の項目を以下の様に修正する。
Protocol 1,2 ← TTSSH は、ssh2(Protocol 2)をサポートしていません
PermitRootLogin no ← rootのログインを無効
IgnoreRhosts no ← r系コマンドを無効
RhostsAuthentication no ← rhostの認証を無効
RhostsRSAAuthentication no ←
RSAAuthentication yes ←
PasswordAuthentication no ← yes にすると、テキスト認証が可能です
IgnoreUserKnownHosts yes ←
1) sshを起動します。
/usr/local/sbin/sshd
2) OSブート時に自動的に起動するように設定する。
/etc/rc.d/rc.local に以下の行を追加しますが、この設定方法はOSによって異なります。
/usr/local/sbin/sshd
1) ログインすべきユーザ(ここでは hoge)で、以下のコマンドを実行します。
% ssh-keygen -t rsa1
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home2/hoge/.ssh/identity):
Created directory '/home2/hoge/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home2/hoge/.ssh/identity.
Your public key has been saved in /home2/hoge/.ssh/identity.pub.
The key fingerprint is:
30:51:ff:5f:xx:33:99:41:ff:ff:ff:ee:c4:b3:4e:34 hoge@ns※ passphrase とは、RSA認証時に要求される文字列を指し、ここで例としている hoge ユーザのパスワードでは、ない事に注意する。
※ ここでは passphrase に 「hogehoge」と設定した。
※ "-c" オプションで、コメントをつけると複数存在するキーの区別がつきやすくなります。2) クライアント認証時に対するファイルの設定を行います。
% cat ~/.ssh/identity.pub > ~/.ssh/authorized_keys
% chmod 600 ~/.ssh/authorized_keys3) クライアントに秘密鍵( ~/.ssh/identity )をファイル転送した後は、サーバ側の秘密鍵を削除します。これは、セキュリティ好ましくないための処置です。
※) "-p" オプションを指定することによりパスフレーズのみを変更することも可能です。
1) 上記説明で作成した秘密鍵( ~/.ssh/identity )を、接続するクライアントに ftp等をして任意の場所にコピーします。でもって属性も 600(ここ重要!) にします。(名前を変えておいた方がいいかも。で、ここでは host_hoge って名前でコピーします)
% mv identity host_hoge
% chmod 600 host_hoge2) コマンドラインから ssh を実行します。が・・・・エラーになります。
% ssh -i host_hoge -l hoge hoge
Permission denied (publickey,keyboard-interactive).3) なぜエラーになるかと言うと、デフォルトで protcol2 でアクセスしにいくのです。ですので・・・
% ssh -i host_hoge -l hoge -1 hoge
Enter passphrase for RSA key 'host_hoge': ← ここで passphrase に入れた 「hogehoge」を
Last login: Wed Jul 17 17:34:56 2002 from xxx.xxx.xxxx.xxxx
Sun Microsystems Inc. SunOS 5.8 Generic February 2000
Sun Microsystems Inc. SunOS 5.8 Generic February 2000
hoge@hoge%4) OKっしょ?
5) ~/.ssh/config に以下の様に記述すると hoge ホストのアクセスが楽になります。
Host hoge5
# Port 4989
IdentityFile ~/host_hoge
User hoge
Protocol 16) こんな感じになります
% ssh hoge5
1) 上記説明で作成した秘密鍵( ~/.ssh/identity )を、接続するクライアントのハードディスクにコピーします。
2) TeraTerm + TTSH で、SSH接続するサーバを指定します。
3) ”RSA認証鍵を使う”を選択し、個人鍵には先程クライアントのハードディスクにコピーした秘密鍵(identity)のあるディレクトリを指定します。
4) ユーザ名/パスフレーズに、該当の文字列を入れる。
※ いままでの説明でのユーザの場合は、以下の通りとなります。
ユーザ名 : hoge
パスフレーズ : hogehoge
RSA認証鍵を使う : チェック
個人鍵 : 秘密鍵 (identity)のあるディレクトリを指定する5) OKボタンを押下する。
クライアント側の設定(TeraTermのデフォルト設定)
毎回、秘密鍵(identity)の設定、ユーザ名の設定をするのは面倒だと言う場合は、TeraTerm + TTSH の設定を以下の様に設定します。
1) メニューから「設定-SSH認証」を選択し、デフォルトで使用する情報を入力する。
ユーザ名 : hoge
RSA認証鍵を使う : チェック
個人鍵 : 秘密鍵 (identity)のあるディレクトリを指定する2) メニューから「設定-設定の保存」を選択し、teraterm.ini を保存する。
※ TeraTerm の デフォルトインストール先は、"C:\Program Files\TTERMPRO\"
使用するボートが既に使用されていた場合
使用するポートが既に使用されていた場合、以下のエラーメッセージが表示されます。
eerror: Bind to port 22 on 0.0.0.0 failed: Address already in use.
fatal: Cannot bind any address.この対処として、使用済みのポートに対するプロセスを停止することにより解決しますが、該当のポートを誰が使用しているか判らないときは、下記のコマンドを実行することにより調べることができます。
# fuser -n tcp 22
22/tcp: 798
# ps -ef | grep 798
12:root 798 1 0 May21 ? 00:00:00 inetd上記の場合、"inetd"ですので、inetd.conf を覗いて・・・。なんてことをして再起動すれば問題は解決です。
FireWall からのアクセス
大抵の会社は、Squid-proxy などのプロキシを立ててあり外部と接続できるポートを塞いであります。そのため ssh, imap, pop3, など使用する場合、httpポートを使って特殊なソフトで通信するんですけど・・・・。まだ実験中です〜〜〜。まあ↓↓をみてやってみてください。
実戦で学ぶ、一歩進んだサーバ構築・運用術 : 第9回ssh
ざれごと・・・
これから・・・ってな具合で、こんなことを覚えておくと とっても 良いです。