OpenSSL/ OpenSSH(SSH1) の設定に関するメモ(2003/03/25, 更新日:2003/09/22) 

 

ちゃんと読んでねメモです

昨今 OpenSSL/OpenSSH は、頻繁にセキュリティホールが見つかっているのが現状です。そのため本記事を参照しサービスを開始した場合、セキュリティホールへの感心とバージョンアップには、常に配慮をしてください。また、あきらかに使用しない時間帯であるのであれば、ssh によるサービスを停止するなどのスケジューリングも必要となるかもしれません。

便利の裏には常にリスクがあるということを・・・・忘れずに

設置しようかな〜メモです

グローバルなインターネットの環境から、Qube3J を操作したいと思われる貴方! 怖いですね〜はい。って意味不明・・・。えっとぉ安易に考えるのは、Telnet(23)ポートを空けて操作しようと考えてしまいますが、もともと Telnet(23) との通信には、垂れ流しの文字としてやりとりされるため、途中の経路でスニフィング(盗聴)されてしまうと、全ての通信内容が暴露されてしまいます。こまった〜。

OpenSSLとは

OpenSSL とは、Secure Sockets Layer(SSL v2/v3)および Transport Layer Security(TLS v1)を実装した高機能なオープンソースのツールキットである。OpenSSL ツールキットには Apache 形式のライセンスが供与されているため、いくつかの簡単なライセンスの制約下でなら、入手や商用・非商用の利用は自由である。ライセンスの詳細は、LICENCE ファイルを参照すること。

OpenSSHとは

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以降なので早急に対策が必要です。

OpenSSLをインストール

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 サイトより、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)

サーバ側の設定(sshd)

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     ←

サーバ側の設定(sshdの起動)

1) sshを起動します。

/usr/local/sbin/sshd

2) OSブート時に自動的に起動するように設定する。
   /etc/rc.d/rc.local に以下の行を追加しますが、この設定方法はOSによって異なります。

/usr/local/sbin/sshd

サーバ側の設定(ユーザの秘密鍵作成 : SSH1)

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_keys

3) クライアントに秘密鍵( ~/.ssh/identity )をファイル転送した後は、サーバ側の秘密鍵を削除します。これは、セキュリティ好ましくないための処置です。

※) "-p" オプションを指定することによりパスフレーズのみを変更することも可能です。

クライアント側の設定(UNIXからの接続)

1) 上記説明で作成した秘密鍵( ~/.ssh/identity )を、接続するクライアントに ftp等をして任意の場所にコピーします。でもって属性も 600(ここ重要!) にします。(名前を変えておいた方がいいかも。で、ここでは host_hoge って名前でコピーします)

% mv identity host_hoge
% chmod 600 host_hoge

2) コマンドラインから 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 1

6) こんな感じになります

% ssh hoge5

クライアント側の設定(TeraTermでの接続)

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 

  stoneで穴掘り

ざれごと・・・

これから・・・ってな具合で、こんなことを覚えておくと とっても 良いです。